Árvore de páginas

Como configurar o MILE para importação de Contatos (TMKA070), incluindo os dados de endereço e telefone

Produto:

Microsiga Protheus®

Versões:

Superiores a 12.1.23

Ocorrência:

Como configurar o layout do MILE para importar os dados dos Contatos (SU5), incluindo também o Endereço (AGA) e Telefone (AGB)? 

Ambiente:

Padrão

Passo a passo:

Para realizar a importação dos dados na rotina de Contatos (TMKA070) incluindo o endereço e telefone utilizando o MILE, será necessário algumas configurações adicionais, pois atualmente a estrutura do MILE não permite realizar a importação utilizando simplesmente a configuração de canais.

Basicamente o MILE funciona da seguinte forma: para cada canal criado, será enviado sequencialmente para a rotina em questão um array como um parâmetro.

Então se temos 2 canais (1 Master e 1 Detail), ao realizar a chamada da MsExecAuto da rotina, será enviado da seguinte forma:

FuncaoXXX(vetor[1], vetor[2], 3)

Se tivermos 3 canais , será desta forma:

FuncaoXXX(vetor[1], vetor[2],vetor[3], 3)

E assim por diante.

Visto isso, temos uma incompatibilidade de uso para a inclusão dos dados de Endereço (AGA) e de Telefone (AGB), pois na rotina TMKA070 os parâmetros que recebem estes dados estão na terceira e quarta posição.

Veja os parâmetros recebidos pela rotina TMKA070 via rotina automática:

TMKA070( aRotAuto, nOpc, xAutoAGA, xAutoAGB, xPrefSU5 )

onde:

aRotAuto - Array - Dados do cabeçalho do contato (SU5)

nOpc - Numérico - Opção da rotina a ser executada

xAutoAGA - Array - Informações de endereço do contato (AGA)

xAutoAGB - Array - Informações de telefone do contato (AGB)

xPrefSU5 - Lógico - Modo de compatibilidade


Neste caso, precisamos enviar o vetor do canal Master (SU5) como primeiro parâmetro (aRotAuto) e os vetores dos canais Detail (AGA e AGB) como terceiro e quarto parâmetro (xAutoAGA e xAutoAGB).

Vamos precisar manipular o array de canais criado peloMILEatravés de uma UserFunction.

Exemplo da função de Pré Execução

Neste exemplo o tratamento foi feito para importar um endereço e um telefone para cada contato.

O MILE pode ser adaptado e customizado conforme as necessidades dos clientes. Para maiores detalhes, veja a documentação: MILE - Model Integrator Layout Engine

User Function TK070TST(Interface, aInfos, aLayOut, aSaidas)
/*
Interface - Lógico - .T. se está sendo executado com interface / .F. se está sendo executado sem interface
aInfos    - Array - Vetor com informações adicionais como linha inicial e final lida, nome do arquivo etc.
aLayOut   - Array - Informações das definições do layout.
aSaidas   - Array - Estrutura do vetor sobre dados de saída
*/
Local aNewVet := Array(5)   //Cria um array com a quantidade de parâmetros utilizadas na execauto
Local nOpcx   := 3
Local nX      := 0
Local aAGA    := {}
Local aAGB    := {}
Local aTel    := {}
Local aEnd    := {}

//Separa os dados dos canais para serem enviados para a execauto
For nX := 1 To Len(aSaidas[2][4][1])
    If "AGA_" $ aSaidas[2][4][1][nX][1]
        aAdd(aAGA,{ aSaidas[2][4][1][nX][1], aSaidas[2][4][1][nX][2], aSaidas[2][4][1][nX][3] })
    ElseIf "AGB_" $ aSaidas[2][4][1][nX][1]
        aAdd(aAGB,{ aSaidas[2][4][1][nX][1], aSaidas[2][4][1][nX][2], aSaidas[2][4][1][nX][3] })
    EndIf
Next nX

aAdd(aEnd, aAGA)
aAdd(aTel, aAGB)

//Carregamos os dados nas posições corretas da execauto
aNewVet[1] := aClone(aSaidas[1][4][1])  //aRotAuto
aNewVet[2] := {nOpcx}                   //nOpc
aNewVet[3] := aClone(aEnd)              //xAutoAGA
aNewVet[4] := aClone(aTel)              //xAutoAGB
aNewVet[5] := {}                        //xPrefSU5

Return aClone(aNewVet)

A função acima deverá ser compilada no repositório antes da configuração do layout.


Configuração do Layout

1) Informações gerais.

2) Formatação do arquivo.

3) Tratamentos e Validações. 
Atente-se para o campo Pré Execução, onde deverá ser informado o nome da função U_TK070TST que irá mudar a posição dos parâmetros, antes da chamada da Rotina Automática do TMKA070.

4) Adapters de Rotina Automática.
Neste caso iremos utilizar o Modelo 2. Como a rotina não está em MVC, não será necessário a configuração dos Adapters em MVC.

5) Definição dos Canais.
Criar um canal A (MASTER) para receber os dados principais do contato (CANAL SU5).

Criar um canal B (DETAIL) para receber os dados de endereço (CANAL AGA).

Criar um canal C (DETAIL) para receber os dados de telefone (CANAL AGB).


Exemplo do Arquivo de Importação

Neste exemplo iremos importar dois Contatos com um endereço e um telefone, conforme a customização do rdmake de exemplo.
Lembrando que, conforme a configuração do layout, a primeira posição de cada registro se refere ao canal.

|A|CONT01|CONTATO1|
|B|1|1|RUA TESTE 1|SAO PAULO|
|C|1|1|11|123456|
|A|CONT02|CONTATO2|
|B|1|1|RUA TESTE 2|SAO PAULO|
|C|1|1|11|654321|


Download do exemplo do layout (XML) e do arquivo de importação

 Layout_MILE_TMKA070.zip


Para efetuar a importação de Contatos através do MILE, a rotina de Cadastro de Contatos - TMKA070 deverá estar com a data igual ou superior à 19/11/2020.

Observações: