Abaixo as principais funções do EAI Protheus

Classe FWEAI

         A classe FWEAI é a classe responsável por criar os objetos principais do EAI Protheus. Para verificar o funcionamento desta classe, acesse a sua documentação no TDN clicando aqui.

Static Function IntegDef

Veja a definição da IntegDef aqui.

FWIntegDef


Função de geração de mensagem Única de forma manual, acionando a IntegDef do programa indicado.
FWIntegDef( cSourceCode, cTypeMessage, cType, cXml, cFunName, lOnlyReturn, cVersion )
Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cSourceCode
Caracter
Nome do fonte onde se encontra a rotina static IntegDef
GetRotInteg()


cTypeMessage
Caracter
Tipo da Mensagem (BusinessMessage, BusinessMessage, Etc. )
'20'(EAI_MESSAGE_BUSINESS)


cType
Caracter
Envio ou Recepcao
'1' (TRANS_SEND)


cXml
Caracter
XML a ser tratado quando Recepção




cFunName
Caracter
Força o GetRotInteg(), indicando para o EAI qual é a rotina que possui o adapter
GetRotInteg()


lOnlyReturn
Lógico
Quando for um Envio: .T. Define que sera gerado apenas o retorno da INTEGDEF e nao sera fetio o Envio
.F.


cVersion
Caracter
Versão da mensagem Única
1.000


nPage
Numérico
Numero da página
0


nPageSize
Numérico
Tamanho da página
0


A partir do label 04032016 o retorno da FwIntegdef traz, quando existe erro de integração, o erro apresentado no segundo parâmetro do Array de resposta.

O primeiro parâmetro deste array é um lógico, indicando se a integração ocorreu com sucesso (caso o adapter não esteja cadastrado é retornado sucesso) ou não. O segundo é a mensagem de erro associada ao evento.

Para verificar o sucesso ou não da integração nos adapters é necessário validar o retorno da rotina (o retorno pode ser nil caso o adapter não esteja cadastrado. Neste caso, a integração ocorreu com 'sucesso', pois não foi necessário executá-la.). Exemplo:

aRet:=FwIntegdf(........)

If aRet <> nil

//avalia o retorno dos parâmetros


A partir do label 20231120 a função estará preparada para receber os parâmetros nPage e nPageSize a fim de sanar possíveis inconsistências, de timeout, devidos a arquivos muito grandes.

Caso seja uma integração síncrona, o conteúdo o nPage e nPageSize sempre será zero, por padrão.

FWEAIBusEvent


Cria bloco de XML referente a Business Event da Business Message da Mensagem Única
FWEAIBusEvent( cEntity, nOperation, aKeys )
Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cEntity
Caracter
Entidade da mensagem (nome da mensagem única)




nOperation
Numérico
Operação: 3 ou 4 = upsert / 5 = delete
2


aKeys
Array
Vetor bidimensional com campos no formato {Campo, Conteúdo}


{ }






Exemplo:
cXMLRet := FWEAIBusEvent( "ITEM", 5, { { "Code", SB1->B1_COD } } )
Retorno:
XML a ser utilizado:
<BusinessEvent>
<Entity>ITEM</Entity>
<Event>delete</Event>
<Identification>
<key name="code">0000000001</key>
</Identification>
</BusinessEvent>

FWEAIBusRequest


Cria bloco de XML referente à Business Request da Business Message da Mensagem Única
FWEAIBusRequest( cRequest )

Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cRequest
Caracter
Nome da requisição (nome da mensagem)





Exemplo:
cXMLRet := FWEAIBusRequest( "AccountBalance" )

Retorno:
XML a ser utilizado :
<BusinessRequest>
<Operation>AccountBalance </Operation>
</BusinessRequest>

FWEAILOfMessages

Função para geração de múltiplas mensagens de retorno na Response Message da mensagem única
FWEAILOfMessages( aMessages )
Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
aMessages
Array

Vetor bidimensional com os dados para a criação da mensagem no formato:

[1] Caracter - Mensagem

[2] Numérico - Tipo da mensagem: 1=error ou 2=warning

[3] Caracter - Codigo de Erro da mensagem conforme a mensagem




 X

Exemplo:
aMessages := {}
aAdd( aMessages, { 'Estado nao existe' , 1, '001' } )
aAdd( aMessages, { 'CNPJ invalido' , 1, 'A10' } )
aAdd( aMessages, { 'Nao informado tipo', 2, '500' } )
cRet := FWEAILOfMessages( aMessages )
// cRet será
//<Message type="error" code="001">Estado nao existe</Message>
//<Message type="error" code="A10">CNPJ invalido</Message>
//<Message type="warning" code="500">Nao informado tipo</Message>

FWEAIEMPFIL


Verifica e retorna o de/para de empresa filial.
FWEAIEMPFIL( cCompanyID, cBranchId, cProduct,lExternal )

Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cCompanyID
Caracter
Codigo da companhia (CompanyID) recebido no XML da mensagem


 X
