• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
FORMACIÓN SAP

Pasar contenido sin procesar codificado en base64 como archivo adjunto (pdf) a S/4 Business Object a través de la API de archivos adjuntos, usando CPI como middleware

By s4pcademy 


Introducción:

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.

caso de uso:

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.

Formato de mensaje:

El sistema externo envía la carga útil como se menciona a continuación. Esta carga útil incluye

  • ID del documento de facturación al que se debe adjuntar el archivo pdf
  • Contenido del archivo pdf codificado como base64 (resaltado en la imagen). El contenido del archivo no debe enviarse sin codificar por razones de seguridad.

Carga útil

Carga útil

Desafío:

É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.

Requisitos previos:

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.

  • El sistema de comunicación y el usuario de comunicación para entrada se definen en S/4. Para obtener ayuda, consulte Blog
  • El acuerdo de comunicación se define para el escenario de integración de facturación en S/4. Para obtener ayuda, consulte Blog
  • Tener una idea básica de varios componentes utilizados en el flujo de integración en CPI
  • Es bueno haber leído la documentación de ayuda en Archivos adjuntos Referirse a Blog para leer.

Solución:

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.

ifflow%20Resumen

Descripción general de iflow

Flujo de integració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.

Definir%20punto final%20dirección

Definir la dirección del punto final

2. Recibir carga útil (Paso 1): Tipo de elemento: Transformación->Modificador de contenido

  • Este componente recibe la carga útil (formato mencionado anteriormente en la imagen Payload_format.jpg) de un sistema externo a través de HTTPS y la almacena como parte del cuerpo del mensaje.
  • Además, definimos un elemento de encabezado de mensaje Token X-CSRF como una constante El valor de Token X-CSRF debe obtenerse en el siguiente paso, conectándose con el sistema S/4 antes de que podamos activar el Archivos adjuntos API

Reciba%20payload%20y%20define%20csrf-token

Recibir carga útil y definir csrf-token

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.

Derivación

Derivación

  • La rama 1 se ejecuta primero. Esto hace una llamada GET HTTP al punto final S/4 definido en el acuerdo de comunicación y, en respuesta, recibe el valor de los elementos del encabezado del mensaje. Token X-CSRF y Galleta que se usa después.

HTTP%20Obtener%20CSRF%20token

HTTP Obtener token CSRF

  • La rama 2 se procesa más tarde y solo lleva la carga útil tal como está al siguiente paso.

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.

Agregación

Agregación

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.

  • Galleta: definido como una constante y el valor se completará usando el script
  • Token X-CSRF: el tipo de fuente es el encabezado, es decir, el valor se selecciona de los datos del encabezado
  • Babosa: Hace referencia al nombre del archivo que se cargará y el valor se completará mediante el script (obtenido de la carga útil)
  • Tipo de contenido: se refiere al tipo de archivo que se adjuntará y aquí lo codificamos para Solicitud PDF para archivo PDF.
  • BusinessObjectTypeName: Hace referencia al nombre del objeto comercial al que se debe adjuntar el archivo. VBRK se refiere al documento de facturación.
  • LinkedSAPObjectKey: Se refiere al ID del documento de facturación en S/4 al que se debe adjuntar el archivo. El valor se completará mediante un script (obtenido de la carga útil)

Definir%20mensaje%20encabezados

Definir encabezados de mensajes

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.

Guión%20para%20establecer%20mensaje%20encabezados

Script para establecer encabezados de mensajes

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 . El resultado de este paso es el contenido decodificado que se puede pasar a Archivos adjuntos API en S/4.

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.

POST%20encabezado%20y%20cuerpo

Encabezado y cuerpo POST

Resultado:

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.

Adjunto%20en%20Facturación%20Documento

Archivo adjunto en el documento de facturación

Pruebas:

Para probar el proceso, su usuario debe tener la autorización requerida en BTP. Realice los siguientes pasos para probar:

  • Guarde e implemente el iflow mencionado anteriormente.
  • Una vez implementado correctamente, vaya a Supervisar->Integración->Administrar contenido de integración->Todo.
  • Iflow debería aparecer aquí, y debería copiar la URL del punto final, así generada.
  • Cree una solicitud POST en cartero y especifique la URL del punto final obtenida en el paso anterior.
  • Especifique la carga útil en la sección Cuerpo como Raw->archivo de texto.
  • Haga clic en Enviar y debería recibir un código de respuesta 201 para una operación exitosa.
  • Inicie sesión en el sistema S/4 y abra la aplicación Gestionar documento de facturación.
  • Seleccione y abra el ID del documento de facturación que se usó en la carga útil para adjuntar el archivo.
  • Debería poder ver el archivo adjunto debajo de la Archivos adjuntos




Cómo agregar escaneos de SonarQube a su tubería de CI/CD
Previo
S/4Hana On-Prem CDS ve la conectividad con SAP Analytics Cloud mediante el modo de conexión de adquisición
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.

x