ANVEDI Job Handler
Microsoft Dynamics NAV 2013R2 tem um sistema de programação de tarefas que permite executar codeunits em determinados momentos. Anveo EDI Connect oferece uma codeunit específica que pode ser utilizada. A codeunit tem o ID 5327312 e chama-se ANVEDI Job Handler.

Esta codeunit oferece diferentes tarefas e pode ser controlada pela cadeia de parâmetros. Esta cadeia segue regras simples e vamos mostrar-lhe exemplos para cada uma das acções disponíveis. A sintaxe geral deste parâmetro é:
ACTION_NAME(Parameter1=Value1, Parameter2=Value2)
Existem dois parâmetros que estão disponíveis para a maioria das tarefas, exceto para as Transacções comerciais:
Controla se os pós-processamentos são executados automaticamente. A predefinição é False, se não for especificado.
O pós-processamento deve ser executado depois
A configuração predefinida determinará se os pós-processamentos serão executados.
Este parâmetro é facultativo. O valor predefinido é sem vista de tabela. Este parâmetro especifica uma visão na tabela para a EDI Processing Queue que é utilizada se ProcessFollowing=True. A cadeia tem de ser uma vista de tabela Microsoft Dynamics NAV 2013R2, como WHERE(Project Code=FILTER(A*)).
Acções frequentemente utilizadas
Na maior parte das vezes, será necessário utilizar uma das seguintes acções:
Manutenção
Anveo EDI Conect tem funcionalidade de repetição incorporada para problemas temporários, tais como um servidor inacessível. É possível definir o intervalo de repetição, etc. em mapeamentos e canais de comunicação, mas terá de criar uma tarefa para os tratar. Para configurar um trabalho deste tipo, selecionar a codeunit do nosso manipulador de trabalhos na fila de trabalhos (ANVEDI Job Handler, ID 5327312) e definir a cadeia de parâmetros para MAINTENANCE(). De momento, não existem opções de configuração.
Programar o trabalho para ser executado regularmente sem interferir com outros processos EDI. Dependendo da versão do Dynamics, é possível usar a categoria de fila jopb para executar apenas um job em uma categoria de cada vez. Se não houver nada a fazer, o trabalho termina quase imediatamente.
Receção de dados
Esta ação irá receber dados para um canal de comunicação ou pasta especificados.
RECEIVE(Channel=MY_COMM_CHANNEL, ProcessFollowing=True)
Terá de especificar um dos seguintes parâmetros:
Especifica uma cadeia de filtros para o código do canal de comunicação. Este pode ser o código completo ou uma cadeia de filtros.
Especifica uma cadeia de filtros para o código da pasta de transmissão. Este pode ser o código completo ou uma cadeia de filtros.
Executar um mapping
Muitas vezes, quando se pretende exportar dados, começa-se por uma tarefa de transação comercial ou por um NAV mapping. Mas o sistema de programação pode executar qualquer tipo de mapping.
RUN(ProjectFilter=TEST, FormatFilter=NAV, CodeFilter=EXPORT_JOB, ProcessFollowing=True)
RUN(ProjectFilter=TEST, FormatFilter=NAV, CodeFilter=*, MultipleAllowed=True, ProcessFollowing=True)
Os parâmetros permitidos são:
O código do projeto ou uma cadeia de filtro no código do projeto.
O código de formato ou uma cadeia de filtros sobre o código de formato.
O código mapping ou uma cadeia de filtros sobre o código mapping.
Elemento de segurança. Se devem ser executados vários mapeamentos. A predefinição é False.
Podem ser executados vários mapeamentos.
Não podem ser executados mapeamentos múltiplos.
Recolher dados de transacções comerciais
Se existir um tipo de transação comercial com recolha de dados, é possível utilizar a seguinte cadeia de parâmetros:
BT_COLLECT(Code=MY_BT_TYPE)
Existe apenas um parâmetro:
O código do tipo de transação comercial. Este parâmetro não permite filtros.
Manutenção
Se pretender utilizar a funcionalidade de repetição automática dos mapeamentos ou canais de comunicação, tem de configurar uma tarefa de manutenção simples. Este trabalho é muito rápido se não houver nada para fazer e pode ser executado com bastante frequência. Tenha em conta que a tarefa tem de ser executada pelo menos tantas vezes quantas as acções que pretende repetir.
MAINTENANCE()
A tarefa não tem parâmetros.
Acções avançadas
As acções seguintes são mais especializadas e não são utilizadas com tanta frequência.
Processamento em lote de dados de transacções comerciais
BT_BATCH(Batch=MY_BATCH_CODE)
O código do Batch. Este parâmetro não permite filtros.
Recolher e processar em lote dados de transacções comerciais
Trata-se de uma combinação de BT_COLLECT e BT_BATCH.
BT_COLLECT_BATCH(Code=MY_BT_TYPE, Batch=MY_BATCH_CODE)
O código do Batch. Este parâmetro não permite filtros.
O código do tipo de transação comercial. Este parâmetro não permite filtros.
Processar filas de processamento abertas
Se não executar o pós-processamento automaticamente, pode configurar tarefas para executar determinadas acções em aberto.
PROCESS(ProcessQueueView=WHERE(Project Code=FILTER(MY_PROJECT)))
É possível utilizar os parâmetros ProcessQueueView e ProcessFollowing.
Enviar transmissões abertas
Normalmente, o envio de dados é efectuado como uma etapa posterior à execução do mapping. Se, no entanto, quiser enviar ficheiros abertos numa determinada altura, pode utilizar uma tarefa.
SEND(Channel=MY_CHANNEL)
Especifica uma cadeia de filtros para o código do canal de comunicação. Este pode ser o código completo ou uma cadeia de filtros.
Especifica uma cadeia de filtros para o código da pasta de transmissão. Este pode ser o código completo ou uma cadeia de filtros.
Executar chamada de retorno de código personalizado
Pode utilizar a codeunit do manipulador de tarefas para executar o seu código personalizado.
Pode especificar tantos parâmetros quantos os necessários. Recomendamos a utilização de um parâmetro Name para especificar um identificador de retorno de chamada. É possível aceder aos parâmetros a partir da codeunit ANVEDI Callback. Na codeunit ANVEDI Callback, na função CallbackRegistration, é possível reagir ao evento OnJobCallback implementando o seguinte bloco CASE:
CallbackSupport.OnJobCallback(ParameterDictionary):
BEGIN
IF NOT ParameterDictionary.GETBYKEY('NAME', Tmp) THEN
ERROR(Text001);
Name := Tmp;
CASE UPPERCASE(Name) OF
'Example':
BEGIN
IF NOT ParameterDictionary.GETBYKEY('MYPARAM1', Tmp) THEN
ERROR(Text001);
MyParam1 := tmp;
IF NOT ParameterDictionary.GETBYKEY('MYPARAM2', Tmp) THEN
ERROR(Text001);
MyParam2 := tmp;
// Do something with the parameters MyParam1 and MyParam2
END;
ELSE
ERROR(Text002, Name);
END;
END;
Tenha em atenção que os nomes dos parâmetros são convertidos para maiúsculas na variável ParameterDictionary. Pode utilizar a seguinte cadeia de parâmetros na fila de tarefas para chamar a chamada de retorno:
CALLBACK(Name=Example, MyParam1=Hello, MyParam2=World)