Skip to Content
Author's profile photo Former Member

Receber email com anexos, capturar apenas XML`s de notas fiscais via Java Mapping, e gerar em forma de String em um unico arquivo

Sumário:

Este documento descreve a criação de uma interface que receberá vários anexos em um email, irá capturar apenas os anexos do tipo XML via java mapping, e gerar em forma de String em um unico arquivo, o intuito do documento não é descrever criação de canais de comunicação e integration builder.

Introdução:

A partir da versão 7.1 do PI contamos com recursos que nos permitem acessar os anexos de uma mensagem via Java mapping.

Pré-requisitos:

Netweaver  Developer Studio

Libs para Java Mapping

External definition ximail importada no SWCV

Canais de comunicação Email(Sender) e File(Receiver) devidamente configurados


Passos da implementação:

1. Design:

1.1 Data Type:

Crie um data type que receberá as Strings dos anexos, conforme abaixo:

   DT_Multi.png

1.2 Message Type:

Crie um message type com o DT_MultiAttachments:

     MT_Multi.png

1.3 Services Interfaces

Outbound: Crie um Service Interface Outbound e referencie a external definition xiMail:

     SI_OUT.png


Inbound: Crie um service interface Inbound com o message type MT_MultiAttachments:

     SI_IN.png

1.4 Operation mapping: Criar um Operation Mapping: no Source Operation insira o Service Interface MFB2B_MailPackage_OB, e Target Operation insira o Service interface MFB2B_MultipleAttachments_IB

      OM.png


Note que o Mapping Program é um Java Mapping, este Java Mapping acessa os anexos da mensagem pela interface   inputattachments e seus métodos, para que o anexos da mensagem estejam disponíveis você DEVE selecionar a opção “Read Attachments” no Operation Mapping.

As referencias para o código do Java Mapping são:

http://scn.sap.com/thread/3257778 

http://scn.sap.com/people/yugapreetha.t/blog/2009/08/24/read-the-attachments-of-the-input-xi-message-in-the-message-mapping

Apesar da Thread ser sobre B2B Outbound, o código do Java Mapping está praticamente igual ao da Thread, apenas adicionei o que preciso, como, formatar o payload de saída, incluir a string da NF-e no payload de saída, verificação do tipo do arquivo, e nome do arquivo dinâmico com o campo “From” do email, você encontra o código usado neste exemplo no arquivo anexo SDN_getAttachments.txt.

2. Configuration

2.1 Neste passo apenas crie o Scnario para sua interface de modo que a interface Sender seja MFB2B_MailPackage_OB e a interface receiver MFB2B_MultipleAttachments_IB, o objetivo deste documento não é descrever a configuração de uma interface simples mail to file, apenas tenha certeza de ter o flag “Keep Attachments” em seu canal mail sender.

3. Execução:


          3.1 Enviando email com xml`s anexados

           Send_mail.png 

          3.2 SXI_MONITOR

      SXI_MONITOR.png

       Mail package e anexos:

       SXI_MONITOR attachments.png


     Trace:

     sxi_monitor trace.png

     Mensagem de saida:

        SXI_MONITOR xml validation.png

Repare no Pipeline que apesar de ter colocado a string da nota no payload principal a mensagem ainda contém anexos, na Thread mencionada para criação do java mapping você tem um exemplo de como remove-los, você também consegue buscar o conteúdo do arquivo codificado em BASE64 através do método getBase64EncondedContent.

    

     3.3 Arquivo no servidor

       Server.png    

          3.4 Arquivo

            Arquivo.png

Assigned Tags

      7 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Bruno Rigolo
      Bruno Rigolo

      Show João!!! Parabéns.

      Author's profile photo Former Member
      Former Member
      Blog Post Author

      Valeu Bruno!

      Obrigado a ajuda também!

      Abs

      Author's profile photo Ricardo Viana
      Ricardo Viana

      Elite João !! Elite, parabéns 😀 !!

      Acho que várias pessoas devem ter esse problema, receber o XML inbound com anexos de .jpg, .png , .pdf , .txt, .xml (NF-e, CC-e, Cancelamento, Manifesto, CT-e).

      Com esse mapeamento consigo receber todos os tipos de XML´s apenas no NF, CF, EF B2B etc.. ?

      Configurou algo no módule ?

      Estava iniciando um código de módule adapter, mais como estou sem ambiente para testar, não continuei.

      Valeu cara, bela contribuição, agora temos o cenário IN/OUT dominados, se falando de e-mail 😀 .

      Escrevi errado João, desculpe, por isso você não entendeu !

      Author's profile photo Former Member
      Former Member
      Blog Post Author

      Boa tarde Ricardo,

      Primeiramente obrigado!

      Cara não entendi muito bem a pergunta,

      você consegue capturar apenas XML`s, e tmb consegue criar uma unica interface que leve para EFB2B e NFB2B, era essa a dúvida?

      Você consegue com o nome do anexo setado "nfeAccessKey"

      ou "envetAccessKey" direcionar para a interface correspondente, via interface determination mesmo, mas para isso você vai precisar separar os arquivos 1 a 1, ou seja acredito que não vai conseguir entrar em um ABAP proxy com múltiplas mensagens..


      Nada de module, fiz isso pra fugir de module rs....

      te dou mais detalhes do desenho completo, e você ja da uns palpites heheh.

      Obrigado Ricardo!!!

      Abraços!!!

      Author's profile photo Pedro Baroni
      Pedro Baroni

      Parabéns João, muito bom.

      Na minha opinião a manutenção e suporte em um Java Mapping é muito mais fácil e rápida do que em um Custom Module.

      É uma pena não funcionar no PI 7.0 🙁

      Abraços.,

      Baroni

      Author's profile photo Former Member
      Former Member
      Blog Post Author

      Grande Pedro!

      Concordo plenamente com você.

      Abraços e obrigado!!!

      Author's profile photo Former Member
      Former Member

      Parabens Joao!! Muito didatico o material!

      Abs,

      Renan.