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

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
#sap cpi  ·  CPI Transport Tool  ·  Technical Articles

Iflows de transporte entre diferentes paquetes en el mismo arrendatario de SAP Cloud Integration

By s4pcademy 


En este blog les voy a proponer una solución técnica que utilicé en mi último proyecto para mantener “transportes” entre varios paquetes de entorno en el mismo inquilino de SAP Cloud Integration.

El problema, que a menudo se encuentra en los proyectos, surge cuando un inquilino de SAP Cloud Integration necesita admitir múltiples entornos. Hay situaciones en las que los clientes suelen hospedar entornos DEV y TEST en el mismo inquilino de Cloud Integration. El desafío proviene de tener todos los paquetes de entornos sincronizados con riesgos y esfuerzo mínimos. En este problema, las herramientas de SAP no pueden ayudarnos, es decir (transporte basado en archivos, transporte a través de CTS+, transporte a través de SAP Cloud Transport Management).

Manejo de múltiples entornos en el mismo arrendatario de SAP Cloud Integration

Antes de comenzar a hablar sobre la sincronización de paquetes en el mismo inquilino de SAP Cloud Integration, creo que es muy importante subrayar la idea de tener un procedimiento establecido que debe seguir durante todo el proyecto.

Desde mi experiencia, me resulta muy fácil caer en la tentación de cambiar «pequeñas cosas», especialmente en las fases de prueba SIT y UAT, directamente en el paquete de interés y después de desbloquear las pruebas para modificar también en DEV. Pero este tipo de enfoque a largo plazo se traduce en congelar el paquete DEV y los paquetes de prueba para servir en el desarrollo y la prueba al mismo tiempo.

Incluso si tenemos que mantener varios entornos en el mismo arrendatario de SAP Cloud Integration o no, es importante tener en cuenta que el paquete DEV se usa solo para desarrollo y todos los cambios se realizan en este paquete y paquetes de PRUEBA (no no importa cuántos sistemas de prueba haya) se usarán solo para probar y no realizar cambios en estos paquetes.

Volviendo a la sincronización de paquetes en el mismo SAP Cloud Integration, una opción podría ser descargar el flujo de integración localmente, cambiar manualmente las ID del archivo de manifiesto y luego importar los cambios en el paquete de destino. Este enfoque manual no es una solución viable, pero es importante para comprender el proceso.

Pasos requeridos

  1. Después de descargar el flujo de integración del paquete DEV, vaya a su computadora y abra el archivo zip. Ir a la carpeta META-INF donde esta ubicado el archivo MANIFIESTO.MF. Abra el archivo y cambie los siguientes campos con el ID del flujo de integración del paquete TEST:
    • Bundle-SymbolicName
    • Origin-Bundle-SymbolicName
    • Nombre del paquete de origen
    • Nombre del paquete

Cambios necesarios en el archivo de manifiesto

  1. Guarde los cambios y cargue el nuevo ZIP en el flujo de integración de destino. Vaya al flujo de Integración, en Acción botón seleccionar “Ver metadatos” y cargue el archivo que cambió en el Paso 1.

Cargar cambios en la integración de prueba

Con esta técnica, estará 100% seguro de que todos los cambios realizados en DEV irán al paquete TEST. Pero como probablemente piense, este proceso lleva mucho tiempo y, por supuesto, requiere la máxima atención para preparar el archivo.

Ventaja

Ok, se ve bien, pero ¿por qué necesito esto? ¿Por qué no simplemente eliminar el antiguo flujo de integración de PRUEBA y copiar la nueva versión de DEV? La respuesta es porque normalmente el Flujo de Integración tiene parámetros configurables y una vez que haces una nueva copia, es necesario cambiar los parámetros DEV a TEST. Esto lleva mucho tiempo y requiere, nuevamente, la máxima atención para verificarlos todos.

Al utilizar este enfoque, el flujo de integración se actualizapor lo que las configuraciones siguen siendo las mismas y lo único que debe hacer el usuario final es presionar el botón «Desplegar“. Así de sencillo, ¿verdad?

El proceso manual es una opción, pero aún no se puede usar en un proyecto real donde tiene muchas interfaces y los cambios se realizan con frecuencia en su paisaje. Al final, el desarrollador decidirá realizar los cambios directamente en el entorno donde el equipo realiza las pruebas, para ahorrar tiempo. El control de versiones se destruirá y los cambios se realizarán manualmente en múltiples Iflows.

Después de una breve verificación en API Business Hub, encontré Contenido de integración colección API. Esta colección tiene todo lo que necesito para transformar el proceso manual en algo que pueda usar en mi proyecto. Al combinar el proceso manual con la colección de API, decidí crear un Iflow de SAP Cloud Integration que hará el trabajo. Utilicé SAP Cloud Platform Integration para eliminar el problema de hospedaje y el problema se redujo al crear una interfaz de usuario que recibe algunas claves de búsqueda del usuario final, realiza llamadas API estándar y envía un mensaje de respuesta.

A continuación se detallan los pasos principales que debe tener el flujo de integración:

  1. Guarde de la solicitud la clave que identificará los flujos de integración de origen y destino:Buscar%20parámetros%20son%20guardados%20en%20Contenido%20Modificador
  2. Descargue el flujo de integración de origen utilizando la siguiente llamada a la API:

OBTENGA https:///IntegrationDesigntimeArtifacts(Id='{Id}’,Version='{Version}’)/$value

Descargar%20Integración%20Flujo%20API%20descripción

Descargar Flujo de Integración – Estructura API

  1. El archivo ZIP recibido de la llamada anterior se procesará con un script maravilloso que debe cambiar de «MANIFIESTO.MF”, los campos Only Bundle-SymbolicName, Origin-Bundle-SymbolicName, Origin-Bundle-Name, Bundle-Name con el ID del flujo de integración de destino. El resto del contenido ZIP debe permanecer sin cambios.
Message replaceIflowID(Message message) {

  
    def input = message.getBody(java.io.InputStream);
    def SourceIflowID = message.getProperty("SourceIflowID");
    def TargetIflowID = message.getProperty("TargetIflowID");
    
    if(SourceIflowID == null || TargetIflowID == null){
        return input
    }
    
    MyZIP zipstream = new MyZIP(input);
    
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(out);

    ZipEntry entry = null 
    isFound = false
    def StringSource = ""
    def stringPath=""
    
    
    while ((entry = zipstream.getNextEntry()) != null) {
        if(entry.getName().length()> 11 && entry.getName()[-11..-1] == """MANIFEST.MF"""){
            zos.putNextEntry(new ZipEntry(entry.getName()));
            def text = zipstream.text;
            text = removeSpace(text);
            text = replaceImportantValue(text,SourceIflowID.toString(), TargetIflowID.toString())
            zos.write(text.getBytes());
        }
        else{
            zos.putNextEntry(new ZipEntry(entry.getName()));
            zos.write(zipstream.text.getBytes());
        }
        zos.closeEntry();
    }
    zipstream.myClose();
    zos.close();
    
    message.setBody(new ByteArrayInputStream(out.toByteArray()))
    
    return message

}
  1. Actualice la integración de destino mediante la siguiente llamada a la API:

PUT https:///IntegrationDesigntimeArtifacts(Id='{Id}’,Version='{Version}’)

Actualizar%20el%20target%20Integration%20Flow

Actualizar la estructura Flujo de integración -API

La funcionalidad principal ya está lista, pero aún requiere algunas actividades manuales para encontrar los ID de los flujos en SAP Cloud Platform Integration (que es bastante difícil cuando el artefacto no está implementado… requiere una llamada API de Contenido de integración) y también para usar una aplicación que puede enviar solicitudes como Postman.

Al crear otro flujo de SAP Cloud Integration que puede devolver una página HTML y podría interactuar con el usuario final, la búsqueda manual en SAP Cloud Platform Integration desaparece y la aplicación se puede usar directamente desde un navegador.

La página%20HTML%20-%20devuelta%20por%20CPI%20IflujoLa página HTML devuelta por CPI Iflow

Cómo funciona la interfaz

La página tiene cuatro menús desplegables y un botón, cuando el usuario elige los valores y presiona el botón “Transporte”, detrás de la página HTML, se ejecutará una llamada API a la funcionalidad principal (que expliqué anteriormente) y transportará los cambios de los Iflows de origen a los de destino. La respuesta se comprueba y se traduce en un mensaje de alerta que indica si se realizaron o no los cambios.

