O Form estar em modo de inclusão ou alteração?

(George Carvalho) #1

Amigos,

Como identifico se um FORMULÁRIO esta em modo de INCLUSÃO ou ALTERAÇÃO?

George Carvalho

(ariel.amarilio) #2

eu tambem tenho essa duvida, se por exemplo eu quero validar determinados campos de acordo com o processo (insert / update), existe uma forma de configurar os campos em cada situação?

desde já valeu.

(Cleyton Euler) #3

Eu faço assim:

Supondo que meu frm tenha os campos
ID_Produto
Nome_Produto
Preco_Produto

No SQL (where) do frm eu coloco: ID_Produto = [var_Controle]
No Menu, no evento onExecute, coloco: [var_Controle] = 0

Nas validações, que geralmente ocorrem no OnLoad do frm eu condiciono o valor de [var_Controle]. Se for = zero vai ser sempre insert e se for <> de 0 vai ser update.

Em ligações que envolvem o referido frm eu passo o valor do campo para [var_Controle]. Exemplo: numa consulta que tem uma ligação com o frm eu passo para [var_Controle] o valor do campo ID_Produto. Assim numa validação do frm o valor vai ser diferente de 0 e vc consegue controlar isso.

Não sei se foi clara a explicação, mas funciona perfeitamente.

Editado
Outra dica: sempre que quiser que um frm seja inicializado em modo insert, pode-se usar esta técnica ao invés de usar uma macro. No SC, quando vc usa a where e a query retorna vazio ele abre o frm em modo insert. A mesma técnica é útil quando precisa otimizar de carregamento do frm. Em atualizações de registros por exemplo eu uso um controle com um auto-complete que chama o frm passando o id para [var_Controle]. Assim o frm carrega apenas o registro que preciso. Isto evita que tenhamos que usar muitas macros para controlar barra de navegação por exemplo.

(George Carvalho) #4

Para minha tristeza: compreendo, mas realmente o scriptcase não possui esse valor (resposta do suporte)

Deu saudade do GAS.

Obrigado Cleyton, vou implementar sua sugestão.

(Cleyton Euler) #5

Já estou acostumado com este tipo de resposta do suporte. Engraçado é que dizem que não tem e não dizem o que dá para fazer para remediar essa falta do SC. Fiquei uma semana quebrando a cabeça para implementar algo que fizesse esse controle.

(George Carvalho) #6

Pois é, no GAS existe uma variável com o estado da aplicação o que facilita e muito tomarmos decisões em algumas aplicações, sugeri que o mesmo fosse implementado no SC.

(Cleyton Euler) #7

Versão beta do GASweb tá matadora. Para mim o diferencial do SC é a geração em PHP. A maioria de meus projetos tem esse requisito. No mais tanto o Maker quanto o GAS dá show no SC por enquanto. Inclusive no quesito suporte. A NM tem que amadurecer muito ainda para chegar perto destes outros cases.

(George Carvalho) #8

Cleyton,

No meu caso só preciso saber se é uma inclusão no momento em que o form é carregado, então fiz assim no evento onLoad do form:

// EXIBE ENIBE SITUACAO
if ({proprietario_id} == “”){
sc_block_display(situacao, off);
}

Como sei que o campo {proprietario_id} é o brigatório, testo se o mesmo esta vazio, se afirmativo é uma inclusão então inibo o bloco “situacao”.

George Carvalho

(Cleyton Euler) #9

Excelente solução Carvalho.

(George Carvalho) #10

Obrigado.

(Rodrigo Lins) #11

Bom Dia,

Gostaria de dizer que existe uma forma sim de saber em qual momento o formulário está sendo executado, com as variáveis de botão, elas são:

  • sc_btn_new

  • sc_btn_update

  • sc_btn_insert

  • sc_btn_delete

Explicação:
Quando um dos botões de atualização do formulário (insert, update, delete ou new) são clicados, este evento é disponibilizado, podendo ser testado e utilizado dentro de um evento php, permitindo a tomada de decisões em função de cada evento.

