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

ANVEDI Integration

A codeunit ANVEDI Integration contém todas as chamadas API públicas para o módulo EDI, você pode querer ligar a partir do seu código personalizado. Todas as funções desta codeunit devem ser usadas, se você quiser iniciar diretamente uma ação EDI por código.

Conceitos Gerais

Nesta seção vamos discutir primeiro os conceitos centrais, que você deve entender para poder ler os exemplos do código.

Transacções do utilizador

Anveo EDI Connect tem um conceito chamado “transações de usuário”, que pode abranger várias transações de banco de dados e coletar vários erros. A maioria das ações no Anveo EDI Connect exigirá uma transação aberta do usuário para executá-las. Você pode iniciar uma transação de usuário ligando:

// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);

// Your EDI code

// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
Exemplo: Iniciar uma transação de usuário

A chamada para END_USER_TRANSACTION permite ou mostrar erros, quebrar a transação atual do banco de dados ou obter um valor de retorno, quer tenha havido um erro. Discutiremos isso em pormenor mais tarde.

BEGIN_USER_TRANSACTION

Inicia uma nova transação de usuário. Por favor, note que você só integra chamadas no módulo EDI em pontos onde um COMMIT pode ocorrer. Em muitos casos, o módulo submeterá todas as alterações da base de dados antes de executar a lógica EDI. Considere também apenas marcar os dados e usar um trabalho de fundo para executar a lógica EDI.

O texto dado é mostrado ao usuário, se um diálogo de espera for aberto, porque o processo leva tempo.

BEGIN_USER_TRANSACTION(Text : Text[1024])

Você deve sempre encerrar uma chamada para BEGIN_USER_TRANSACTION com uma chamada para END_USER_TRANSACTION.

SHOWDIALOGS

Esta função pode ser usada para ocultar qualquer diálogo EDI.

SHOWDIALOGS(ShowDialogs : Boolean)

O parâmetro especifica se os diálogos são mostrados ou não. Uma chamada para esta função tem que estar dentro de uma transação do usuário. Normalmente esta função é chamada diretamente após BEGIN_USER_TRANSACTION.

ISPROCESSING

Esta função retorna se você está dentro de uma execução mapping. É possível verificar esse valor ao validar acionadores, por exemplo, para obter um comportamento diferente ao processar processos EDI. Também é possível utilizar esse valor para exibir diálogos de entrada somente quando o usuário não estiver processando EDI.

END_USER_TRANSACTION

Esta função encerrará uma transação de usuário.

END_USER_TRANSACTION(ShowErrorList : Boolean; BreakOnError : Boolean) Success : Boolean
ShowErrorList

Se houver erros durante a transação, mostrar em seguida em um diálogo para o usuário final. Este parâmetro não tem qualquer efeito, se GUIALLOWED for False.

BreakOnError

Se o módulo deve lançar um erro, quebrando o fluxo do processo atual. Todo o código após esta linha não é executado, se houver um erro durante a transação. Definindo este parâmetro como True mostrará uma mensagem de erro que ocorreu um ou mais erros, se é que houve algum. Neste caso, o usuário não pode ver a lista completa de erros.

Success

Um valor de retorno, quer tenha havido um erro ou não. Retorna True sobre o sucesso, ou seja não houve erros; caso contrário, False.

O valor de retorno foi nomeado de forma diferente nas versões mais antigas do módulo, mas tinha a mesma função. O antigo nome do valor de retorno estava incorreto, a função sempre retornou True no sucesso.

Trabalhar com Transacções Comerciais

RUN_BUSINESSTRANSACTION_JOB

Executa o trabalho de coleta de dados de um tipo específico de transação comercial. Isto tem que ser chamado de dentro de uma transação do usuário.

RUN_BUSINESSTRANSACTION_JOB(BusinessTransactionTypeCode : Code[20])
BusinessTransactionTypeCode

Código do Tipo de Transação Comercial.

// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);

// Collects the data of the Business Transaction Type "INVOICE_OUT" and processes the mappings
ANVEDIIntegration.RUN_BUSINESSTRANSACTION_JOB('INVOICE_OUT');

// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
Exemplo: Executar trabalho de coleta de dados de transações comerciais

START_BT_WITH_REC

Inicia uma nova transação comercial para o código dado e registra a identificação.

START_BT_WITH_REC(BusinessTransactionTypeCode : Code[20];RecID : RecordID)

RUN_BT_BATCH_JOB

Executa o trabalho de recolha de lotes com o nome especificado. Isto tem que ser chamado de dentro de uma transação do usuário.

RUN_BT_BATCH_JOB(BatchCode : Code[20])

Ações

Às vezes você quer criar um botão em uma página para iniciar um processo EDI, ou você quer integrá-lo, por exemplo, no processo de liberação. Para estes casos, você pode executar quase todas as ações do módulo a partir do código. Por favor, tenha em mente que os processos de EDI devem normalmente ser automatizados e executados em segundo plano. Portanto, antes de adicionar ações em código, considere a possibilidade de um trabalho de fundo como uma alternativa.

Execute um EDI Mapping

Para executar um Mapping EDI, teremos de iniciar uma transacção do utilizador. Depois, podemos querer passar os dados para o mapping. Podemos então executar o mapping e verificar o resultado quando terminarmos a transação do usuário. Você encontrará a descrição detalhada dos comandos após o exemplo do código.

// Start a new user transaction with the description given by TextDescription
ANVEDIIntegration.BEGIN_USER_TRANSACTION(TextDescription);

// Reset any existing table views
ANVEDIIntegration.RESET_TABLEVIEWS();

// Copy sales invoice header from Rec to a local variable
SalesInvoiceHeader := Rec;
// Filter the local variable to the current record
SalesInvoiceHeader.SETRECFILTER;
// Store the filter to the record under the name INVOICE
ANVEDIIntegration.SET_TABLEVIEW('INVOICE', SalesInvoiceHeader.GETVIEW(FALSE));

// Run the mapping EXAMPLE, NAV, INVOICE. You can access the invoice header, by adding the table and setting the filter to a named table view and enter INVOICE as the name. In general, you can pass as many filters as you need to the mapping.
ANVEDIIntegration.RUN('EXAMPLE', 'NAV', 'INVOICE', FALSE, TRUE, '');

// End the user transaction and show an error list, if there were any
ANVEDIIntegration.END_USER_TRANSACTION(TRUE, FALSE);
Exemplo de código: Execute um mapping para exportar uma fatura

RESET_TABLEVIEWS

Reinicializa todas as visualizações de tabelas armazenadas existentes. Tem que ser chamado de dentro de uma transação do usuário.

RESET_TABLEVIEWS()

SET_TABLEVIEW

Armazena uma vista de tabela sob um nome especificado. Tem que ser chamado de dentro de uma transação do usuário.

SET_TABLEVIEW(FilterName : Code[30];FilterText : Text[1024])
FilterName

Um código que representa o nome do filtro. Você terá que especificar exatamente o mesmo nome no EDI Mapping para recuperar o filtro.

FilterText

O texto do filtro na forma de uma vista de tabela Anveo EDI Connect. Você deve usar a função GETVIEW, se possível, para obter a string formatada corretamenteMicrosoft Dynamics 365 Business Central

GET_TABLEVIEW

Recupera um filtro armazenado. Tem que ser chamado de dentro de uma transação do usuário.

GET_TABLEVIEW(FilterName : Code[30]) : Text[1024]

RUN

Execute um ou mais mapeamentos de EDI. Tem que ser chamado de dentro de uma transação do usuário.

RUN(ProjectFilter : Text[250];FormatFilter : Text[250];CodeFilter : Text[250];MultipleAllowed : Boolean;ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
ProjectFilter

O código do projeto ou uma string de filtro correspondente ao código do projeto.

FormatFilter

O código do formato mapping ou uma string de filtro correspondente ao código de formato.

CodeFilter

O código do mapping ou um filtro que corresponda aos códigos mapping desejados.

MultipleAllowed

Se vários mapeamentos devem ser executados no caso de ser especificado um filtro. Este é um recurso de segurança, impedindo que você execute mais de um mapping.

ProcessFollowing

Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.

ProcessingQueueView

Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.

Outras ações

RECEIVE_ALL

Função depreciada. Você deve evitar chamar a função geral e chamar uma das funções mais específicas abaixo.

Recebe todos os canais de comunicação. Esta função tem que ser chamada de dentro de uma transação do usuário.

RECEIVE_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])

