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);
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
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.
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.
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])
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);
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);
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])
Um código que representa o nome do filtro. Você terá que especificar exatamente o mesmo nome no EDI Mapping para recuperar o filtro.
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])
O código do projeto ou uma string de filtro correspondente ao código do projeto.
O código do formato mapping ou uma string de filtro correspondente ao código de formato.
O código do mapping ou um filtro que corresponda aos códigos mapping desejados.
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.
Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.
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])
O código do filtro de transmissão ou uma string de filtro no campo de código.
Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.
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])
O código do canal de comunicação ou uma cadeia de filtro no campo de código.
Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.
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])
Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.
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])
O código da pasta de transmissão ou uma string de filtro no campo de código.
Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.
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])
O código do canal de comunicação ou uma cadeia de filtro no campo de código.
Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.
Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.
PROCESS
PROCESS(ProcessFollowing : Boolean;ProcessingQueueView : Text[250];UserTransactionFilter : Boolean)
Se o pós-processamento deve ser executado. Você normalmente quer definir isto como True.
Um filtro nos pós-processamentos. Normalmente você pode querer passar em um fio vazio.
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])
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])
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])
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])
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])
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])
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])
O texto do aviso.
LogInformation
Informação dos registos.
LogInformation(InformationMessage : Text[1024])
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")
A mensagem de erro.
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")
O aviso a ser registado.
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")
As informações a serem registradas.
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")
A mensagem de erro a ser registada.
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")
O aviso que deve ser registado.
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")
As informações a serem registradas.
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])
Seja para quebrar o fluxo de controle ou para continuar com a execução
A mensagem de erro a ser registada.
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])
O aviso que deve ser registado.
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])
As informações que devem ser registradas.
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)
Seja para quebrar o fluxo de controle ou para continuar a execução.
A mensagem de erro a ser registada.
A identificação do registro ao qual o erro pertence.
Um código de erro para identificar o erro.
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])
O aviso que deve ser registado.
O registo identifica o aviso deve pertencer a.
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])
As informações que devem ser registradas.
A informação deve pertencer ao registo.
Um código para identificar a entrada do registo.