Problema de sobreposição de variáveis globais ao utilizar menu com abas

Atualmente no nosso projeto, fazemos uso extenso de variáveis globais. Como é de conhecimento geral, o SC trata as variáveis globais internamente como variáveis de sessão. O que ocorre é que quando vamos tentar utilizar o recurso de abrir aplicações em abas, isso gera um grande problema. Basicamente uma aplicação, ao ser aberta, troca a variável da outra aplicação que já estava aberta no menu. Tudo vira uma grande bagunça, a app 1 agora está com dados da app 2 e assim sucessivamente. Isto basicamente nos impede de utilizar o recurso de abas.
Alguém teria alguma dica de como contornar esta limitação do SC?

As váriaveis globais não devem ser usadas em excesso, muitas vezes não é necessário. Exemplo no sc_redir() para um outro form você pode utilizar a chave primária do form que você vai abrir como parâmetro na ligação, dispensando o uso de global : exemplo:
ligação entre form cliente e contas a receber sc_redir(contas_receber.php,contas_receber_cliente_id={cliente_id});
lembrando que o parametro tem que esta em caixa baixa sempre;
Outro detalhe:
Também não se deve utilizar o mesmo nome em campos, var local e var global, {campo}, $campo, [campo], isso dar ruim, pois nos 3 casos o resultado do código compilado vai ser $this->campo; Outra dica é nunca usar a mesma global para funcionalidades diferentes que possam interferir em outra janela aberta;
Se você usa uma global e atribui valor em dois pontos distintos para filtro, uma atribuição mata a outra e mudará o comportamento esperado;

1 Curtida

Pois é. O problema é que temos um sistema bem antigo que faz uso extenso de variáveis globais. E, aparentemente, o uso de variáveis locais nos eventos não é bem aceito pelas aplicações.

Variável local é quando a variável só pode ser usada dentro do método.
Criar variáveis globais não são boas normas de programação em php pelo PSR1 e PSR2.
No SC uma global fica em sessão, e o próprio SC já faz um uso exagerado desse tipo de variável.
Não aconselho.
Como para o SC toda aplicação é.uma classe ideal é criar atributos para para guardar localmente valores por aplicação, mas vale lembrar que eventos Ajax não é possivel referenciar esse valores com segurança.

Haroldo, obrigado pelas dicas. Com certeza utilizar variáveis globais do SC não é uma boa. Infelizmente não conseguimos encontrar variáveis que possam ser recebidas por parâmetros e funcionem nas aplicações sem que sejam de sessão.

Não sei se vai resolver seu caso, mas entao tente criar variaveis em sessao do tipo array, contendo o nome da app ou algo que seja seguro manter como indice e dentro desta daí sim popule os dados que precisa.