Cuando la página se carga en el navegador, los menús desplegables detrás del paquete de origen y de destino también usarán una llamada API que llenará el menú con todos los paquetes de su arrendatario. Una vez más, una API estándar de Contenido de integración se utilizó.

OBTENER https:///api/v1/IntegrationPackages

Obtener%20todo%20paquete%20API

Obtener todo el paquete – estructura API

Cuando el usuario selecciona un nombre de paquete de la lista, esta vez se llama a otra API para extraer todos los Iflows del paquete seleccionado y llenará el menú desplegable de Iflow. Cuando se completan los nombres de Iflow de origen y destino, el usuario puede presionar el botón «Transportar» y los parámetros se pasarán a la API de funcionalidad.

OBTENER https:///api/v1/IntegrationPackages(‘{Id}’)

Obtener%20todos%20Iflows%20de%20a%20específico%20paquete%20API

Obtenga todos los Iflows de un paquete específico – Estructura API

Las llamadas desde HTML se realizan con Ajax marco y para una mejor comprensión voy a enumerar a continuación la llamada que se hace cuando el botón “Transporte» se presiona.

$('#transport').click(function() {
    const resultTab = document.getElementById("results-table");
    resultTab.innerHTML = '';

    results = []
    let valueSource = $('#integration-flow-source').val();
    let valueTarget = $('#integration-flow-target').val();
    let objSource = integrationFlowsSource[valueSource];
    let objTarget = integrationFlowsTarget[valueTarget];

    if (objSource.iD === objTarget.iD && compareVersion(objSource.version, objTarget.version) === 0) {
      ...  
      <Perform additional checks... Like if the versions are already in sync>
      ... 
    } else {
        $.ajax({
                url: url + "/updatePack",
                type: 'POST',
                contentType: "application/json",
                data: JSON.stringify({
                    "SourceIflowID": objSource.iD,
                    "SourceIflowVersion": objSource.version,
                    "TargetIflowID": objTarget.iD,
                    "TargetIflowVersion": objTarget.version,
                    "TargetIflowName": objTarget.name
                }),
                xhrFields: {
                    withCredentials: withCred,
                    responseType: 'application/json'
                }
            })
            .then(function(response) {
                let data = JSON.parse(response);
                if (data.messageCode == "200") {
                    load_successPopUp();
                } else {
                    var errorMessage = data.message;
                    load_errorMessagePopUp(errorMessage);
                    load_errorPopUp();
                }
                let element = $('#results-table');
                element.append('<div class="item"> <pre> <code>' + response + '</code> </pre> </div>');
            });
    }
})

Manifestación

Preparé para usted una breve demostración para resaltar cómo funciona y se ve esta herramienta.

Construir esta aplicación no consumió tanto tiempo, pero tener una herramienta que sincroniza diferentes paquetes del mismo arrendatario de SAP Cloud Integration con solo una entrada mínima de su parte valió la pena, especialmente porque su arrendatario está limpio y cada vez que se realiza un cambio en DEV podría ser transportado al resto de los paquetes en máximo dos minutos.

Para mí, el proceso de construcción de esta aplicación fue: preparar un plan, encontrar cómo funciona la actualización del flujo de integración y construir las funcionalidades. Ver lo útil que es en un proyecto real me motivó a escribir este blog. ¡Espero que mi idea te inspire a construir este tipo de herramienta también! 🙂

Espero que les haya gustado mi artículo y siéntanse libres de responder con cualquier sugerencia aquí en el Sección de preguntas sobre la integración en la nube de SAP ya que todavía estoy actualizando el flujo.



Source link


arrendatarioClouddiferentesentreIflowsIntegrationmismopaquetesSAPTransporte

Artículos relacionados


Product Information  ·  SAP BW bridge  ·  What's new
SAP Data Warehouse Cloud en las noticias del cuarto trimestre
#sitBLR2023  ·  Personal Insights
Compartiendo mi experiencia como orador y asistente @ SAP Inside Track Bengaluru 2023
#PSCC_Enablement  ·  Product Information  ·  PSCC_Enablement
SAP Build Process Automation Content en SAP S/4HANA Cloud, edición pública 2302 – (Deep Dive)

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

Pruebe el servicio de impresión BTP SAP con Postman
Previo
Anatomía de un módulo de función: POPUP_TO_CONFIRM - Parte 3
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.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar