Páginas filhas
  • ER_PCREQ-9642_Mensageria TOTVS - Mudanças no businessContent

 

Visão Geral

Esse documento tem como objetivo descrever as alterações necessárias no modelo atual de mensagem única, procurando atender a definição de que “o vertical deve ser o dono da integração”.

Serão criados mecanismos que de acordo com o padrão de cada aplicativo, disponibilize seus “objetos de negócios” como BusinessContent.

Essas alterações não têm como objetivo substituir o modelo anterior de mensageria única e sim agregar novas funcionalidades e recursos.

Para fins de adequação, mudaremos o nome de “Mensagem Única” para “Mensageria TOTVS”.

 

Definições

1) Expor os objetos de negócio para recuperação de seus Schemas

As equipes responsáveis pelos produtos Totvs deverão desenvolver serviços (webServices) para expor as estruturas (schemas) de seus objetos de negócios, afim de que possam ser chamados externamente. Esses schemas deverão estar no formato de xsd;

Isso permitirá que os produtos possam enviar dados, no formato de xml (BusinessContent), contendo informações já no formato nativo dos objetos de negócio (sem necessidade de transformação).

Objetos de negócio que serão chamados via mensagem de “Request” deverão expor serviços a fim de que possam retornar schemas contendo a definição dos seus parâmetros de entrada. Esses schemas, também, deverão estar no formato de xsd.

 

2) Outras definições

  • Na tag “transaction” poderá ser enviado o nome do objeto de negócio responsável pelo processamento da mensagem. Atualmente, somente nomes de mensagens únicas são enviadas nessa tag.

                       Exemplo: <transaction>RM/FinCFODataBR<transaction>

                            Nesse exemplo o nome do objeto de negócio foi enviado.

                       Exemplo: <transaction>CUSTOMERVENDOR<transaction>

                            Nesse exemplo o nome da mensagem única foi enviado

  • No recebimento de uma determinada mensagem, será determinado automaticamente pelo EAI receptor o tipo de processamento da mensagem (processamento por um módulo “Vertical” ou “ERP”).

  • Em se tratando de mensagens nativas (não utilizando mensageria única), no atributo “transaction”, se deve incluir obrigatoriamente o nome do ERP (RM/ ou Protheus/ ou DataSul/ ou /Logix) antes do nome do objeto de negócio. 
    No recebimento dessa mensagem, o EAI receptor verificará se o nome incluído emparelha com seu ERP. Caso positivo, trata-se de um receptor ERP. Caso negativo, trata-se de um receptor vertical.

    Exemplo:

<MessageInformation version="12.1.9">

  <UUID>578458748541574578548487</UUID>

  <Type>BusinessMessage</Type>

  <Transaction>Protheus/ObjetoDeNegocioProtheus</Transaction>

  <StandardVersion>1.0</StandardVersion>

  <SourceApplication>SourceApplication</SourceApplication>

  <CompanyId>CompanyId</CompanyId>

  <Product name="Any" version="Any"/>

  <GeneratedOn>2016-02-04T11:00:00</GeneratedOn>

  <DeliveryType>Assync/Sync</DeliveryType>

</MessageInformation>

 

  • Na tag “Identification” não será enviada nenhuma informação (em caso de mensagens nativas). O envio dessa informação só faria sentido nos casos de mensagens únicas;

    Exemplo:

<BusinessMessage>

  <BusinessEvent>

    <Entity>Protheus/ObjetoDeNegocioProtheus</Entity>

    <Event>upsert|delete</Event>

    <Identification>

    </Identification>

  </BusinessEvent>

  <BusinessContent>

    ...

  </BusinessContent>

</BusinessMessage>

 

  • Na tag “ReturnContent” da mensagem de resposta “ResponseMessage” não será retornada a lista de internalsIds (em caso de mensagens nativas), visto que para esse tipo de mensagem o ERP não mais armazenará os internalsIds dos verticais;

