Esta é uma tradução automática. O post original está disponível em Inglês .

ANVEDI Events

Anveo EDI Connect oferece uma única codeunit para eventos de integração: Codeunit ANVEDI Events. Pode reagir aos eventos desta codeunit através da sua própria codeunit. Os eventos são suportados tanto na versão FOB como na versão Extension do Microsoft Dynamics.

Events

Os Events disponíveis são:

  • OnFunctionRegistration
  • OnFunctionExecution
  • OnJob
  • OnAcceptTransmission
  • OnBeforeList
  • OnAfterList
  • OnBeforeReceive
  • OnAfterReceive
  • OnBeforeArchive
  • OnAfterArchive
  • OnBeforeDelete
  • OnAfterDelete
  • OnBeforeSend
  • OnComposeMessage
  • OnAfterSend
  • OnReplacePlaceholder
  • OnError
  • OnAfterProcess

OnFunctionRegistration

procedure OnFunctionRegistration(Register: Codeunit "ANVEDI Function Register")

Este evento é chamado quando o módulo procura funções personalizadas. É possível definir as suas próprias funções utilizando a funcionalidade fornecida pela codeunit ANVEDI Function Register que é fornecida sob o nome Register. A codeunit fornece duas funções: RegisterFunction e AddParameter.

RegisterFunction espera dois parâmetros, o nome do objeto e o nome da função da sua nova função. Estes nomes podem ser escolhidos livremente, mas não podem exceder 30 caracteres.

Os primeiros 29 caracteres da combinação do nome do objeto e da função têm de ser únicos para poder especificar os parâmetros do mapping. Deve tentar manter os nomes curtos.

Depois de registar uma função, pode chamar AddParameter até 5 vezes. AddParameter espera um nome para o parâmetro da sua função. É possível utilizar vários blocos de RegisterFunction e AddParameter num único Event. Mas recomendamos que separe várias funções para vários ouvintes Event.

Register.RegisterFunction('CustomObj', 'MyFunction');
Register.AddParameter('Name');
Register.AddParameter('Value');
Exemplo: Utilização do registo de funções

Depois de registar a função, é necessário reagir às chamadas de função. Isto é feito através do OnFunctionExecution descrito a seguir.

OnFunctionExecution

procedure OnFunctionExecution(FunctionCall: Codeunit "ANVEDI Function Call")

O Event é chamado quando o módulo está à procura de uma implementação de função personalizada. Uma instância da codeunit ANVEDI Function Call é passada para este evento com o nome FunctionCall.

Deve verificar se o FunctionCall corresponde à sua função personalizada e só executar qualquer código se corresponder. Isto é feito chamando a função Is() com os mesmos parâmetros que chamou a RegisterFunction no OnFunctionRegistration. Se Is() for verdadeiro, pode aceder aos parâmetros, executar o seu código personalizado e devolver um valor.

if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
            Name := FunctionCall.GetTextParameter(1);
            Val := FunctionCall.GetIntegerParameter(2);
            Message(Name + ': ' + Format(Val));
            FunctionCall.SetResult(TRUE);
 end;
Exemplo: Reagir à chamada de função

A codeunit ANVEDI Function Call fornece as seguintes funções:

procedure Is(ObjectName: Text[30];FunctionName: Text[30]): Boolean

Devolve se a chamada de função corresponde à assinatura de função especificada.

procedure SetResult(Value: Variant)

Tem de chamar esta função para mostrar ao módulo que tratou a chamada de função. Pode passar o resultado de uma função ou utilizar apenas true como resultado.

procedure GetTextParameter(ParNum: Integer): Text[1024]

Recupera um parâmetro com o número dado como texto. O índice começa com 1.

procedure GetIntegerParameter(ParNum: Integer): Integer

Recupera um parâmetro com o número dado como inteiro. O índice começa com 1.

procedure GetBooleanParameter(ParNum: Integer): Boolean

Recupera um parâmetro com o número dado como booleano. O índice começa com 1.

procedure GetDecimalParameter(ParNum: Integer): Decimal

Recupera um parâmetro com o número dado como decimal. O índice começa com 1.

procedure GetDateParameter(ParNum: Integer): Date

Recupera um parâmetro com o número dado como data. O índice começa com 1.

procedure GetTimeParameter(ParNum: Integer): Time

Recupera um parâmetro com o número indicado como data e hora. O índice começa com 1.

procedure GetDateTimeParameter(ParNum: Integer): DateTime