cBranchId
Caracter
Codigo da unidade (BranchID) recebido no XML da mensagem


X
cProduct
Caracter
Codigo do produto (Product) recebido no XML da mensagem


X
lExternal
Lógico
Indica se os dados recebidos são do Protheus e que o retorno deve ser o correspondente do sistema externo
    .F.



Retorno:
Vetor com { Empresa , Filial } ou vazio, caso a informação não seja encontrada. 


Exemplo:

Buscando o par de grupo/filial do Protheus através dos dados recebidos do RM:

aEmpFil := FwEaiEmpFil('01','0001','RM') → Caso seja encontrado correspondente no cadastro de adapters de grupos e filiais irá retornar o grupo e filial do Protheus


Buscando o par de empresa/filial do RM no Protheus 

aEmpFil := FwEaiEmpFil('18','D MG 01','RM',.T.) → Caso seja encontrado correspondente no cadastro de adapters de grupos e filiais irá retornar o grupo e filial do RM.

CFGA070Int


Obtém um código interno da tabela de/para através de um código externo
CFGA070Int( cRefer, cAlias, cField, cValExt,cTable )
Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cRefer
Caracter
Referencia. Normalmente a "marca" da mensagem: PROTHEUS / LOGIX / RM / DATASUL, etc.


 X
cAlias
Caracter
Alias do de/para (SA1, SA2, etc.)


X
cField
Caracter
É o campo de referencia do De/para (A1_COD, B1_COD, etc. )


X
cValExt
Caracter
Código externo para busca do código interno


X
cTable
Caracter
Nome físico da tabela de dados ao qual o de-para se refere. Não é necessário que seja passado
RetSqlName(cAlias)



Retorno:
Código Externo

CFGA070Ext


Obtém um código externo da tabela de/para através de um código interno
CFGA070Ext( cRefer, cAlias, cField, cValInt,cTable)
Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cRefer
Caracter
Referencia. Normalmente a "marca" da mensagem: PROTHEUS / LOGIX / RM / DATASUL, etc.


 X
cAlias
Caracter
Alias do de/para (SA1, SA2, etc.)


X
cField
Caracter
É o campo de referencia do De/para (A1_COD, B1_COD, etc. )


X
cValInt
Caracter
Código interno para busca do código externo


X
cTable
Caracter
Nome físico da tabela de dados ao qual o de-para se refere. Não é necessário que seja passado
RetSqlName(cAlias)



Retorno:
Código Externo

CFGA070Mnt


Faz a Inclusão /Alteração / Exclusão dos dados na tabela de/para
CFGA070Mnt( cRefer, cAlias, cField, cValExt, cValInt, lDelete, nOrdem,cTable,cOwnerMsg )

Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cRefer
Caracter
Referencia. Normalmente a "marca" da mensagem: PROTHEUS / LOGIX / RM / DATASUL, etc.




cAlias
Caracter
Alias do de/para (SA1, SA2, etc.)


X
cField
Caracter
É o campo de referencia do De/para (A1_COD, B1_COD, etc. )


X
cValExt
Caracter
Código externo para gravacao




cValInt
Caracter
Código interno para gravação


X
lDelete
Lógico
Indica a deleção do registro
.F.


nOrdem
Numérico
Ordem para busca
Se DELETE e não enviada a cRefer, assume 3, senão assume 2. Se for UPSERT assume 1.


cTable
Caracter
Nome físico da tabela de dados ao qual o de-para se refere. Não é necessário que seja passado
RetSqlName(cAlias)


cOwnerMsg 
Caracter

Informa qual a mensagem única pai do de-para. Por exemplo, a mensagem pai do de-para da tabela SA1 é a CUSTOMERVENDOR. Porém mais de uma mensagem podem gravar aquele de-para, mas somente uma é o 'pai' do registro. Ex. A mensagem única FINANCING grava o de-para da tabela SE1, porém a mensagem ACCOUNTRECEIVABLEDOCUMENT também faz a gravação, sendo esta o 'pai' do de-para.

Este campo somente é habilitado em repositórios Protheus com Lib de versão maior ou igual a 10102016, representada pelo campo XXF_UNMESS.







O Delete dos registros pode ser realizado de duas maneiras diferentes.

  • Ao chamar a função para excluir os de-para e não passar a variável cRefer (a marca), todos os registros que possuem aquele InternalId, independente de qual foi a marca geradora, serão apagados. Exemplo de chamada:
    • CFGA070Mnt( , 'SA1', 'A1_COD', , '18|D MG 01002|01|C', .T. ) - Neste caso, serão excluídos da tabela XXF todo InternalId da tabela SA1, de chave A1_COD que possuam o código 18|D MG 01002|01|C, independente da marca que o gerou;
  • Pode-se excluir exclusivamente o de-para de uma única marca, deste modo, esta deve ser passada na chamada da função:
    • CFGA070Mnt('RM' , 'SA1', 'A1_COD', , '18|D MG 01002|01|C', .T. ) - Desta maneira, somente serão excluídos os de-para de código interno 18|D MG 01002|01|C que foram gerados em uma integração com o produto RM.

cOwnerMsg disponível a partir da lib label 10102016, com previsão de liberação em dezembro de 2016.



SetRotInteg


Ajusta a rotina de integração no EAI (o GetRotInteg()), quando a rotina chamada não é a rotina de contexto da integração. Ao utilizar esta rotina, após a chamada da integração é aconselhável utilizá-la para voltar o GetRotInteg() ao estado original.
SetRotInteg( cFunction )

Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cFunction
Caracter
Rotina que se deseja iniciar a integração


 X

Exemplo

SetRotInteg('CTBA030')



GetRotInteg


Devolve a rotina de contexto de integração na Mensagem Única
GetRotInteg( )

Exemplo

cRotina:=GetRotInteg()


_NoTags


Ajusta uma string trocando os caracteres de controle do XML por suas entidades de referência
_NoTags( cTexto)

Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cTexto
Caracter
String na qual se deseja mudar os caracteres não permitidos


 X

Exemplo

cRetorno:=_NoTags( 'Quero enviar Pais&Filhos ->"Novo Texto" ')

cRetorno assumirá

Quero enviar Pais&amp;Filhos-&gt;&quot;Novo Texto&quot;



FWHasEai


Verifica se uma rotina possui configuração de EAI
FWHasEAI( cFunction, lVerifySend, lVerifyRec, lVerifyUMess,lRestArea )

Parâmetros:

Nome
Tipo
Descrição
Default
Obrigatório
cFunction
Caracter
Nome da função para verificação
 GetRotInteg()


lVerifySend
Lógico
Verifica se está configurado para envio
.F.


lVerifyRec
Lógico
Verifica se está configurado para recepção
.F.


lVerifyUmess
Lógico
Verifica se está configurada como Mensagem Única Totvs
.F.


lRestArea 
lógico
Retorna a posição inicial da XX4, caso passado como .T.
.F.


         

          Se todos os parâmetros forem omitidos, será verificado apenas se há uma configuração de EAI para a rotina independentemente de se ter o envio ou recebimento habilitados.


Exemplo

lRetorno:=FWHasEai('MATA020',.T.,,.T.) //verifica se existe a mensagem única do fonte MATA020 cadastrada para envio


lRestArea disponível a partir da lib label 30012019, com previsão de liberação em fevereiro de 2019

FwEAiSndTo


Função que retorna  para qual produto cadastrado no Roteamento EAI a mensagem está sendo enviada

FwEaiSndTo( )

Retorno:

Produto cadastrado na rota (DATASUL, RM, etc.)

Obs: Caso não exista rota cadastrada é retornado uma string vazia.


FwAdapterVersion


Função que retorna a versão de uma dado adapter cadastrado. 

FwAdapterVersion( cRotina, cModel)

Parametros:

NomeTipoDescriçãoDefaultObrigatório
cRotinaCaracterRotina como esta cadastrada na XX4

cModelCaracterNome da mensagem como esta cadastrado na XX4


Retorno:

Versão cadastrada na XX4, Exemplo : "2.003"

Obs: Caso o adapter não esteja cadastrado o retorno será vazio


FwAdapterInfo


Função que retorna Informações de um determinado adapter

FwAdapterInfo( cRotina, cModel)

Parametros:

NomeTipoDescriçãoDefaultObrigatório
cRotinaCaracterRotina como esta cadastrada na XX4
Sim
cModelCaracterNome da mensagem como esta cadastrado na XX4
Sim


Retorno:

Array com os dados conforma cadastrado na XX4. utilizando fwadaptereai.ch atualizado pode se usar os seguintes defines para acessar as informações

DefineInformaçãoTipo
ADAPTER_INFO_MODELNome da MensagemCaractere
ADAPTER_INFO_ROTINARotina da TransaçãoCaractere
ADAPTER_INFO_SENDSe esta configurado para envioLogico
ADAPTER_INFO_RECEIVESe esta configurado para recebimentoLogico
ADAPTER_INFO_METHODMétodo da Transação(PROC_SYNC,PROC_ASYNC)Caractere
ADAPTER_INFO_OPERATIONQual operação ele esta configuradoCaractere
ADAPTER_INFO_CHANNELQual canal ele esta configuradoCaractere
ADAPTER_INFO_VERSIONQual a versão que esta configuradaCaractere
ADAPTER_INFO_CONDITIONCondição cadastrada na XX4, que indica se será executado ou não

Caractere

ADAPTER_INFO_FORMATIndica se o formato será JSON ou XMLCaractere


Obs: Caso o adapter não esteja cadastrado o retorno será um array vazio


Status do documentoConcluído
Data18/11/2014
Versão1.0
Versão anterior1.0
Autores
Índice resumido
Índice