RECEIVE_FOLDER

Recebe os dados a partir da pasta de transmissão especificada ou das pastas. Esta função tem que ser chamada de dentro de uma transação do usuário.

RECEIVE_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
TransmissionFolderCodeFilter

O código do filtro de transmissão ou uma string de filtro no campo de código.

ProcessFollowing

Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.

ProcessQueueView

Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.

RECEIVE_COMMUNICATIONCHANNEL

Recebe dados do canal de comunicação especificado. Esta função tem que ser chamada de dentro de uma transação do usuário.

RECEIVE_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
CommunicationChannelCodeFilter

O código do canal de comunicação ou uma cadeia de filtro no campo de código.

ProcessFollowing

Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.

ProcessQueueView

Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.

SEND_ALL

Função depreciada. Você deve evitar chamar a função geral e chamar uma das funções mais específicas abaixo.

Envia todos os canais de comunicação. Esta função tem que ser chamada de dentro de uma transação do usuário.

SEND_ALL(ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
ProcessFollowing

Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.

ProcessQueueView

Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.

SEND_FOLDER

Envia transmissões abertas da pasta de transmissão especificada. Esta função tem que ser chamada de dentro de uma transação do usuário.

SEND_FOLDER(TransmissionFolderCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
TransmissionFolderCodeFilter

O código da pasta de transmissão ou uma string de filtro no campo de código.

ProcessFollowing

Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.

ProcessQueueView

Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.

SEND_COMMUNICATIONCHANNEL

Envia transmissões abertas do canal de comunicação especificado. Esta função tem que ser chamada de dentro de uma transação do usuário.

SEND_COMMUNICATIONCHANNEL(CommunicationChannelCodeFilter : Text[250];ProcessFollowing : Boolean;ProcessingQueueView : Text[250])
CommunicationChannelCodeFilter

O código do canal de comunicação ou uma cadeia de filtro no campo de código.

ProcessFollowing

Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.

ProcessQueueView

Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.

PROCESS

PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
ProcessFollowing

Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.

ProcessQueueView

Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.

UserTransactionFilter

Se apenas os pós-processamentos da transação atual do usuário devem ser processados.

Definir o Destinatário / Remetente

SET_COMMUNICATION_CHANNEL

Define o canal de comunicação para a seguinte chamada mapping dentro da transação do usuário.

SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
ChannelCode

O código do canal de comunicação.

SET_RECEIVER_PARTNER

Define o parceiro receptor para a seguinte chamada mapping dentro da transação do usuário.

SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
ReceiverPartner

O código do parceiro receptor.

SET_RECEIVER_IDENTIFICATION

Define a identificação do receptor para a seguinte chamada mapping dentro da transação do usuário.

SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
Identification

A identificação do receptor. Este é um texto livre, que pode ter um significado especial em canais de comunicação específicos.

SET_SENDER_PARTNER

Define o parceiro remetente para a seguinte chamada mapping dentro da transação do usuário.

SET_SENDER_PARTNER(PartnerCode : Code[20])
PartnerCode

O código do parceiro remetente.

SET_SENDER_IDENTIFICATION

Define a identificação do remetente para a seguinte chamada mapping dentro da transação do usuário.

SET_SENDER_IDENTIFICATION(Identification : Text[64])
Identification

A identificação do receptor. Este é um texto livre, que pode ter um significado especial em canais de comunicação específicos.

Logging e Tratamento de Erros

As seguintes funções só podem ser chamadas enquanto um mapping estiver em execução. Estas funções destinam-se a ser utilizadas por manipuladores de erros personalizados a partir do código.

LogError

Regista uma mensagem de erro.

LogError(ErrorMessage : Text[1024])
ErrorMessage

A mensagem de erro. A execução continuará após esta chamada. Para quebrar o fluxo de controle, use a função ERROR nativo.

LogWarning

Regista um aviso.

LogWarning(WarningMessage : Text[1024])
WarningMessage

O texto do aviso.

LogInformation

Informação dos registos.

LogInformation(InformationMessage : Text[1024])
InformationMessage

As informações a serem registradas.

LogDocumentError

Regista um erro pertencente a um documento EDI. Existe uma função mais universal chamada LogRecIDErrorWithCode.

LogDocumentError(ErrorMessage : Text[1024];EDIDocument : Record "EDI Document")
ErrorMessage

A mensagem de erro.

EDIDocument

O EDI documenta a que o erro pertence.

LogDocumentWarning

Registra um aviso pertencente a um documento EDI. Existe uma função mais universal chamada LogRecIDWarningWithCode.

LogDocumentWarning(WarningMessage : Text[1024];EDIDocument : Record "EDI Document")
WarningMessage

O aviso a ser registado.

EDIDocument

O EDI documenta a que o erro pertence.

LogDocumentInformation

Registra uma informação pertencente a um documento EDI. Existe uma função mais universal chamada LogRecIDInformationWithCode.

LogDocumentInformation(InformationMessage : Text[1024];EDIDocument : Record "EDI Document")
InformationMessage

As informações a serem registradas.

EDIDocument

O EDI documenta a que o erro pertence.

LogDocumentLineError

Regista um erro pertencente a uma linha de documentos EDI. Existe uma função mais geral chamada LogRecIDErrorWithCode.

LogDocumentLineError(ErrorMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
ErrorMessage

A mensagem de erro a ser registada.

EDIDocumentLine

A linha de documentos EDI à qual o erro pertence.

LogDocumentLineWarning

Registra um aviso pertencente a uma linha de documentos EDI. Existe uma função mais geral chamada LogRecIDWarningWithCode.

LogDocumentLineWarning(WarningMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
WarningMessage

O aviso que deve ser registado.

EDIDocumentLine

A linha de documentos EDI à qual o erro pertence.

LogDocumentLineInformation

Registra uma informação pertencente a uma linha de documentos EDI. Existe uma função mais geral chamada LogRecIDInformationWithCode.

LogDocumentLineInformation(InformationMessage : Text[1024];EDIDocumentLine : Record "EDI Document Line")
InformationMessage

As informações a serem registradas.

EDIDocumentLine

A linha de documentos EDI à qual o erro pertence.

LogErrorWithCode

Regista um erro com um código de erro adicional.

LogErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];Code : Code[20])
ContinueExecution

Seja para quebrar o fluxo de controle ou para continuar com a execução

ErrorMessage

A mensagem de erro a ser registada.

Code

Um código para identificar o erro.

LogWarningWithCode

Regista um aviso com um código de erro adicional.

LogWarningWithCode(WarningMessage : Text[1024];Code : Code[20])
WarningMessage

O aviso que deve ser registado.

Code

Um código para identificar o erro.

LogInformationWithCode

Regista uma informação com um código de erro adicional.

LogInformationWithCode(InformationMessage : Text[1024];Code : Code[20])
InformationMessage

As informações que devem ser registradas.

Code

Um código para identificar o erro.

LogRecIDErrorWithCode

Regista uma mensagem de erro que deve pertencer a um registo específico.

LogRecIDErrorWithCode(ContinueExecution : Boolean;ErrorMessage : Text[1024];RecID : RecordID;Code : Code[20];IsUserAcceptable : Boolean)
ContinueExecution

Seja para quebrar o fluxo de controle ou para continuar a execução.

ErrorMessage

A mensagem de erro a ser registada.

RecID

A identificação do registro ao qual o erro pertence.

Code

Um código de erro para identificar o erro.

IsUserAcceptable

Se o erro pode ser aceite pelo utilizador final. Isto exigirá um código de erro não vazio.

LogRecIDWarningWithCode

Regista um aviso que deve pertencer a um registo.

LogRecIDWarningWithCode(WarningMessage : Text[1024];RecID : RecordID;Code : Code[20])
WarningMessage

O aviso que deve ser registado.

RecID

O registo identifica o aviso deve pertencer a.

Code

Um código para identificar a entrada do registo.

LogRecIDInformationWithCode

Regista uma informação que deve pertencer a um registo.

LogRecIDInformationWithCode(InformationMessage : Text[1024];RecID : RecordID;Code : Code[20])
InformationMessage

As informações que devem ser registradas.

RecID

A informação deve pertencer ao registo.

Code

Um código para identificar a entrada do registo.