Usar gatilhos de dados típicos
Além de manter a validade dos dados por meio de tipos de dados e relacionamentos de tabela, o Business Central também contém lógica de negócios relacionada a dados. Essa lógica garante que regras de negócios mais complexas relacionadas a dados sejam aplicadas consistentemente à medida que os usuários inserem, alteram ou excluem informações no banco de dados. Essas regras de negócios complexas são codificadas em gatilhos de tabela como código AL. Você pode encontrar os mesmos padrões de código nos mesmos tipos de tabelas, independentemente da área do aplicativo à qual pertencem.
É importante compreender esses princípios e garantir que o código que você escreve não viole esses princípios.
Gatilho OnInsert
O gatilho de tabela OnInsert é executado quando um usuário insere um novo registro em uma tabela. O código no gatilho é executado antes do registro ser inserido na tabela. Se o código no gatilho causar um erro em tempo de execução, a operação de inserção será cancelada.
O gatilho OnInsert tem as seguintes finalidades em diferentes tipos de tabelas:
Tabela mestre: atribui o campo Nº da série de números adequada se o usuário não forneceu o valor manualmente. Ela também atribui as dimensões padrão para o tipo de conta, com base na configuração definida na tabela Dimensão Padrão.
Tabela subsidiária - verifica se todos os campos de chave primária necessários são inseridos para tabelas que têm chaves primárias complexas com três ou mais campos, ou verifica se quaisquer combinações de chave primária mutuamente exclusivas ou inaceitáveis estão selecionadas.
Tabela de diários - valida os valores nos campos Dimensão de Atalho 1 e Dimensão de Atalho 2.
Tabela de documentos (cabeçalho): atribui o campo Nº da série de números adequada se o usuário não forneceu o valor manualmente. Ela aplica determinados padrões, como datas. Ela verifica o filtro no campo que está relacionado ao registro mestre primário da área do aplicativo. Ela também atribuirá o valor do filtro ao campo se o campo for filtrado para um único valor.
Tabela de documento (linha) - verifica se o status poderá aceitar novas linhas se o documento for compatível com diferentes status.
Para esses tipos de tabela, gatilho OnInsert pode conter mais código. Para outros tipos de tabela, o gatilho OnInsert pode conter código específico ao cenário aplicável e nenhum princípio geral é aplicado.
Gatilho OnModify
O gatilho de tabela OnModify é executado quando um usuário altera um registro existente em uma tabela. O código no gatilho é executado antes do registro ser atualizado na tabela. O aplicativo cancelará as modificações se ocorrer um erro no código do gatilho.
O gatilho OnModify tem as seguintes finalidades em diferentes tipos de tabelas:
Tabela mestre - define o campo Data da Última Modificação como a data atual do sistema. (Para tabelas mestres, o gatilho OnRename deve concluir a mesma ação.)
Tabela de diários - verifica se uma modificação não viola as regras de negócios para o tipo de diário específico.
Tabela de documentos (cabeçalho): atribui o campo Nº da série de números adequada se o usuário não forneceu o valor manualmente. Ela aplica determinados padrões, como datas. Ela verifica o filtro no campo que está relacionado ao registro mestre primário da área do aplicativo. Ela também atribuirá o valor do filtro ao campo se o campo for filtrado para um único valor.
Tabela de documento (linha) - verifica se a modificação não viola as regras de negócios para o documento específico.
Para outros tipos de tabela, o gatilho OnModify pode conter código específico para o cenário aplicável e nenhum princípio geral é aplicado.
Gatilho OnDelete
O gatilho de tabela OnDelete é executado quando um usuário exclui um registro de uma tabela. O código no gatilho é executado antes do registro ser fisicamente excluído da tabela. O registro não será excluído se ocorrer um erro no código do gatilho.
O gatilho OnDelete tem as seguintes finalidades em diferentes tipos de tabelas:
Tabela mestre - verifica se as transações iniciadas, mas não concluídas (como ordens, trabalhos etc.), que estão relacionadas ao registro mestre não existem. Esse tipo de transação poderá deixar o sistema em um estado inconsistente ou causar problemas para o processamento da transação. O gatilho exclui todas as informações da subsidiária para o registro mestre, incluindo as dimensões padrão e quaisquer documentos e transações abertas.
Tabela complementar - exclui todas as informações da subsidiária para o registro complementar.
Tabela de diários - verifica se a exclusão não viola as regras de negócios para o tipo específico de diário.
Tabela de documentos (cabeçalho) - verifica se a exclusão não viola nenhuma regra de negócios para o documento específico e exclui todas as linhas de documento e informações de documentos da subsidiária.
Tabela de documentos (linha) - verifica se a exclusão não viola nenhuma regra de negócios para o documento específico e exclui todas as informações das linhas de documento da subsidiária.
Tabela de histórico de documentos (cabeçalho) - verifica se as condições sob as quais um documento lançado pode ser excluído são atendidas e, em seguida, exclui as linhas do documento lançado e as informações do documento lançado da subsidiária.
Tabela de histórico de documentos (linha) - exclui todas as informações de linha do documento lançado da subsidiária. Ela não verifica se as condições da exclusão são atendidas porque os usuários nunca podem excluir uma linha de histórico de documentos diretamente.
Dependendo do cenário, o gatilho OnDelete pode conter mais código e atingir mais metas do que especificado anteriormente.
Gatilho OnValidate
O gatilho de campo OnValidate é executado depois que o usuário insere um valor em um campo. O código nesse gatilho é executado depois que o aplicativo executa um comportamento de validação padrão, como a validação de tipo de dados.
Esse gatilho é frequentemente definido nos campos relacionados a outras tabelas, como tabelas mestres, tabelas subsidiárias e tabelas complementares. Quando ele é definido nesses campos, o gatilho geralmente executa as seguintes operações importantes:
Atribui as dimensões padrão, se aplicável
Atribui certos valores padrão a outros campos
Valida regras de negócios complexas específicas da ocorrência
Por exemplo, para o campo Nº do Recurso na tabela Linha do Diário de Recursos, o gatilho OnValidate executa as seguintes tarefas:
Atribui as dimensões padrão do recurso selecionado à linha do diário de recursos
Verifica se o recurso selecionado não está bloqueado
Atribui vários campos do recurso selecionado à linha do diário de recursos, como Descrição, Custo Unitário Direto, Nº do Grupo de Recursos e Grupo de Lançamentos de Produtos Gerais
Verifica se a folha de ponto está especificada para o recurso que requer folhas de ponto, caso a linha de recurso não seja criada automaticamente pelo sistema