<ResponseMessage>

  <ReceivedMessage>

        <SentBy>client</SentBy>

        <UUID>94551485144878487457857454</UUID>

        <MessageContent><![CDATA[

               <TOTVSMessage>...</TOTVSMessage>

        ]]>

        </MessageContent>

  </ReceivedMessage>

  <ProcessingInformation>

        <ProcessedOn>2001-12-31T12:00:03</ProcessedOn>

        <Status>OK</Status>

        <ListOfMessages>

          <Message type="WARNING" code="c1">msg1</Message>

          <Message type="ERROR" code="c2">msg2.</Message>

        </ListOfMessages>

  </ProcessingInformation>

  <ReturnContent>

  </ReturnContent>

</ResponseMessage>

 

  • Será criada uma nova tag chamada “XMLContent” filha de ReturnContent”. Nessa nova tag será enviado o xml contendo o resultado da informação após seu processamento pelo receptor. Através dessa informação, o EAI vertical saberá os valores exatos das chaves geradas. Possibilitando portanto a inclusão desses valores nas tabelas de De/Para.

 


<ResponseMessage>

  <ReceivedMessage>

        <SentBy>client</SentBy>

        <UUID>94551485144878487457857454</UUID>

        <MessageContent><![CDATA[

               <TOTVSMessage>...</TOTVSMessage>

        ]]>

        </MessageContent>

  </ReceivedMessage>

  <ProcessingInformation>

        <ProcessedOn>2001-12-31T12:00:03</ProcessedOn>

        <Status>OK</Status>

        <ListOfMessages>

          <Message type="WARNING" code="c1">msg1</Message>

          <Message type="ERROR" code="c2">msg2.</Message>

        </ListOfMessages>

  </ProcessingInformation>

  <ReturnContent>

    <XMLContent>

        ...

    </XMLContent>

  </ReturnContent>

</ResponseMessage>

 

Em mensagens de exclusão, as informações excluídas também deverão ser retornadas nessa tag para recuperação correta do De/Para nos aplicativos verticais.

Objetos de negócio nos aplicativos verticais deverão “emparelhar” com seus respectivos objetos de negócios no ERP.

Exemplo: Atualmente no RM existem 4 objetos de negócios diferentes responsáveis pela inclusão dos dados bancários (banco, agencia, conta e conta caixa). No Protheus existe apenas um único objeto de negócio para inclusão dessas informações.

Sendo assim, deve ser criado pela equipe de segmentos do RM um único objeto de negócio capaz de receber todas as informações bancárias de uma única vez.

Esse novo objeto de negócio a ser criado pelo RM “orquestrará” as chamadas aos objetos de negócio nativos do segmento;

O originador da mensagem deve observar o conteúdo da tag "ReceivedMessage\MessageContent" para a montagem do "DE-PARA" no retorno da mensagem. Não consideramos prudente buscar o valor diretamente da fila pelo fato de ser impossível garantir a existência da mensagem em entregas do tipo assíncronas. 

 

 

3) Direção das mensagens 


3.1 -    Origem –> ERP  /   Destino -> Vertical

Mensagem de negócio - BusinessMessage/Event

<TOTVSMessage>

 <MessageInformation version="1.000">

      <UUID>40c65ac2-7ed2-4394-b778-964534b12450</UUID>

      <Type>BusinessMessage</Type>

      <Transaction>NomeERP/objetoNegocioERP</Transaction>

      <StandardVersion>1.000</StandardVersion>

      <SourceApplication>Origem</SourceApplication>

      <CompanyId>1</CompanyId>

      <BranchId>1</BranchId>

      <Product name="Destino" version="12.1.9" />

      <GeneratedOn>2016-02-02T16:20:00</GeneratedOn>

      <DeliveryType>Sync</DeliveryType>

   </MessageInformation>

   <BusinessMessage>

      <BusinessEvent>

         <Entity> NomeERP/ObjetoNegocioERP</Entity>

         <Event>upsert</Event>

         <Identification>

         </Identification>

      </BusinessEvent>

      <BusinessContent>

        <DADOSERP>

           <IDERP>-1</IDERP>

           <CODDIGOERP>001</CODDIGOERP>

           <NOMEERP>TESTE2</NOMEERP>

           <TIPOERP>6</TIPOERP>

           <CAMPO9ERP></CAMPO9ERP>

           <CAMPO10ERP></CAMPO10>

         </DADOSERP>

      </BusinessContent>

  </BusinessMessage>