Exemplo:
No evento Onload de um formulário:

if (sc_btn_new) {
sc_block_display(‘meu_bloco’, ‘off’);
} else {

  sc_block_display('meu_bloco', 'on');

}

Neste exemplo ele só irá esconder o bloco quando estiver em modo de inclusão, caso não seja inclusão ele irá tornar a mostrar o bloco (modo de atualização)

OBS: O funcionamento pode variar de acordo com o tipo de formulário e necessidade. Mas, fiz o exemplo em um formulário do tipo simples e funcionou corretamente.

Espero ter esclarecido e ajudado.

Rodrigo Lins.

(rrma) #12

Rodrigo Lins,

Aproveitando sua explicação, como eu poderia saber o modo de abertura do form quando o ele for aberto por uma menu árvore programado? Neste caso eu não cliquei em botões para gerar o evento sc_btn_new ou sc_btn_update.

Por exemplo, no menu árvore, um dos ítens eu chamo um form sem passagem de parâmetros, daí ele abre em modo de inclusão. Em outro ítem deste menu, eu abro o mesmo form passando parâmetros, e o form é automaticamente aberto em modo de edição, localizando o registro desejado.

Preciso alterar o cabeçalho deste form chamado, de acordo com o modo, inclusão ou alteração, só que, na edição do cabeçalho no SC5, os campos “Título da inclusão” ou “Título da Atualização” não aceitam variáveis. Quando uso por exemplo “Registro Nº: [registro]”, a aplicação aparece exatamente como está escrito, como uma string, sem interpretar a variável [registro].

Se existir algum modo de usar variável nos campos “Título da inclusão” ou “Título da Atualização” resolve meu problema de forma bem simples. Tentei até usar iif() nas variáveis do cabeçalho, mas o SC deleta o conteúdo do campo logo após a primeira vírgula. Onde escrevo: ‘iif(sc_btn_new, “Adicionando edificação”, "Edificação: ".[und])’, após salvar a aplicação, o SC deixa apenas 'iif(sc_btn_new, ’ .

Obrigado.

Rodrigo Araújo

(Rodrigo Lins) #13

Bom Dia,

Você pode resolver de duas maneiras, ou com a macro sc_menu_item ou sc_script_name.
Exemplo sc_menu_item:

if ({sc_menu_item} == “item_1”){

        sc_reset_global([global1], [global2]);

}

Exemplo sc_script_name:

if ({sc_script_name} == “apl1” ) {

   sc_redir(apl_inf_emp);

}

Espero ter ajudado.

Rodrigo Lins.

(rayfcrols) #14

Rodrigo, é muito útil sua informação, mais como eu faria para trabalhar eventos em uma aplicação em grid? Ex: ao clicar no botão editar linha.

(George Carvalho) #15

Rodrigo Lins,

Quando um formulário é aberto por uma aplicação filtro e em modo de inclusão a variável de botão sc_btn_new vai estar ativa???

Grato

George Carvalho

(rayfcrols) #16

George,

Não sei se ainda é util, mais tem um maneira de você testar utilizando as variáveis internas do SC mais especificamente do Dicionário de Dados.

{lang_othr_frmi_titl} -> Inclusão

{lang_othr_frmu_titl} -> Atualização

(George Carvalho) #17

Obrigado rayfcrols,

Considero todo aprendizado importante.

Mais saber se “Quando um formulário é aberto por uma aplicação filtro e em modo de inclusão a variável de botão sc_btn_new vai estar ativa” é uma curiosida minha e serviria para futuras implementações.

No meu caso só preciso saber se é uma inclusão no momento em que o form é carregado, então coloquei no evento onLoad do form"

// EXIBE ENIBE SITUACAO
if ({proprietario_id} == “”){
sc_block_display(situacao, off);
}

Como sei que o campo {proprietario_id} é o brigatório, testo se o mesmo esta vazio, se afirmativo é uma inclusão então inibo o bloco “situacao”.

George Carvalho