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

ANVEDI Callback

As informações desta página são apenas para instalações no local, utilizando os arquivos FOB.

Se você estiver usando o Microsoft Dynamics NAV 2017 ou mais recente e o Anveo EDI Connect 5.00 oferece uma nova lógica de personalização baseada em eventos. Recomendamos vivamente a mudança para os novos eventos de integração, se possível, para facilitar as actualizações para versões mais recentes.

A Codeunit ANVEDI Callback com o ID 5327310 é o ponto central se você quiser mudar o comportamento da Anveo EDI Connect. Nós mantemos a API deste Codeunit constante, para que você não tenha que sobrescrever este objeto quando atualizar nosso módulo. Há várias funções que podem ser modificadas por você e algumas funções de ajuda que não devem ser modificadas. Se você tiver atualizado o módulo e perder uma função de ajuda que pode ter sido adicionada em uma versão mais recente, há um segundo objeto chamado EDI Callback - Template com ID 5327313 onde você encontrará a nova funcionalidade.

OnFunction

O módulo permite definir a sua própria funcionalidade, que pode ser chamada a partir dos mapeamentos EDI. Você pode definir tantas funções quantas forem necessárias. Você deve usar a instrução de caso pré-definida e adicionar chamadas para as funções de incorporação FunctionName..FunctionName5.

Você não deve colocar nenhum código fora da estrutura do caso predefinida, pois esta função pode ser chamada com bastante frequência e qualquer código adicional pode ter impactos negativos na performance.

CASE TRUE OF
  // ... other functions

  FunctionName('EXAMPLE', 'HelloWorld'):
    BEGIN
      FunctionResult('Hello World!');
      EXIT;
    END;
END;
Exemplo: Função “Olá Mundo” no OnFunction

O número no final da função de ajuda local FunctionName define a contagem de parâmetros. Você pode definir funções com até cinco parâmetros. Você pode acessar o conteúdo dos parâmetros chamando as funções GetTextParameter(ParNumber) e as funções similares para outros tipos de dados. O número do parâmetro é contado de “1” a “5”.

Cada função tem que retornar um valor chamando a função local com o nome FunctionResult.

Deve-se chamar a função FunctionResult apenas uma vez. É uma boa prática adicionar uma declaração de SAÍDA diretamente após ela para evitar chamar a função várias vezes.

O usuário pode selecionar os nomes dos objetos e funções como desejar.

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

Aqui está uma lista completa das funções disponíveis para usar na declaração CASE. A partir de Anveo EDI Connect 4.00:

  • FunctionName(ObjectName: Text; FunctionName: Text)
  • FunctionName1(ObjectName: Text; FunctionName: Text; ParamName1: Text)
  • FunctionName2(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text)
  • FunctionName3(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text)
  • FunctionName4(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text; ParamName4: Text)
  • FunctionName5(ObjectName: Text; FunctionName: Text; ParamName1: Text; ParamName2: Text; ParamName3: Text; ParamName4: Text; ParamName5: Text)

Aqui uma lista da função que você pode usar para acessar os parâmetros:

  • GetTextParameter(ParNum : Integer) : Text
    • Obtém o parâmetro e tenta lançá-lo em texto de tipo de dado.
  • GetIntegerParameter(ParNum : Integer) : Integer
    • Obtém o parâmetro e tenta lançá-lo para o integer do tipo de dados.
  • GetBooleanParameter(ParNum : Integer) : Boolean
    • Obtém o parâmetro e tenta lançá-lo para o tipo de dados booleanos.
  • GetDecimalParameter(ParNum : Integer) : Decimal
    • Obtém o parâmetro e tenta lançá-lo para o tipo de dados decimal.
  • GetDateParameter(ParNum : Integer) : Date
    • Obtém o parâmetro e tenta lançá-lo para a data do tipo de dados.
  • GetTimeParameter(ParNum : Integer) : Time
    • Obtém o parâmetro e tenta lançá-lo ao tempo do tipo de dados.
  • GetDateTimeParameter(ParNum : Integer) : DateTime
    • Obtém o parâmetro e tenta lançá-lo para o tipo de dados data/hora.
  • GetParameter(ParNum : Integer;VAR EDIVariant : Codeunit
    • Obtém o parâmetro como uma instância da Codeunit ANVEDI Variant.

CallbackRegistration

Esta função é chamada sempre que algo acontece no módulo, ao qual você pode reagir. A função contém uma estrutura de casos, onde você pode verificar o parâmetro passado CallbackSupport o que aconteceu.

Você não deve colocar nenhum código fora da estrutura do caso predefinida, pois esta função pode ser chamada com bastante frequência e qualquer código adicional pode ter impactos negativos na performance.

Esta estrutura pode parecer incomum para os desenvolvedores C/AL, mas podemos desta forma adicionar funcionalidades, sem a necessidade de atualizar o ANVEDI Callback Codeunit.

Os eventos disponíveis são definidos pelo ANVEDI Callback Support Codeunit. Nas seções seguintes, discutiremos os eventos disponíveis.

OnJobCallback

Você pode usar a codeunit trabalho do módulo para definir trabalhos personalizados. O codeunit permite suportar o uso de múltiplos parâmetros. Você pode encontrar mais informações sobre a documentação do encarregado do trabalho.

OnAcceptTransmission

Esta função é chamada para determinar se um arquivo ou mensagem deve ser aceito ou ignorado pelo módulo. O módulo não armazena se uma transmissão foi ignorada e chamará esta função cada vez que vir uma transmissão. O arquivo ainda não foi lido, portanto você só pode decidir com base nos metadados disponíveis.

Parâmetros:

EDITransmission

Um registo da tabela EDI Transmission com os dados conhecidos até agora. O registo ainda não está escrito.

Se você reagir a esse evento, terá que chamar a seguinte função:

HandleAcceptTransmission(Result : Boolean;VAR EDITransmission : Record "ANVEDI Transmission")

Parâmetros:

Result

Quer receba ou não a transmissão. O valor True significa que você quer receber os dados, o valor False significa que você quer ignorar a transmissão.

EDITransmission

Você deve passar o registro da chamada da OnAcceptTransmission para este parâmetro.

CASE TRUE OF
  // ...
  CallbackSupport.OnAcceptTransmission(ANVEDITransmission):
    BEGIN
      // Ignore files with the name "FileList.txt"
      // Usually you also want to check the communication channel etc. to only run this for specific channels
      IF ANVEDITransmission."Tag 2" = 'FileList.txt' THEN BEGIN
        CallbackSupport.AcceptTransmission(FALSE. ANVEDITransmission);
      END ELSE BEGIN
        CallbackSupport.AcceptTransmission(TRUE. ANVEDITransmission);
      END;
    END;
  END;
END;
Exemplo: OnAcceptTransmission

OnBeforeList

Este código é chamado antes que o módulo procure por novos dados. Isto pode ser usado para emitir um comando ou script externo para receber os arquivos, antes do módulo procurar por novos dados.

Parâmetros:

EDICommunicationChannel

Especifica um registro de dados da tabela de EDI Communication Channel para os quais as novas mensagens devem ser pesquisadas.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnAfterList

Este código é chamado após o módulo ter procurado por novos dados.

Parâmetros:

EDICommunicationChannel

Especifica um registro de dados da tabela de EDI Communication Channel.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnBeforeReceive

Este evento é chamado antes de uma transmissão ser recuperada.

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnAfterReceive

Este evento é chamado depois que uma transmissão é recebida.

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnBeforeArchive

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

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnAfterArchive

Este evento é chamado após uma transmissão ter sido arquivada.

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnBeforeDelete

Este evento é chamado antes de uma transmissão ser apagada.

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnAfterDelete

Este evento é chamado após uma transmissão ser apagada.

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnBeforeSend

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

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Ao reagir a este evento, você tem que chamar a função:

HandleBeforeSendTransmission(Result, EDITransmission)
Result

Se enviar a transmissão. O valor True significa que a transmissão deve ser enviada.

EDITransmission

A transmissão que você recebeu com a chamada do evento.

OnComposeMessage

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

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Este evento não requer uma chamada para outra função, pois não suporta quaisquer valores de retorno.

OnAfterSend

Este evento é chamado depois que uma transmissão é enviada.

Parâmetros:

EDITransmission

Especifica um registro de dados da tabela de EDI Transmission.

Ao reagir a este evento, você tem que chamar a função:

HandleAfterSendTransmission(Result, EDITransmission)
Result

O resultado é actualmente ignorado.

EDITransmission

A transmissão que você recebeu com a chamada do evento.

OnReplacePlaceholder

Esta função é chamada quando se avalia uma string que pode conter variáveis definidas pelo usuário, tais como o nome de um arquivo.

Você pode encontrar um exemplo abaixo:

If Placeholder = 'MyNumber' THEN BEGIN
    IF EDILinkedDocument.FINDSET THEN REPEAT
      RecID := EDILinkedDocument."Record ID";
      IF (RecID.TABLENO = DATABASE::"EDI Document") THEN BEGIN
        RecRef.GET(EDILinkedDocument."Record ID");
        RecRef.SETTABLE(EDIDocument);
        CallbackSupport.HandleReplacePlaceholder(TRUE, EDIDocument."System Document No.");
        EXIT;
      END;
    UNTIL EDILinkedDocument.NEXT = 0;
  
    CallbackSupport.HandleReplacePlaceholder(FALSE, '');
  END ELSE BEGIN
    CallbackSupport.HandleReplacePlaceholder(FALSE, '');
  END;
Exemplo de código: OnReplacePlaceholder

Parâmetros:

Placeholder

O nome da variável entre parênteses rectos para a qual um valor é pesquisado.

Ao reagir a este evento, você deve chamar a função:

CallbackSupport.HandleReplacePlaceholder(Result,Value)

Parâmetros:

Result

Se você quer devolver um valor. Se você retornar True você deve especificar um valor para a variável. Você pode substituir as variáveis do sistema.

Value

O valor que deve ser usado.

OnError

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

Parâmetros:

EDIProcessingQueue

Uma instância da tabela EDI Processing Queue cujo processamento falhou.

AfterProcess

Este evento é chamado após o processamento de uma entrada na tabela EDI Processing Queue. O usuário deve verificar o status da entrada aprovada e reagir de acordo.

Parâmetros:

EDIProcessingQueue

Uma instância da tabela EDI Processing Queue que foi processada.

LookupLinkedDocument

Esta função é chamada a partir da lista de documentos ligada, se o usuário quiser abrir a página do cartão. Existem algumas páginas predefinidas no módulo e tentamos voltar à página de pesquisa padrão, no caso desta função retornar False.

LookupLinkedDocument(RecRef: RecordRef) : Boolean
RecRef

O registro para o qual o usuário deseja abrir a página.

Valor de retorno

Um valor booleano. Devolver o valor True, se a página foi aberta por esta função; Caso contrário, False.

     CASE RecRef.NUMBER OF
       DATABASE::"Sales Header":
          BEGIN
            RecRef.SETTABLE(SalesHeader);
            PAGE.RUN(PAGE::"Sales Order", SalesHeader);
            EXIT(TRUE);
          END;
      END;
Exemplo de código: Página de cartão aberto para ordem de venda

BeforeConvert

Esta função é chamada antes de se iniciar um mapping. A chamada está dentro da transação da base de dados do mapping. Você pode cancelar a execução do mapping, antes mesmo que o mapping tenha começado, retornando o valor True. Em geral, não recomendamos a utilização desta função. Se você quiser chamar código personalizado, por favor use o novo CallbackRegistration ou a funcionalidade OnFunction.

AfterConvert

Esta função é chamada depois de um mapping ter sido concluído com sucesso. A chamada está dentro da transação da base de dados do mapping. Em geral, não recomendamos a utilização desta função. Se você quiser chamar código personalizado, por favor use o novo CallbackRegistration ou a funcionalidade OnFunction.

No Anveo EDI Connect 4.00 adicionamos aos eventos a função CallbackRegistration chamada OnError e AfterProcess. Por favor, use a nova funcionalidade, se possível.

Referências cruzadas

Você pode definir sua própria lógica de referência cruzada. Esta funcionalidade é chamada, quando o tipo de referência cruzada é definido para callback. Muitas vezes recomendamos o uso de mapeamentos em vez de código de retorno de chamada personalizado para facilitar a leitura dos mapeamentos. O código de referência cruzada personalizado é, do nosso ponto de vista, mais difícil de manter.

ValidateCrossReferenceNumber

Verifique se um número de referência cruzada externo é válido.

esta função é depreciada e não deve ser utilizada.

GetInternalNo

Devolve um número interno de um número externo.

GetInternalNo(TableID: Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; VAR InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; ExternalNo: Text[64]; EDIProject: Code[20]) : Boolean

GetExternalNo

Devolve um número externo de um número interno.

GetExternalNo(TableID: Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; VAR ExternalNo: Text[64]; EDIProject: Code[20]) : Boolean

UpdateCrossReference

É chamado se o usuário tentar atualizar uma referência cruzada.

UpdateCrossReference(TableID : Integer; FieldNo: Integer; RelationTableID: Integer; RelationFieldNo: Integer; RelationTableView: Text[1024]; RelationTableViewPar1: Variant; InternalNo: Code[20]; EDICrossReferenceType: Record 5327361; CrossReference: Text[64]; EDIProject : Code[20])

Funções Depreciadas

A funcionalidade abaixo é apenas parcialmente implementada e, portanto, não é segura. Recomendamos a utilização dos filtros de segurança padrão do Microsoft Dynamics NAV 2009R2 RTC e deixar as duas funções vazias.

ApplyUserFilter

Permite filtrar os dados passados de forma que o usuário possa trocar o filtro posteriormente. O uso desta função não é mais recomendado. A função pode ser removida em versões mais recentes.

ApplySecurityFilter

Permite filtrar os dados de uma forma que o filtro não possa ser alterado pelo usuário. Esta função não é chamada em todas as instâncias. O uso desta função não é mais recomendado. A função pode ser removida em versões mais recentes.