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;
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:
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:
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.
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;
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:
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:
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:
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:
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:
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:
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:
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:
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:
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)
Se enviar a transmissão. O valor True significa que a transmissão deve ser enviada.
A transmissão que você recebeu com a chamada do evento.
OnComposeMessage
Este evento é chamado quando uma transmissão é composta.
Parâmetros:
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:
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)
O resultado é actualmente ignorado.
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;
Parâmetros:
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:
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.
O valor que deve ser usado.
OnError
Este evento é chamado quando ocorre um erro na fila de processamento.
Parâmetros:
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:
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
O registro para o qual o usuário deseja abrir a página.
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;
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 365 Business Central 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.