Avalados por :

Como decodificar e enviar arquivos de imagem em um cenário Legacy -> PO -> ECC: Guia passo a passo

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 4 Vistas
0
Cargando...

Olá a todos,

Tenho um cenário de Legacy-->PO-->ECC.

O sistema Legacy está enviando um arquivo de imagem em formato codificado para o PO e o PO deve decodificá-lo e enviar o arquivo de imagem original para o ECC.

Poderiam me ajudar a entender como isso pode ser alcançado? Basicamente, preciso saber como fazer a decodificação base64 nesta situação e enviar o arquivo original depois de decodificá-lo para o ECC de destino.

Saudações,

Mahesh

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá Mahesh!

A forma mais direta é usar o mapeamento em Java (e funcionalidade em Java) para converter sua string base64 em conteúdo binário e enviá-lo para o sistema receptor.

Outra opção seria usar um módulo de adaptador desenvolvido por engswee.yeoh :

https://blogs.sap.com/2015/04/30/base64decodeconverter-base64-decoding-made-easy/

Saudações, Evgeniy.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Mahesh,

Você pode decodificar base64 no PO utilizando seja um Mapeamento Java ou UDF . Mas, qual é o propósito de decodificá-lo no PO se você precisa enviá-lo para o ECC?

Está planejando anexá-lo a um documento SAP? Nesse caso, a melhor abordagem seria enviar a string base64 para o ECC por meio de um proxy e decodificá-la usando uma lógica ABAP .

Saudações!

Isuru

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá a todos,

Estou usando o seguinte código e está convertendo uma string base64 em bytes e o mensagem também está sendo processada corretamente, e o arquivo com o adaptador de arquivo do receptor está sendo enviado para o local de destino, mas o arquivo jpg de destino está em branco.

Abaixo está o código que estou usando: -

import java.io.InputStream; import java.io.OutputStream; import com.sap.aii.mapping.api.AbstractTransformation; import com.sap.aii.mapping.api.StreamTransformationException; import com.sap.aii.mapping.api.TransformationInput; import com.sap.aii.mapping.api.TransformationOutput; import javax.xml.bind.DatatypeConverter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; public class Decoder extends AbstractTransformation { @Override public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException { String encodedString = null; Node encodedStringNode; try{ //Leia cargas úteis de entrada e saída. InputStream inputStream = in.getInputPayload().getInputStream(); OutputStream outputStream = out.getOutputPayload().getOutputStream(); //Crie uma nova instância da fábrica de árvores DOM DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //Crie uma nova instância para obter um documento DOM a partir de XML. DocumentBuilder builder = factory.newDocumentBuilder(); //Obtenha um novo documento DOM a partir do XML de inputStream. Document doc = builder.parse(inputStream); //Obtenha o nó XML 'Base64EncodedString' da mensagem de origem. encodedStringNode = doc.getElementsByTagName("Base64Str").item(0); //Obtenha o valor da string base64 do elemento XML 'Base64Str' da mensagem de origem. encodedString = encodedStringNode.getFirstChild().getNodeValue(); //Decodificar string base64 para texto. //byte[] decodedBytes = Base64.getDecoder().decode(encodedString); //String decodedString = new String(decodedBytes); byte[] bytesDecoded = DatatypeConverter.parseBase64Binary(encodedString); System.out.println("O valor decodificado é " + new String(bytesDecoded)); String strDecoded=new String(bytesDecoded); //Derivar mensagem XML de saída (destino). // outputStream.write(("<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns1:Base64DecodedString xmlns:ns1=\"urn:Target_System:DecodedString\"><Base64DecodedString>"+decodedString+"</Base64DecodedString></ns1:Base64DecodedString>").getBytes()); outputStream.write(strDecoded.getBytes()); } catch (Exception exception) { getTrace().addDebugMessage(exception.getMessage()); throw new StreamTransformationException(exception.toString()); } } }

Anexo está a carga útil que eu acionei para RWB para testar este cenário. testfile.txt bytecode-conversion-after-om-execution.jpg

Basicamente há algum problema pelo qual o arquivo jpg de destino aparece em branco.

Poderia me ajudar por favor se houver algo que precise ser adicionado ao código para converter esta string base64 em uma imagem ou qualquer outra coisa que esteja faltando aqui?

testfile.txt bytecode-conversion-after-om-execution.jpg
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

°Olá a todos!

Agora consigo converter uma string de imagem codificada em base64 para uma imagem com o código abaixo. Inicialmente estava tentando enviar os dados sem ter um pai node.So então criei um nó pai e depois adicionei um campo filho dentro dele como mostrado abaixo:-

<MT_Base64>

<row>

<Base64Str>

Abaixo está o código Java funcional:-

import java.io.InputStream; import java.io.OutputStream; import java.util.Base64; import javax.xml.bind.DatatypeConverter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.sap.aii.mapping.api.AbstractTransformation; import com.sap.aii.mapping.api.StreamTransformationException; import com.sap.aii.mapping.api.TransformationInput; import com.sap.aii.mapping.api.TransformationOutput; public class Decoder_V2 extends AbstractTransformation { @Override public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException { String encodedString = null; try{ //Read input and output payloads. InputStream inputStream = in.getInputPayload().getInputStream(); OutputStream outputStream = out.getOutputPayload().getOutputStream(); //Creates new instance of DOM tree builder factory DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //Creates new instance to obtain DOM document from xml. DocumentBuilder builder = factory.newDocumentBuilder(); //Obtain new DOM document from inputStream xml. Document doc = builder.parse(inputStream); NodeList children = doc.getElementsByTagName("row"); for (int i = 0; i < children.getLength(); i++) { Node node = children.item(i); if(node.getNodeType() == Node.ELEMENT_NODE){ Element eElement = (Element) node; encodedString = eElement.getElementsByTagName("Base64Str").item(0).getTextContent(); } } //Decode base64 string to byte code. byte[] bytesDecoded = Base64.getDecoder().decode(encodedString); //Derive output(target) xml message. outputStream.write(bytesDecoded); } catch (Exception exception) { getTrace().addDebugMessage(exception.getMessage()); throw new StreamTransformationException(exception.toString()); } } }

Também anexo o código em um arquivo txt.

decoder-v2.txt

decoder-v2.txt
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?