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, que pode querer chamar a partir do seu código personalizado. Todas as funções desta codeunit devem ser utilizadas quando se pretende iniciar diretamente uma ação EDI por código.

Conceitos gerais

Nesta secção, começaremos por discutir os conceitos fundamentais, que deve compreender para poder ler os exemplos de código.

Transacções de utilizadores

Anvaigo EDI Connect tem um conceito chamado “transacções do utilizador”, que pode abranger várias transacções da base de dados e recolher vários erros. A maior parte das acções no Anvaigo EDI Connect requerem uma transação de utilizador aberta para serem executadas. É possível iniciar uma transação de utilizador chamando:

// 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 utilizador

A chamada a END_USER_TRANSACTION permite-lhe mostrar os erros, interromper a transação atual da base de dados ou obter um valor de retorno, caso tenha havido um erro. Mais tarde, falaremos sobre isso em pormenor.

BEGIN_USER_TRANSACTION

Inicia uma nova transação de utilizador. É importante observar que só é possível integrar chamadas no módulo EDI nos pontos em que pode ocorrer um COMMIT. Em muitos casos, o módulo efectua todas as alterações na base de dados antes de executar a lógica EDI. Considere também a possibilidade de marcar apenas os dados e utilizar um trabalho em segundo plano para executar a lógica EDI.

O texto fornecido é mostrado ao utilizador, se for aberta uma caixa de diálogo em espera, porque o processo demora algum tempo.

BEGIN_USER_TRANSACTION(Text : Text[1024])

Deve-se sempre terminar uma chamada a BEGIN_USER_TRANSACTION com uma chamada a END_USER_TRANSACTION.

SHOWDIALOGS

Esta função pode ser utilizada para ocultar quaisquer diálogos EDI.

SHOWDIALOGS(ShowDialogs : Boolean)

O parâmetro especifica se as caixas de diálogo são mostradas ou não. Uma chamada a esta função tem de estar dentro de uma transação do utilizador. Normalmente, esta função é chamada diretamente após BEGIN_USER_TRANSACTION.

ISPROCESSING

Esta função devolve se o utilizador 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 usar esse valor para exibir diálogos de entrada apenas quando não estiver processando EDI.

END_USER_TRANSACTION

Esta função encerra uma transação do utilizador.

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

Se houver erros durante a transação, mostrá-los numa caixa de diálogo ao utilizador final. Este parâmetro não tem qualquer efeito se GUIALLOWED for False.

BreakOnError

Se o módulo deve lançar um erro, interrompendo o fluxo do processo atual. Todo o código após esta linha não é executado, se houver um erro durante a transação. Se este parâmetro for definido como True ), aparecerá uma mensagem de erro a indicar a ocorrência de um ou mais erros, caso existam. Neste caso, o utilizador não pode ver a lista completa de erros.

Success

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

O valor de retorno tinha um nome diferente nas versões anteriores do módulo, mas tinha a mesma função. O antigo nome do valor de retorno estava incorreto, a função devolvia sempre True em caso de sucesso.

Trabalhar com transacções comerciais

RUN_BUSINESSTRANSACTION_JOB

Executa o trabalho de recolha de dados de um tipo de transação comercial especificado. Tem de ser chamado a partir do interior de uma transação do utilizador.

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 recolha de dados de transacções comerciais

START_BT_WITH_REC

Inicia uma nova transação comercial para o código e o ID de registo indicados.

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

RUN_BT_BATCH_JOB

Executa a tarefa de recolha de lotes com o nome especificado. Tem de ser chamado a partir do interior de uma transação do utilizador.

RUN_BT_BATCH_JOB(BatchCode : Code[20])

Se pretender combiná-la com RUN_BUSINESSTRANSACTION_JOB, tem de encapsular ambas as funções em blocos separados BEGIN..END_USER_TRANSACTION e acrescentar o seguinte entre eles:

COMMIT;
SELECTLATESTVERSION();

Acções