</TOTVSMessage>


Mensagem de negócio - BusinessMessage/Request

<TOTVSMessage>

 <MessageInformation version="1.000">

      <UUID>40c65ac2-7ed2-4394-b778-964534b12451</UUID>

      <Type>BusinessMessage</Type>

      <Transaction>NomeERP/ProcessoObjetoNegocioERP</Transaction>

      <StandardVersion>1.000</StandardVersion>

      <SourceApplication>Origem</SourceApplication>

      <CompanyId>1</CompanyId>

      <BranchId>1</BranchId>

      <Product name="Destino" version="12.1.9" />

      <GeneratedOn>2016-02-02T16:20:00</GeneratedOn>

      <DeliveryType>Sync</DeliveryType>

   </MessageInformation>

   <BusinessMessage>

     <BusinessRequest>

        <Operation>NomeERP/ProcessoObjetoNegocioERP</Operation>

     </BusinessRequest>

      <BusinessContent>

        <PARAMETROS>

         <PAR1>1</PAR1>

          <PAR2>2</PAR2>

          <PAR3>3</PAR3>

        </PARAMETROS>

      </BusinessContent>

  </BusinessMessage>

</TOTVSMessage>

 

Mensagem de resposta / ResponseMessage

<ResponseMessage>

   <ReceiveMessage>

      <SentBy>Destino</SentBy>

      <UUID>0fdf65b2-9f1e-4913-96c8-d4236628ff7d</UUID>

      <Event>upsert</Event>

      <MessageContent> </MessageContent>

   </ReceiveMessage>

   <ProcessingInformation>

       <ProcessedOn>2016-01/01</ProcessedOn>

       <Status>OK</Status>

       <ListOfMessages> </ListOfMessages>

   </ProcessingInformation>

   <ReturnContent>

     <XMLContent>

        <DADOSERP>

           <IDERP>1094</IDERP>

           <CODDIGOERP>001</CODDIGOERP>

           <NOMEERP>TESTE2</NOMEERP>

           <TIPOERP>6</TIPOERP>

           <CAMPO9ERP>184</CAMPO9ERP>

           <CAMPO10ERP>18587</CAMPO10>

         </DADOSERP>

     </XMLContent>

   </ReturnContext>

</ReturnContext>

</ResponseMessage>

 

