1. Criar tabela adicional:
1.1. Tela Construtor de Telas;
1.2. Selecionar Tela detalhe:
![]() |
Tela Natureza de Receitas e Despesas |
2. Criar evento na tabela TGFCAB:
2.1. Tela Dicionário de Dados > Aba Eventos;
3. No banco de dados (Oracle), criar/substituir a stored procedure abaixo:
CREATE OR REPLACE PROCEDURE "STP_EVP_TGFCAB_NATPADRAODEV" (
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_COUNT INT;
V_CODTIPOPER INT;
V_CODNAT INT;
V_CODTOP 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_CODTIPOPER := EVP_GET_CAMPO_INT(P_IDSESSAO, 'CODTIPOPER');
SELECT COUNT(*) INTO V_COUNT FROM AD_TGFNATTOPPAD WHERE CODTIPOPER = V_CODTIPOPER;
IF V_COUNT > 0 THEN
SELECT CODNAT,CODTIPOPER INTO V_CODNAT,V_CODTOP FROM AD_TGFNATTOPPAD WHERE CODTIPOPER = V_CODTIPOPER;
IF V_CODTIPOPER = V_CODTOP THEN
EVP_SET_CAMPO_INT(P_IDSESSAO, 'CODNAT', V_CODNAT);
ELSE
RETURN;
END IF;
ELSE
RETURN;
END IF;
END IF;
END;
/
Nenhum comentário:
Postar um comentário