- Criado por Jandir Deodato De Souza Silva, última alteração por Daniel Mendes De Melo Sousa em 12 ago, 2024
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 |
Melhoria disponibilizada no label 04032016
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
Melhoria disponibilizada no label 20231121
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 | Referência. 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 referência 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 Interno
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 | Referência. 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 referência 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.
Atenção
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&Filhos->"Novo Texto"
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
Atenção
lRestArea disponível a partir da lib label 30012019, com previsão de liberação em fevereiro de 2019
FwEAiSndTo
Disponível a partir do label 08062016
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
Disponível a partir do label 18022019
Função que retorna a versão de uma dado adapter cadastrado.
FwAdapterVersion( cRotina, cModel)
Parametros:
Nome | Tipo | Descrição | Default | Obrigatório |
---|---|---|---|---|
cRotina | Caracter | Rotina como esta cadastrada na XX4 | ||
cModel | Caracter | Nome 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
Disponível a partir do label 31062019
Função que retorna Informações de um determinado adapter
FwAdapterInfo( cRotina, cModel)
Parametros:
Nome | Tipo | Descrição | Default | Obrigatório |
---|---|---|---|---|
cRotina | Caracter | Rotina como esta cadastrada na XX4 | Sim | |
cModel | Caracter | Nome 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
Define | Informação | Tipo |
---|---|---|
ADAPTER_INFO_MODEL | Nome da Mensagem | Caractere |
ADAPTER_INFO_ROTINA | Rotina da Transação | Caractere |
ADAPTER_INFO_SEND | Se esta configurado para envio | Logico |
ADAPTER_INFO_RECEIVE | Se esta configurado para recebimento | Logico |
ADAPTER_INFO_METHOD | Método da Transação(PROC_SYNC,PROC_ASYNC) | Caractere |
ADAPTER_INFO_OPERATION | Qual operação ele esta configurado | Caractere |
ADAPTER_INFO_CHANNEL | Qual canal ele esta configurado | Caractere |
ADAPTER_INFO_VERSION | Qual a versão que esta configurada | Caractere |
ADAPTER_INFO_CONDITION | Condição cadastrada na XX4, que indica se será executado ou não | Caractere |
ADAPTER_INFO_FORMAT | Indica se o formato será JSON ou XML | Caractere |
Obs: Caso o adapter não esteja cadastrado o retorno será um array vazio
Status do documento | Concluído |
---|---|
Data | 18/11/2014 |
Versão | 1.0 |
Versão anterior | 1.0 |
Autores |
Índice resumido |
Índice |
- Sem rótulos
2 Comentários
Esther De Viveiro
Olá!
Acredito que na tabela descritiva da função CFGA070Ext haja um erro na descrição da variável cValInt.
A descrição está assim:
Código externo para busca do código interno
Não deveria ser assim?
Código interno para busca do código externo.
Obrigada!
Jandir Deodato De Souza Silva
Olá Esther, obrigado pela observação!
Acabei de corrigir.