Detalhamento dos processos:

  • Origem da mensagem:
    • O aplicativo do ERP chama o EAI(ERP) passando as seguintes informações:
      • Nome da mensagem (mensagem única ou mensagem nativa);
        • Deve ser adicionado no início do nome da mensagem o “nome do ERP” separado por “/”.
          •  Ex: Protheus/MATA010, sendo:
            • Protheus -> nome do ERP;
            • MATA010 -> nome do objeto de negócio;
      • Versão da mensagem (somente em caso de mensagens únicas);
      • Xml dos dados no formato do ERP.
    • O EAI(ERP) inclui a mensagem na fila;
    • O EAI(ERP) recupera a mensagem da fila;
    • O EAI(ERP) cria a mensagem TotvsMessage (incluindo na tag “BusinessContent” o xml recebido com os dados no formato nativos do ERP);
    • O EAI(ERP) envia para o WebServices EAI(Vertical) a mensagem no formato “TotvsMessage”;

  • Destino da mensagem:
    • O EAI (vertical) inclui a mensagem na fila;
    • O EAI(Vertical) recupera a mensagem da fila;
    • O EAI(Vertical) recupera a primeira parte do nome da mensagem (até a posição da barra “/”) recuperando com isso o nome do ERP. Se o mesmo emparelhar com o nome do ERP em questão, trata-se de um receptor ERP. Caso contrário, trata-se de um vertical;
    • O EAI(vertical) solicita os seguintes serviços do seguimento vertical:
      • Execução do serviço de transformação da mensagem (formato nativo do ERP) para o formato nativo do segmento vertical;
      • Execução do objeto de negócio do segmento mapeado com o nome do objeto de negócio enviado pelo ERP;
      • Atualização dos valores de De/Para contendo informações das chaves de origem/destino;
        • Deve ser localizado na própria mensagem de origem os valores das chaves;
      • Retorno para o EAI(vertical) um xml contendo os dados atuais após a execução do objeto de negócio;

        A partir de agora, os EAI’s não serão mais responsáveis em transformar mensagens e controlar informações de De/para. Esses serviços serão de responsabilidade dos diversos seguimentos.

        Serviços genéricos poderão ser disponibilizados no EAI para facilitar o trabalho dos segmentos.

  • Origem da mensagem:
    • O EAI(ERP), no retorno da mensagem, grava as informações da mensagem de resposta (ResponseMessage);

 

3.2 -   Origem –> Vertical   /   Destino -> ERP

3.2 -   Origem –> Vertical   /   Destino -> ERP e outro Vertical





Mensagem de negócio - BusinessMessage/Event

<TOTVSMessage>

 <MessageInformation version="1.000">

      <UUID>40c65ac2-7ed2-4394-b778-964534b12450</UUID>

      <Type>BusinessMessage</Type>

      <Transaction>NomeDoERP/objetoNegocioERP</Transaction>

      <StandardVersion>1.000</StandardVersion>

      <SourceApplication>Origem</SourceApplication>

      <CompanyId>1</CompanyId>

      <BranchId>1</BranchId>

      <Product name="Destino" version="12.1.9" />

      <GeneratedOn>2016-02-02T16:20:00</GeneratedOn>

      <DeliveryType>Sync</DeliveryType>

   </MessageInformation>

   <BusinessMessage>

      <BusinessEvent>

         <Entity>NomeDoERP/objetoNegocioERP</Entity>

         <Event>upsert</Event>

         <Identification>

         </Identification>

      </BusinessEvent>

      <BusinessContent>

        <DADOSDOERP>

         <IDERP>-1</IDERP>

           <CODIGOERP>01854</CODIGOERP>

           <NOMEERP>NOME</NOMEERP>

           <TIPOERP></TIPOERP>

           <CAMPO1ERP></CAMPO1ERP>

           <CAMPO2ERP></CAMPO2ERP>

           <DETALHEERP>

              <IDDETALHE>-1</IDDETALHE>

              <CODIGODETALHEERP>4561</CODIGODETALHEERP>

              <NOMEDETALHEERP></NOMEDTALHEERP>

           </DETALHERP>

         </DADOSDOERP>

      </BusinessContent>

  </BusinessMessage>

</TOTVSMessage>

 

 

Mensagem de negócio - BusinessMessage/Request

<TOTVSMessage>

 <MessageInformation version="1.000">

      <UUID>40c65ac2-7ed2-4394-b778-964534b12451</UUID>

      <Type>BusinessMessage</Type>

      <Transaction>NomeDoERP/processaObjetoNegocioERP</Transaction>

      <StandardVersion>1.000</StandardVersion>

      <SourceApplication>Origem</SourceApplication>

      <CompanyId>1</CompanyId>

      <BranchId>1</BranchId>

      <Product name="Destino" version="12.1.9" />

      <GeneratedOn>2016-02-02T16:20:00</GeneratedOn>

      <DeliveryType>Sync</DeliveryType>

   </MessageInformation>

   <BusinessMessage>

     <BusinessRequest>

        <Operation>NomeDoERP/processaObjetoNegocioERP</Operation>

     </BusinessRequest>

      <BusinessContent>

        <PARAMETROS>

         <PAR1>1</PAR1>

           <PAR2>2</PAR2>

           <PAR3>3</PAR3>

         </PARAMETROS>

      </BusinessContent>

  </BusinessMessage>

