Encontré un problema mientras trabajaba en un proyecto de cliente, en el que estábamos implementando una interfaz para cargar archivos PDF en el objeto comercial de la nube pública de S/4 HANA a través de Archivos adjuntos API. Aquí estoy compartiendo mi experiencia e implementación a través de este blog con usted, con la esperanza de que esto le sea útil en algún momento. Por favor agregue sus comentarios y sugerencias acerca de este blog.
Hay un sistema externo que envía, a través de HTTPS, el contenido del archivo pdf, codificado como base64, junto con otra información como el objeto comercial y su instancia a la que se agregará el archivo. La nube pública de S/4 HANA utiliza la API de archivos adjuntos para cargar este archivo en la instancia especificada del documento de facturación del objeto.
El sistema externo envía la carga útil como se menciona a continuación. Esta carga útil incluye
Él Archivos adjuntos La API no consume el contenido del archivo codificado en base64 directamente como cuerpo del mensaje. Requirió la decodificación de este contenido y la obtención de parámetros técnicos antes de que el archivo pudiera cargarse en el Documento de facturación instancia. Por lo tanto, debemos realizar estos pasos en el middleware como CPI y pasar el encabezado y el cuerpo del mensaje como lo esperaba Archivos adjuntos API.
Para solucionar este problema me enfocaré únicamente en el desarrollo requerido en el middleware (CPI), en este blog. Suponiendo que los requisitos previos a continuación y otras cosas requeridas ya estén en su lugar.
Necesitamos un middleware como CPI que pueda decodificar el contenido base64 y ayudar a obtener otros parámetros técnicos para consumir los servicios de la Archivos adjuntos API. Por lo tanto, desarrollamos un flujo de integración (iflow) que recibe la carga útil del sistema externo, la transforma y la pasa al sistema S/4. El contenido del iflow se puede ver en la imagen a continuación.
El iflow básicamente lee la carga útil entrante y extrae los diversos elementos para preparar el encabezado y el contenido del cuerpo requeridos por el Archivos adjuntos API. Iflow realiza los siguientes pasos y actividades dentro.
1. Remitente: Tipo de elemento: Participantes -> Remitente
El remitente es un sistema externo (tipo de elemento: Participante), por ejemplo, cartero, que envía la carga útil a través de HTTPS al punto final de este iflow. El punto final debe definirse en esta conexión como se muestra en la imagen. Puede dar el punto final de su elección.
2. Recibir carga útil (Paso 1): Tipo de elemento: Transformación->Modificador de contenido
3. Obtenga el token CSRF y la cookie (Paso 2): Él Archivos adjuntos La API necesita un token CSRF como parte del encabezado del mensaje para ser invocado. Este token y la cookie se recuperan al realizar una llamada HTTP GET a S/4 Archivos adjuntos Posteriormente, estos parámetros se pasan en el paso 6 al publicar datos en la API.
3.1 Crear Sucursal: Tipo de elemento: Enrutamiento->Multidifusión->Multidifusión secuencial
Este elemento es necesario para enviar el mensaje a varias rutas de manera secuencial. Como necesitamos hacer una llamada a S/4 para buscar el Token X-CSRF y al mismo tiempo conservar el cuerpo del payload, necesitamos crear dos ramas que se ejecuten secuencialmente.
3.2 Agregar y fusionar: Tipo de elemento: Enrutamiento-> Reunir
Agrega los mensajes provenientes de dos ramas. Defina la estrategia de agregación como se muestra en la imagen.
4. Definir encabezados de mensajes (Paso 3): Tipo de elemento: Transformación->Modificador de contenido
Para desencadenar el Archivos adjuntos API en S/4, se debe pasar un conjunto de encabezados de mensajes junto con el cuerpo. Defina y cree estos encabezados de mensajes aquí como se muestra en la imagen y se describe a continuación.
5. Establezca los encabezados y el cuerpo del mensaje (Paso 4): Tipo de elemento: Transformación->Script->Script Groovy
En este paso, estableceremos los valores para los encabezados de mensajes definidos en el paso anterior. Defina un script maravilloso en el que escriba la lógica para leer la carga útil recibida del sistema externo y establezca los valores de algunos de los encabezados del mensaje: galleta, babosa y LinkedSAPObjectKey. El código se menciona en la imagen.
Un punto clave a tener en cuenta aquí es que debemos configurar el cuerpo del mensaje con el contenido codificado en base64 del archivo en secuencias de comandos (línea 21). Solo así el decodificador podrá decodificarlo y podrá ser consumido por S/4.
6. Cuerpo de decodificación (Paso 5): Tipo de elemento: Transformación->Decodificador->Decodificador Base64
En este paso, decodificamos el contenido base64 del archivo pdf pasado en la carga útil bajo el elemento
7. Invocar la API de archivos adjuntos (Paso 6): Tipo de elemento: Llamada->Llamada externa->Solicitar respuesta
En este paso el Archivos adjuntos La API en S/4 se activa al pasar los encabezados del mensaje y el cuerpo del mensaje (que es contenido base64 decodificado) con una llamada POST HTTP a S/4.
Conectar este elemento a un sistema receptor, en este caso S/4, mediante adaptador HTTP. La conexión debe definirse como se muestra en la imagen a continuación.
El contenido debe adjuntarse como un archivo pdf al documento de facturación especificado en el sistema de nube pública S/4 HANA, como se muestra en la imagen a continuación. Debería poder descargar este archivo pdf y abrirlo.
Para probar el proceso, su usuario debe tener la autorización requerida en BTP. Realice los siguientes pasos para probar:
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073