Por vezes, pretende-se criar um botão numa página para iniciar um processo EDI, ou integrá-lo, por exemplo, no processo de lançamento. Nestes casos, é possível executar quase todas as acções do módulo a partir do código. Não se esqueça de que os processos EDI devem ser normalmente automatizados e executados em segundo plano. Por isso, antes de adicionar acções no código, considere a possibilidade de um trabalho em segundo plano como alternativa.

Executar um Mapping EDI

Para executar um EDI Mapping, é necessário iniciar uma transação do utilizador. Em seguida, podemos querer passar dados para o mapping. Podemos então executar o mapping e verificar o resultado quando terminarmos a transação do utilizador. A descrição pormenorizada dos comandos encontra-se após o exemplo de 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: Executar um mapping para exportar uma fatura

RESET_TABLEVIEWS

Repõe todas as vistas de tabela armazenadas existentes. Tem de ser chamado a partir do interior de uma transação do utilizador.

RESET_TABLEVIEWS()

SET_TABLEVIEW

Armazena uma vista de tabela com um nome especificado. Tem de ser chamado a partir do interior de uma transação do utilizador.

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

Um código que representa o nome do filtro. Terá de especificar exatamente o mesmo nome no EDI Mapping para obter o filtro.

FilterText

O texto do filtro tem a forma de uma vista de tabela Anvaigo EDI Connect. Deve utilizar a função integrada Microsoft Dynamics 365 Business Central GETVIEW, se possível, para obter a cadeia de caracteres corretamente formatada.

GET_TABLEVIEW

Recupera um filtro armazenado. Tem de ser chamado a partir do interior de uma transação do utilizador.

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

RUN

Executar um ou mais mapeamentos EDI. Tem de ser chamado a partir do interior de uma transação do utilizador.

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 cadeia de filtro que corresponda ao código do projeto.

FormatFilter

O código do formato mapping ou uma cadeia de filtro que corresponde ao código do formato.

CodeFilter

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

MultipleAllowed

Se devem ser executados vários mapeamentos no caso de ser especificado um filtro. Trata-se de uma função de segurança que impede a execução de mais do que um mapping.

ProcessFollowing

Se o pós-processamento deve ser executado. Normalmente, esta opção deve ser definida como True.

ProcessingQueueView

Um filtro para os pós-processamentos. Normalmente, pode querer passar uma string vazia.

Outras acções

RECEIVE_ALL

Função obsoleta. Deve-se 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 de ser chamada a partir do interior de uma transação do utilizador.

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

RECEIVE_FOLDER

Recebe os dados da pasta de transmissão especificada ou das pastas. Esta função tem de ser chamada a partir do interior de uma transação do utilizador.

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

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

ProcessFollowing

Se o pós-processamento deve ser executado. Normalmente, esta opção deve ser definida como True.

ProcessQueueView

Um filtro para os pós-processamentos. Normalmente, pode querer passar uma string vazia.

RECEIVE_COMMUNICATIONCHANNEL

Recebe dados do canal de comunicação especificado. Esta função tem de ser chamada a partir do interior de uma transação do utilizador.

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

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

ProcessFollowing

Se o pós-processamento deve ser executado. Normalmente, esta opção deve ser definida como True.

ProcessQueueView

Um filtro para os pós-processamentos. Normalmente, pode querer passar uma string vazia.

SEND_ALL

Função obsoleta. Deve-se 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 de ser chamada a partir do interior de uma transação do utilizador.

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

Se o pós-processamento deve ser executado. Normalmente, esta opção deve ser definida como True.

ProcessQueueView

Um filtro para os pós-processamentos. Normalmente, pode querer passar uma string vazia.

SEND_FOLDER

Envia transmissões abertas da pasta de transmissão especificada. Esta função tem de ser chamada a partir do interior de uma transação do utilizador.

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

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

ProcessFollowing

Se o pós-processamento deve ser executado. Normalmente, esta opção deve ser definida como True.

ProcessQueueView

Um filtro para os pós-processamentos. Normalmente, pode querer passar uma string vazia.

SEND_COMMUNICATIONCHANNEL

Envia transmissões abertas do canal de comunicação especificado. Esta função tem de ser chamada a partir do interior de uma transação do utilizador.

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

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

