Exemplos de Validação em Objetos
Com o auxílio do Otimizador de Telas é possível criar validações que alteram o comportamento do programa, adicionando regras de negócio específicas do cliente.
É possível criar condições para desabilitar ou esconder botões na tela. Também é possível atribuir uma lista de valores possíveis para determinado campo, fazendo assim com que as operações de inclusão, exclusão e alteração sejam permitidas ou negadas em determinadas situações.
A seguir serão demonstrados alguns exemplos destas funcionalidades na Função Implantação programa CD0204.
No exemplo serão criadas as seguintes regras de negócio:
- Uma validação que executará um programa externo para verificar se a data de implantação é posterior a 30 dias da data atual e o estabelecimento no qual o usuário está incluindo ou modificando um item é valido para ele.
- Validações ao pressionar os botões Cópia e Exportar para que também não seja permitido efetuar estas operações se o estabelecimento e data não forem validos para o usuário.
- O botão Características do Item só ficará visível se o campo Folha Especificação estiver preenchido.
Passos para Configuração:
Passo | Descrição |
1 | Primeiramente, muda-se a propriedade Validação dos botões Cópia e Exportar para o valor Sim. Dessa forma, os botões passarão a estar sempre habilitados, executando todas as listas de valores dos objetos da tela, fazendo assim a validação, e verificando a possibilidade de executar a funcionalidade (por exemplo, efetuar uma cópia de registro no momento em que o botão foi pressionado). |
2 | Após o primeiro passo é necessário criar uma lista de valores possíveis para o campo Estabelecimento Padrão, onde será executado o método para fazer a validação de estabelecimento e data de implantação. |
3 | Para que a lista de valores possa ser criada, é necessário executar a janela Lista Valores, pressionando o botão ao lado da propriedade Lista Valores. |
4 | Dentro da janela Lista Valores, é escolhida a opção “Retorno Externo”, depois é informado o caminho do programa de validação através do botão Pesquisa e escolhido o método interno do programa que fará a validação. |
5 | Pressiona-se o botão Cria Nova Regra e depois o botão Confirma para fechar a janela e concluir a criação da lista. |
6 | Após isso é alterada a propriedade Apelido do campo Data Implantação. Isso se deve ao fato de que os métodos da biblioteca de retorno externo do Otimizador de Telas (solib001.i) acessam os objetos através de seu apelido. Por isso é criado o apelido “data” para este campo, pois assim ele será validado no mesmo método que valida o estabelecimento. |
7 | Para o botão Características do Item é alterada a propriedade Invisível para Condição (fazendo assim que ele fique invisível dependendo do resultado da condição). Depois é executada a Janela Condição. |
8 | Na Janela Condição, é escolhido o objeto que se deseja validar (campo “cd-folh-item”) e depois é procedido da mesma forma que na Janela Lista Valores, ou seja, é escolhida a opção Retorno Externo, depois é informado o caminho do programa de validação através do botão Pesquisa e escolhido o método interno do programa que fará a validação. Pressiona-se o botão Cria Nova Regra e depois o botão Confirma para fechar a janela e concluir a criação da condição. |
Conclusão
Depois de concluído esse processo pode se visualizar o funcionamento do perfil em ação. Deve ser executado por um usuário que não seja administrador do SOP para as validações funcionarem corretamente.
Resultado
Teste | Descrição |
---|---|
1 | Ao tentar incluir um item onde o estabelecimento não é valido para o usuário, a operação é negada. |
2 | Ao tentar a realização do teste 1, ou seja, incluir ou modificar um item com um estabelecimento inválido, a validação interfere não permitindo a inclusão e apresentando uma mensagem como abaixo: O mesmo acontece com o campo Data Implantação, ao qual foi dado o apelido data. Ele também é verificado através da validação do campo cod-estabel. |
4 | Ao tentar incluir ou modificar um item com a data de implantação menor que trinta dias antes da data atual, a validação não permite a operação e apresenta uma mensagem como abaixo: |
5 | A mesma coisa acontece ao pressionar os botões Cópia e Exportar quando o estabelecimento ou a data de implantação for inválido. Outra validação acontece também para o estado do botão Características do Item, nota-se que quando o campo Folha Especificação é branco, o botão fica invisível. Já quando o campo está preenchido o campo também é visível. |
Exemplo de Implementação
/******************************************************************************* ** Programa..: validaestab.p ** Objetivo..: Retorno Externo para propriedades Condicao/Lista Valores SOP ** Data......: 01/10/2002 ** Notas.....: Programa de exemplo de retorno externo. ** Contém o protótipo necessário para definicao de programas de ** retorno externo e definição dos métodos ** É possível adicionar novos métodos, conforme necessidade ********************************************************************************/ /* +++ definicao da biblioteca de funcoes +++ */ {sop\solib001.i} /* +++ prototipacao dos metodos existentes - apenas para consulta +++ */ /* +++ FUNCTION getObjectHandle RETURNS HANDLE (vAlias AS CHAR) +++ */ /* +++ FUNCTION getObjectName RETURNS CHAR (vAlias AS CHAR) +++ */ /* +++ FUNCTION getObjectValue RETURNS CHAR (vAlias AS CHAR) +++ */ /* +++ FUNCTION getCurrentObjectHandle RETURNS HANDLE ( ) +++ */ /* +++ FUNCTION getCurrentObjectName RETURNS CHAR ( ) +++ */ /* +++ FUNCTION getCurrentObjectValue RETURNS CHAR ( ) +++ */ /* +++ definicao de variaveis +++ */ DEF NEW GLOBAL SHARED VAR v_cod_usuar_corren AS CHAR NO-UNDO. /******************************************************************************* Procedure validaEstabData Objetivo: Exemplo de validacao do estabelecimento atraves de tabela e tambem da data *******************************************************************************/ PROCEDURE validaEstabData: /* +++ parametros necessarios sop +++ */ DEFINE OUTPUT PARAMETER pLogOk AS LOGICAL NO-UNDO. DEFINE OUTPUT PARAMETER pDesMessage AS CHARACTER NO-UNDO. /* +++ variaveis locais +++ */ DEFINE VARIABLE estab AS CHARACTER NO-UNDO. DEFINE VARIABLE valordata AS DATE NO-UNDO. /* +++ codigo da validação +++ */ ASSIGN estab = getCurrentObjectValue(). /* pegar o valor do campo cod-estabel */ FIND FIRST usuar-estab NO-LOCK WHERE usuar-estab.cod-usuar = v_cod_usuar_corren AND usuar-estab.cod-estab = estab NO-ERROR. IF NOT AVAIL usuar-estab THEN DO: ASSIGN pLogOk = NO pDesMessage = 'Estabelecimento inválido'. RETURN. END. valordata = DATE(getObjectValue('data')). IF valordata < (TODAY - 30) THEN DO: ASSIGN pLogOk = NO pDesMessage = 'Data de implantação não pode menor do que 30 dias atrás'. RETURN. END. ASSIGN pLogOk = YES. RETURN. END PROCEDURE. PROCEDURE validaValorBranco: /* +++ parametros necessarios sop +++ */ DEFINE OUTPUT PARAMETER pLogOk AS LOGICAL NO-UNDO. DEFINE OUTPUT PARAMETER pDesMessage AS CHARACTER NO-UNDO. plogok = (getcurrentObjectValue() = ''). RETURN. END PROCEDURE.
Os procedimentos acima podem ser utilizados tanto para lista de valores como condição, observando apenas seu retorno lógico. Quando a validação é uma condição (invisível ou desabilitado), se o método retornar “YES”, o botão será escondido ou desabilitado.
Se o mesmo método for utilizado para uma lista de valores, retornando “YES”, ele irá permitir a inclusão do registro, o que não seria desejado.
Nestes casos, quando um método retornar “YES” para uma lista de valores (o que indica que a validação foi criticada com sucesso), ele deve retornar “NO” para não desabilitar / esconder um botão (para a validação ser criticada com sucesso). Isto pode ser feito através da utilização dos sinais “=” ou “<>” (igual ou diferente) na hora de criar uma lista de valores ou condição.
Se um método retorna “YES” para criticar com sucesso uma lista de valores, ele deve retornar “NO” para não desabilitar / esconder um botão. Então, quando se estiver incluindo o método numa condição, deve se utilizar o sinal “<>”, pois assim, o resultado da validação será invertido tornando assim a validação utilizável para esta situação.
A explicação acima pode ser visualizada conforme a tabela abaixo
Propriedade | Valor Retornado | Operador da Regra | Ação |
---|---|---|---|
Lista de Valor | YES | = | Validação OK |
Lista de Valor | NO | = | Erro |
Condição | YES | = | Desabilita |
Condição | NO | = | Validação OK |
Condição | YES | <> | Validação OK |
Condição | NO | <> | Desabilita |
Conforme a tabela, pode ser utilizado um único método X para utilização em botões e lista de valores. O retorno desse método deve ser YES quando a validação ocorrer com sucesso. Para utilizar o mesmo método em botões, basta criar condições com o operador “<>” (diferente).
Nota:
- Ao executar um programa que contenha customização via SOP:
- Por exemplo: Programa CD0147;
- Chamado por uma UPC de outro programa, que também possui customização via SOP:
- Por exemplo: Programa CD0204 possui uma UPC que chama o programa CD0147;
- As customizações do programa CD0147 são ativadas somente se for executada conforme parametrização do Cadastro de Programa.
Para as customizações via SOP serem ativadas, o programa deve ser chamado conforme está parametrizado no Cadastro de Programa (bas_prog_dtsul).