quinta-feira, 28 de setembro de 2023

Obrigar preenchimento do campo Sugestão de Saída quando o parceiro for cliente

Necessidade: Preenchimento obrigatório do campo Sugestão Saída quando o parceiro que está sendo cadastrado é um cliente.




Na tela dicionário de dados, buscar pela tabela TGFCPL e criar o evento com a procedure abaixo:



 CREATE OR REPLACE PROCEDURE "STP_EVP_TGFCPL" (  
     P_TIPOEVENTO INT,  -- Identifica o tipo de evento  
     P_IDSESSAO VARCHAR2, -- Identificador da execução. Serve para buscar informações dos campos da execução.  
     P_CODUSU INT     -- Código do usuário logado  
 ) AS  
     BEFORE_INSERT INT;  
     AFTER_INSERT INT;  
     BEFORE_DELETE INT;  
     AFTER_DELETE INT;  
     BEFORE_UPDATE INT;  
     AFTER_UPDATE INT;  
     BEFORE_COMMIT INT;  
     V_SUGTIPNEGSAID INT;  
     V_CLIENTE CHAR(1);  
     V_CODPARC INT;  
 BEGIN  
     BEFORE_INSERT := 0;  
     AFTER_INSERT := 1;  
     BEFORE_DELETE := 2;  
     AFTER_DELETE := 3;  
     BEFORE_UPDATE := 4;  
     AFTER_UPDATE := 5;  
     BEFORE_COMMIT := 10;  
 /*******************************************************************************  
   É possível obter o valor dos campos através das Functions:  
  EVP_GET_CAMPO_DTA(P_IDSESSAO, 'NOMECAMPO') -- PARA CAMPOS DE DATA  
  EVP_GET_CAMPO_INT(P_IDSESSAO, 'NOMECAMPO') -- PARA CAMPOS NUMÉRICOS INTEIROS  
  EVP_GET_CAMPO_DEC(P_IDSESSAO, 'NOMECAMPO') -- PARA CAMPOS NUMÉRICOS DECIMAIS  
  EVP_GET_CAMPO_TEXTO(P_IDSESSAO, 'NOMECAMPO')  -- PARA CAMPOS TEXTO  
  O primeiro argumento é uma chave para esta execução. O segundo é o nome do campo.  
  Para os eventos BEFORE UPDATE, BEFORE INSERT e AFTER DELETE todos os campos estarão disponíveis.  
  Para os demais, somente os campos que pertencem à PK  
  * Os campos CLOB/TEXT serão enviados convertidos para VARCHAR(4000)  
  Também é possível alterar o valor de um campo através das Stored procedures:  
  EVP_SET_CAMPO_DTA(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UMA DATA  
  EVP_SET_CAMPO_INT(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UM NÚMERO INTEIRO  
  EVP_SET_CAMPO_DEC(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UM NÚMERO DECIMAL  
  EVP_SET_CAMPO_TEXTO(P_IDSESSAO, 'NOMECAMPO', VALOR) -- VALOR DEVE SER UM TEXTO  
 ********************************************************************************/  
     IF P_TIPOEVENTO = BEFORE_INSERT THEN  
       V_CODPARC := EVP_GET_CAMPO_INT(P_IDSESSAO, 'CODPARC');  
       V_SUGTIPNEGSAID := EVP_GET_CAMPO_INT(P_IDSESSAO, 'SUGTIPNEGSAID');  
       SELECT CLIENTE INTO V_CLIENTE FROM TGFPAR WHERE CODPARC = V_CODPARC;  
       IF V_SUGTIPNEGSAID IS NULL AND V_CLIENTE = 'S' THEN  
         RAISE_APPLICATION_ERROR(-20101,'<br><b>Para clientes, é necessário preencher o campo "Sugestão Saída" na aba "Tipo de Negociação".</b><br><br>');  
       ELSE  
         RETURN;  
       END IF;     
     END IF;  
     IF P_TIPOEVENTO = BEFORE_UPDATE THEN  
       V_CODPARC := EVP_GET_CAMPO_INT(P_IDSESSAO, 'CODPARC');  
       V_SUGTIPNEGSAID := EVP_GET_CAMPO_INT(P_IDSESSAO, 'SUGTIPNEGSAID');  
       SELECT CLIENTE INTO V_CLIENTE FROM TGFPAR WHERE CODPARC = V_CODPARC;  
       IF V_SUGTIPNEGSAID IS NULL AND V_CLIENTE = 'S' THEN  
         RAISE_APPLICATION_ERROR(-20101,'<br><b>Para clientes, é necessário preencher o campo "Sugestão Saída" na aba "Tipo de Negociação".</b><br><br>');  
       ELSE  
         RETURN;  
       END IF;     
     END IF;  
 END;  
 /  

Nenhum comentário:

Postar um comentário