ProcessFollowing

Se o pós-processamento deve ser executado. Normalmente, esta opção deve ser definida como True.

ProcessQueueView

Um filtro para os pós-processamentos. Normalmente, pode querer passar uma string vazia.

PROCESS

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

Se o pós-processamento deve ser executado. Normalmente, esta opção deve ser definida como True.

ProcessQueueView

Um filtro para os pós-processamentos. Normalmente, pode querer passar uma string vazia.

UserTransactionFilter

Se apenas os pós-processamentos da transação do utilizador atual 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 utilizador.

SET_COMMUNICATION_CHANNEL(ChannelCode : Code[20])
ChannelCode

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

SET_RECEIVER_PARTNER

Define o parceiro recetor para a seguinte chamada mapping dentro da transação do utilizador.

SET_RECEIVER_PARTNER(ReceiverPartner : Code[20])
ReceiverPartner

O código do parceiro recetor.

SET_RECEIVER_IDENTIFICATION

Define a identificação do recetor para a seguinte chamada mapping dentro da transação do utilizador.

SET_RECEIVER_IDENTIFICATION(Identification : Text[64])
Identification

A identificação do recetor. Trata-se de um texto livre, que pode ter um significado especial em canais de comunicação específicos.

SET_SENDER_PARTNER

Define o parceiro emissor para a seguinte chamada mapping dentro da transação do utilizador.

SET_SENDER_PARTNER(PartnerCode : Code[20])
PartnerCode

O código do parceiro emissor.

SET_SENDER_IDENTIFICATION

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

SET_SENDER_IDENTIFICATION(Identification : Text[64])
Identification

A identificação do recetor. Trata-se de um texto livre, que pode ter um significado especial em canais de comunicação específicos.

Registo e tratamento de erros

As seguintes funções só podem ser chamadas enquanto um mapping estiver a ser executado. Estas funções destinam-se a ser utilizadas para 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 interromper o fluxo de controlo, utilize a função nativa ERROR.

LogWarning

Regista um aviso.

LogWarning(WarningMessage : Text[1024])
WarningMessage

O texto do aviso.

LogInformation

Informação de registos.

LogInformation(InformationMessage : Text[1024])
InformationMessage

As informações a registar.

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 documento EDI a que pertence o erro.

LogDocumentWarning

Regista 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 registar.

EDIDocument

O documento EDI a que pertence o erro.

LogDocumentInformation

Regista 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

A informação a registar.

EDIDocument

O documento EDI a que pertence o erro.

LogDocumentLineError

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

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

A mensagem de erro a registar.

EDIDocumentLine

A linha de documento EDI a que pertence o erro.

LogDocumentLineWarning

Regista um aviso pertencente a uma linha de documento EDI. Existe uma função mais geral denominada LogRecIDWarningWithCode.

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

O aviso que deve ser registado.

EDIDocumentLine

A linha de documento EDI a que pertence o erro.

LogDocumentLineInformation

Regista uma informação pertencente a uma linha de documento EDI. Existe uma função mais geral denominada LogRecIDInformationWithCode.

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

A informação a registar.

EDIDocumentLine

A linha de documento EDI a que pertence o erro.

LogErrorWithCode

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

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

Se deve interromper o fluxo de controlo ou continuar a execução

ErrorMessage

A mensagem de erro a registar.

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 registadas.

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

Se deve interromper o fluxo de controlo ou continuar a execução.

ErrorMessage

A mensagem de erro a registar.

RecID

A identificação do registo a que pertence o erro.

Code

Um código de erro para identificar o erro.

IsUserAcceptable

Se o erro pode ser aceite pelo utilizador final. Para tal, é necessário um código de erro não vazio.

LogRecIDWarningWithCode

Regista um aviso que deveria pertencer a um registo.

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

O aviso que deve ser registado.

RecID

A identificação do registo a que deve pertencer o aviso.

Code

Um código para identificar a entrada de 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 registadas.

RecID

A identificação do registo a que as informações devem pertencer.

Code

Um código para identificar a entrada de registo.