Para realizar a importação de Regras de Negócio utilizando o MILE, será necessário algumas configurações adicionais, pois a estrutura do MILE não permite realizar a importação utilizando simplesmente a configuração de canais. A rotina de Regras de Negócio (FATA100) recebe os seguintes parâmetros via rotina automática:
FATA100( uAutoCab, uItensACT, uItensACX, uItensACN, nOpcAuto ) Onde:
uAutoCab - Array - Dados do cabeçalho da Regra de Negócio (ACS) uItensACT - Array - Dados dos itens da Negociação (ACT) uItensACX - Array - Dados dos itens da Comercialização (ACX) uItensACN - Array - Dados dos itens de Descontos (ACN) nOpcAuto - Numérico - Opção da rotina a ser executada Neste caso, precisamos criar os canais MASTER (ACS) e os DETAIL (o DETAIL com os campos de forma ordenada das tabelas ACT, ACX e ACN ) para para podermos enviá-los para a rotina automática do FATA100.
No importador MILE quando utilizamos o tipo de adapter "1- MSExecAuto", ele envia os dados para a rotina automática da seguinte maneira: FUNCAOXXX( uAutoCab, uAutoItens, nOpcAuto ) Para que o layout criado funcione corretamente na rotina automática do FATA100, precisaremos manipular o array dos canais através de uma UserFunction que deverá ser informada no campo Pré Execução do layout.
O MILE pode ser adaptado e customizado conforme as necessidades dos clientes. Para maiores detalhes, veja a documentação: MILE - Model Integrator Layout Engine
Exemplo da função de Pré Execução: Bloco de código |
---|
language | js |
---|
linenumbers | true |
---|
| #INCLUDE "PROTHEUS.CH"
User Function FT100TST(lInterface,aInfos,aLayOut,aSaidas)
/*
lInterface - 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(4) //Cria um array para separar os dados dos canais.
Local nX := 0
Local nY := 0
Local aACT := {}
Local aACX := {}
Local aACN := {}
//Separa os dados dos canais (DETAIL) para serem enviados para a execauto do FATA100
For nX := 1 To Len(aSaidas[2][4])
For nY := 1 to len(aSaidas[2][4][1nX])
If "ACT_" $ aSaidas[2][4][nX][nY][1]
If "_ITEM" $ aSaidas[2][4][nX][nY][1]
aAdd(aACTAadd(aACT,{})
EndIf
Aadd(aACT[Len(aACT)],{ Alltrim(aSaidas[2][4][1nX][nXnY][1]), aSaidas[2][4][1nX][nXnY][2], aSaidas[2][4][1nX][nXnY][3] })
ElseIf "ACX_" $ aSaidas[2][4][nX][nY][1]
If "_ITEM" $ aSaidas[2][4][nX][nY][1]
Aadd(aACX,{})
EndIf
aAdd Aadd(aACX[Len(aACX)],{ Alltrim(aSaidas[2][4][1nX][nXnY][1]), aSaidas[2][4][1nX][nXnY][2], aSaidas[2][4][1nX][nXnY][3] })
ElseIf "ACN_" $ aSaidas[2][4][nX][nY][1]
If "_ITEM" $ aSaidas[2][4][nX][nY][1]
Aadd(aACN,{})
EndIf
aAddAadd(aACN[Len(aACN)],{ Alltrim(aSaidas[2][4][1nX][nXnY][1]), aSaidas[2][4][1nX][nXnY][2], aSaidas[2][4][1nX][nXnY][3] })
EndIf
Next nY
Next nX
//Carregamos os arrays dos dados nas posições corretas da execauto
aNewVet[1] := aSaidas[1][4][1] //uAutoCab (MASTER)
aNewVet[2] := {aACT} //uItensACT
aNewVet[3] := {aACX} //uItensACX
aNewVet[4] := {aACN} //uItensACN
//O parâmetro nOpcAuto será enviado de forma automática pelo importador MILE
Return 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; ![](/download/attachments/789976984/image2023-9-14_16-0-36.png?version=1&modificationDate=1694718036577&api=v2)
2) Formatação do arquivo; ![](/download/attachments/789976984/image2023-9-14_16-2-32.png?version=1&modificationDate=1694718152647&api=v2)
3) Tratamentos e Validações; Atente-se para o campo Pré Execução, onde deverá ser informado o nome da função U_FT100TST que irá mudar a posição dos parâmetros, antes da chamada da rotina automática do FATA100. ![](/download/attachments/789976984/image2023-9-14_16-3-59.png?version=1&modificationDate=1694718239763&api=v2)
4) Adapters de Rotina Automática; Neste caso iremos utilizar o Modelo 3. Como a rotina não está em MVC, não será necessário a configuração dos Adapters em MVC. ![](/download/attachments/789976984/image2023-9-14_16-7-24.png?version=1&modificationDate=1694718444637&api=v2)
5) Definição dos Canais; Criar o canal A (MASTER) para receber os dados principais da Regra de Negócio (ACS). ![](/download/attachments/789976984/image2023-9-14_16-14-48.png?version=1&modificationDate=1694718888757&api=v2)
Criar o canal B (DETAIL) para receber os itens da Negociação (ACT). Image Removed
Criar o canal C (DETAIL) para receber os itens , da Comercialização (ACX) . Image Removed
Criar o canal D (DETAIL) para receber os e dos itens de Descontos (ACN). Image Added
Image Added
Image Added
Image Added Image Removed
Exemplo do Arquivo de Importação: Neste exemplo iremos importar uma Regra de Negociação, 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|TST MILE IMPORT| |B|001|013| |B|002|014| |B|||001|FAT000000000000000000000000187| |B|||002|FAT000000000000000000000000188| |C|01| |D|01|B|||||001|FAT000000000000000000000000187|5| |B|||||002|FAT000000000000000000000000188|5| Download do exemplo do layout (XML) e do arquivo de importação: View file |
---|
name | LayoutFATA100_Mile_FATA100.zip |
---|
height | 150 |
---|
|
|