Recupera um parâmetro com o número dado como tempo. O índice começa com 1.

procedure GetParameter(ParNum: Integer;var EDIVariant: Codeunit "ANVEDI Variant"): Boolean

Recupera um parâmetro com o número dado como EDIVariante. A função devolve se o parâmetro pode ser recuperado. O índice começa com 1.

OnJob

procedure OnJob(ParameterDictionary: Codeunit "ANVEDI Data Structures";EventArgs: Codeunit "ANVEDI Event Args")

Pode utilizar a codeunit de trabalho do módulo para definir trabalhos personalizados. A codeunit permite suportar a utilização de múltiplos parâmetros. Pode encontrar mais informações na documentação do gestor de tarefas.

ParamaterDictionary

Um dicionário que contém os parâmetros passados para a tarefa.

EventArgs

Deve definir o Event como tratado, se tiver processado um trabalho. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnAcceptTransmission

procedure OnAcceptTransmission(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Esta função é chamada para determinar se um ficheiro ou mensagem deve ser aceite ou ignorado pelo módulo. O módulo não armazena se uma transmissão foi ignorada e chamará esta função sempre que vir uma transmissão. O ficheiro ainda não foi lido, pelo que só é possível decidir com base nos metadados disponíveis.

ANVEDITransmission

A transmissão, para a qual os metadados foram recuperados. Note-se que, neste momento, não foram recebidos quaisquer dados e que o registo ainda não foi inserido na base de dados.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. Deve também devolver um valor que indique se a transmissão deve ser processada (definir o valor de retorno como true) ou não (definir como false). A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnBeforeList

procedure OnBeforeList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")

Este código é chamado antes de o módulo procurar novos dados. Isto pode ser utilizado para emitir um comando ou script externo para receber os ficheiros, antes de o módulo procurar novos dados.

EDICommunicationChannel

O canal de comunicação que deve recuperar os dados.

EventArgs

Deve definir o Event como tratado, se tiver processado o evento. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnAfterList

procedure OnAfterList(EDICommunicationChannel: Record "ANVEDI Communication Channel";EventArgs: Codeunit "ANVEDI Event Args")
EDICommunicationChannel

O canal de comunicação que deve recuperar os dados.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

Este código é chamado depois de o módulo ter procurado novos dados.

OnBeforeReceive

procedure OnBeforeReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado antes de uma transmissão ser recuperada. Note-se que não é possível anular o processamento nesta altura. Se pretender decidir se deve ou não recuperar uma mensagem, utilize o EventOnAcceptTransmission.

ANVEDITransmission

A transmissão. As mensagens ainda não foram recebidas.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnAfterReceive

procedure OnAfterReceive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado após a receção de uma transmissão.

ANVEDITransmission

A transmissão depois de ter sido recuperada (pode aceder às mensagens).

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnBeforeArchive

procedure OnBeforeArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado antes de uma transmissão ser arquivada.

ANVEDITransmission

A transmissão que vai ser arquivada na localização remota.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnAfterArchive

procedure OnAfterArchive(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado depois de uma transmissão ser arquivada.

ANVEDITransmission

A transmissão que foi arquivada na localização remota.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnBeforeDelete

procedure OnBeforeDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado antes de uma transmissão ser eliminada.

ANVEDITransmission

A transmissão que vai ser eliminada na localização remota.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnAfterDelete

procedure OnAfterDelete(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado depois de uma transmissão ser eliminada.

ANVEDITransmission

A transmissão que foi eliminada da localização remota.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnBeforeSend

procedure OnBeforeSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado antes de uma transmissão ser enviada.

ANVEDITransmission

A transmissão que vai ser enviada.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnComposeMessage

procedure OnComposeMessage(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado quando uma transmissão é composta.

ANVEDITransmission

A transmissão que é composta.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnAfterSend

procedure OnAfterSend(ANVEDITransmission: Record "ANVEDI Transmission";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado após o envio de uma transmissão.

ANVEDITransmission

A transmissão que foi enviada.

EventArgs

Deve definir o Event como tratado, se tiver processado o evento. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnReplacePlaceholder

procedure OnReplacePlaceholder(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")

Esta função é chamada quando é avaliada uma cadeia que pode conter variáveis definidas pelo utilizador, como o nome de um ficheiro.

Placeholder

O nome do marcador de posição. O módulo está atualmente à procura de um valor para substituir este espaço reservado específico. Se pretender fornecer um valor, tem de especificar o resultado e definir o evento a tratar no EventArgs

ANVEDILinkedDocument

Um registo pré-filtrado dos documentos ligados. É possível, por exemplo, utilizar esta tabela para obter os documentos do buffer que estão contidos no ficheiro.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. Também é necessário fornecer um valor. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

O exemplo seguinte mostra como é possível devolver dados do documento ligado:

[EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
local procedure OnReplacePlaceholderExternalDocumentNo(Placeholder: Text[50];var ANVEDILinkedDocument: Record "ANVEDI Linked Document";EventArgs: Codeunit "ANVEDI Event Args")
var
  recID: RecordID;
  ediDocument: Record "ANVEDI Document";
begin
  if Placeholder = 'ExternalDocumentNo' then begin
    if ANVEDILinkedDocument.FindSet() then 
      repeat
        recID := ANVEDILinkedDocument.RecordId;
        if recID.TableNo = Database::"ANVEDI Document" then begin
          ediDocument.get(recID);
          EventArgs.SetResult(ediDocument."External Document No.");
          EventArgs.SetHandled(true);
          exit;
        end;
      until ANVEDILinkedDocument.Next() = 0;
  end;
end;
Exemplo: OnReplacePlaceholder

OnError

procedure OnError(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")

Este Event é chamado quando ocorre um erro na fila de processamento.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

OnAfterProcess

procedure OnAfterProcess(ANVEDIProcessingQueue: Record "ANVEDI Processing Queue";EventArgs: Codeunit "ANVEDI Event Args")

Esse Event é chamado após o processamento de uma entrada na tabela EDI Processing Queue. Deve-se verificar o estado da entrada aprovada e reagir em conformidade.

EventArgs

O utilizador deve definir o Event como tratado, se tiver processado o Event. A descrição da estrutura ANVEDI Event Args pode ser encontrada no final deste capítulo.

ANVEDI Event Args

Alguns dos Events utilizam uma estrutura chamada ANVEDI Event Args. Esta estrutura permite-lhe devolver valores e informar o módulo se o evento foi tratado.

As seguintes funções estão disponíveis no ANVEDI Event Args passadas para o Event:

SetHandled(Value: Boolean)
Value

Se o Event foi tratado pelo seu código.

SetResult(Value: Variant)
Value

O valor de retorno, se o Event esperar um valor de retorno.

Exemplo

O exemplo seguinte mostra como pode adicionar a sua própria função personalizada “MYOBJECT.MYFUNC”, que mostra uma mensagem com o nome fornecido seguido de ‘: ‘ e o valor. Pode adicionar tantas funções de tantas extensões quantas as que necessitar.

codeunit 50100 MyAnveoFunctions
{
    var
        ObjectNameTok: label 'MYOBJECT';
        FunctionNameTok: label 'MYFUNC';


    [EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
    local procedure OnRegisterFunctions(Register: Codeunit "ANVEDI Function Register")
    begin
        Register.RegisterFunction(ObjectNameTok, FunctionNameTok);
        Register.AddParameter('Name');
        Register.AddParameter('Value');
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::="" Events="" TRUE,="" TRUE)]=""]
    local procedure OnFunction(FunctionCall: Codeunit "ANVEDI Function Call")
    var
        Name: Text;
        Val: Integer;
    begin
        if FunctionCall.Is(ObjectNameTok, FunctionNameTok) then begin
            Name := FunctionCall.GetTextParameter(1);
            Val := FunctionCall.GetIntegerParameter(2);
            Message(Name + ': ' + Format(Val));
            FunctionCall.SetResult(TRUE);
        end;
    end;
}
Exemplo completo: Função personalizada

Dependências

Se pretender reagir ao Event através de AL, é necessário adicionar uma dependência ao módulo Anveo EDI Connect.

Os valores para a Extension OnPremise são:

{
      "id": "25286BD2-B08A-49F9-B613-64122CCEE4E1",
      "name": "Anveo EDI Connect - OnPremise",
      "publisher": "conion media GmbH",
      "version": "5.x.y.z"
}

Certifique-se de que substitui x, y, z pelo número de versão correto.

Os valores para o Business Central Online eExtension do Código Universal são:

{
      "id": "FC195C4F-19BF-4167-BFE8-6D1FF7D266BC",
      "name": "Anveo EDI Connect",
      "publisher": "conion media GmbH",
      "version": "5.x.y.z"
}

Certifique-se de que substitui x, y, z pelo número de versão correto. As versões mais antigas da BC designavam-se por “id” “appId”.