</TOTVSMessage>

 

Mensagem de resposta - ResponseMessage

<ResponseMessage>

   <ReceiveMessage>

      <SentBy>Destino</SentBy>

      <UUID>0fdf65b2-9f1e-4913-96c8-d4236628ff7d</UUID>

      <Event>upsert</Event>

      <MessageContent> Conteúdo original</MessageContent>

   </ReceiveMessage>

   <ProcessingInformation>

       <ProcessedOn>2016-01/01</ProcessedOn>

       <Status>OK</Status>

       <ListOfMessages> </ListOfMessages>

   </ProcessingInformation>

   <ReturnContent>

     <XMLContent>

       <DADOSDOERP>

         <IDERP>1857</IDERP>

           <CODIGOERP>01854</CODIGOERP>

           <NOMEERP>NOME</NOMEERP>

           <TIPOERP></TIPOERP>

           <CAMPO1ERP></CAMPO1ERP>

           <CAMPO2ERP></CAMPO2ERP>

           <DETALHEERP>

              <IDDETALHE>1</IDDETALHE>

              <CODIGODETALHEERP>4561</CODIGODETALHEERP>

              <NOMEDETALHEERP></NOMEDTALHEERP>

                  </DETALHERP>

         </DADOSDOERP>

      </XMLContext>

   </ReturnContext>

   </ReturnContext>

</ResponseMessage>

 

Detalhamento dos processos:

  • Origem da mensagem:
    • O segmento vertical chama o EAI(vertical) passando as seguintes informações:
      • Nome da mensagem (mensagem única ou mensagem nativa);
        • Deve ser adicionado no início do nome da mensagem o “nome do ERP” que receberá a mensagem separado por “/”.
          •  Ex: Protheus/MATA010, sendo:
            • Protheus -> nome do ERP;
            • MATA010 -> nome do objeto de negócio;
      • Versão da mensagem (somente em caso de mensagem única);
      • Versão da mensagem (em caso de mensagem única);
      • Xml dos dados do vertical (no exemplo em questão, trata-se do formato nativo do segmento vertical).
    • O EAI(vertical) inclui a mensagem na fila;
    • O EAI(vertical) recupera a mensagem da fila;
    • O EAI(vertical) solicita os seguintes serviços do seguimento vertical:
      • Serviço de transformação da mensagem (do formato nativo do vertical) para o formato nativo do ERP;
    • O EAI(vertical) cria a mensagem TotvsMessage (incluindo na tag <BusinessContent> o xml recebido do segmento com os dados no formato ERP);
    • O EAI(vertical) envia para o WebServices EAI(ERP) a mensagem no formato <TotvsMessage>

  • Destino da mensagem:
    • O EAI (ERP) inclui a mensagem na fila;
    • O EAI(ERP) recupera a mensagem da fila;
    • O EAI(ERP) recupera a primeira parte do nome da mensagem (até a posição da barra “/”) recuperando com isso o nome do ERP. Se o mesmo emparelhar com o nome do ERP em questão, trata-se de um receptor ERP. Caso contrário, trata-se de um vertical;
    • O EAI(ERP) solicita os seguintes serviços do seguimento vertical:
      • Execução do objeto de negócio para processamento da mensagem. As informações de leitura dos dados recém criados pelo objeto de negócio deverão ser retornadas.
    • O EAI(ERP) cria a mensagem de resposta “ResponseMessage” e retorna para a origem;

 

  • Origem da mensagem:
    • O EAI(vertical), no retorno da mensagem, solicita os seguintes serviços do seguimento vertical:
      • Atualização de De/para;

       

      Os dados das chaves do ERP serão extraídos da tag <XMLContext> localizada no “ResponseMessage”;