
Nuestra situación inicial es la siguiente: tenemos archivos de texto con valores separados por comas que queremos importar a nuestro sistema ERP automáticamente. Estos archivos están en un servidor SFTP. Por lo tanto, nuestro sistema PI debería buscar de vez en cuando si hay nuevos archivos disponibles en el servidor SFTP. Si es así, los atraparé a todos y los enviaré a nuestro sistema ERP. Un archivo puede contener de una a muchas entradas, que deberían enviarse a nuestro sistema ERP en una sola llamada.
Yo fluyo
Para empezar de nuevo, necesitamos un sistema PI (¡sorpresa!), en nuestro caso un SAP Netweaver Process Integration 7.50, una conexión ESR que funcione a nuestro sistema SAP ERP para configurar el SPROXY y un servidor SFTP que podamos usar para probar el escenario.
Comencemos con una mirada cercana a nuestro archivo de datos y los tipos de datos que queremos importar.
1;Aragorn;Gondor
2;Boromir;Gondor
3;Galadriel;Valinor
4;Samweis;Hobbington
Nuestro archivo tiene cuatro entradas y cada entrada consta de Id, nombre y tierras. Bastante simple hasta ahora. Entonces, comencemos de nuevo y creemos los tipos de datos correspondientes. Definimos tres tipos de datos, un DataEntry que representa una sola línea de nuestro archivo de datos, un DataList y un DataListExternal. DataListExternal es el tipo de datos que obtenemos de nuestro archivo de datos del servidor SFTP, DataList es el tipo de datos que enviamos a nuestro sistema ERP. Tenemos dos tipos de datos para lo mismo, porque podrían diferir si hacemos algún mapeo de mensajes, etc.
Entrada de datos
Lista de datos
Y porque añadir objetos a nuestro escenario es muy divertido. Además, creamos algunos tipos de mensajes. Como puede ver, el espacio de nombres XML está vacío. Esto es con plena intención y convicción, porque más tarde causó algunos problemas con el mapeo de mensajes.
Tipos de mensajes
Y, por supuesto, también necesitamos interfaces de servicio. Así que sigamos adelante y creemos algunos. Y tenga en cuenta, como siempre, que necesitamos uno para la comunicación entrante y otro para la comunicación saliente.
Interfaz de servicio entrante
Operación de interfaz de servicio entrante
Interfaz de servicio saliente
Operación de interfaz de servicio saliente
Y solo para completar, también agregamos un mapeo de mensajes simple y un mapeo operativo. Asignamos nuestra DataListExternal de origen a la DataList de destino.
Asignación de mensajes
Definición de asignación de mensajes
Mapeo de operaciones
Definición de asignación de operaciones
Al final del día, nuestro espacio de nombres se ve así y está lleno de pequeños objetos de diseño felices.
Ahora tenemos todos los objetos necesarios en nuestro Enterprise Service Browser. Ahora podemos cambiar a nuestro sistema SAP ERP y llamar a la transacción SPROXY. En Fuente -> ESR -> SWC encontramos nuestro espacio de nombres y los objetos recién creados. Con un clic derecho del mouse en nuestra interfaz de servicio SI_ImportData, podemos generar la interfaz de proxy y la clase de implementación, que contiene el método que se llama cuando el sistema PI envía datos al sistema ERP.
SPROXY
Apoderado
Método de clase
Estamos casi alli. Entonces ahora necesitamos un Canal de Comunicación, un adaptador receptor para enviar mensajes a nuestro sistema ERP. Usamos un adaptador SOAP para enviar mensajes HTTP.
Receptor proxy del canal de comunicación
Receptor proxy del canal de comunicación
Y no olvidemos que necesitamos un canal de comunicación para obtener los archivos de datos del servidor SFTP. Usamos un adaptador SFTP para esto. Pero hay más Este pequeño adaptador tiene que hacer mucha magia para proporcionar los datos correctos para los procesos posteriores. Al principio, creamos un canal de comunicación llamado CC_SFTP_Sender y completamos todo lo que este pequeño necesita para comunicarse, como la dirección del servidor, el puerto, el nombre de usuario, la huella digital, etc. Tenemos que especificar un nombre de archivo y un directorio. Este es el lugar y el archivo que busca el adaptador cuando se conecta al servidor SFTP. Podemos especificar si el archivo debe eliminarse después del procesamiento o no y podemos elegir un intervalo de sondeo. Con fines de prueba, establecemos el intervalo de sondeo en unos pocos segundos, porque el tiempo es dinero.
Canal de comunicación SFTP Remitente
Configuración de SFTP del canal de comunicación
Ahora bien, esta es la parte donde ocurre la magia. Para el procesamiento posterior necesitamos un archivo XML. Así que tenemos que convertir nuestro archivo de datos separados por comas a XML. Para esta tarea podemos usar MessageTransformBean, que podemos llamar como módulo en la secuencia de procesamiento.
Módulos de canal de comunicación SFTP
Configuramos el módulo con los siguientes parámetros. El parámetro xml.fieldNames tiene que coincidir exactamente con los elementos del tipo de datos que especificamos antes, porque distingue entre mayúsculas y minúsculas.
Clave del módulo | Nombre del parámetro | Valor del parámetro |
monte | Transformar.Clase | com.sap.aii.af.sdk.xi.adapter.Conversión |
monte | xml.conversionType | SimplePlain2XML |
monte | xml.documentName | DataListExterno |
monte | xml.endSeparator | ‘nl’ |
monte | xml.fieldNames | Id,nombre,tierras |
monte | xml.fieldSeparator | ; |
monte | xml.processFieldNames | desdeConfiguración |
monte | xml.structureTitle | FechaEntrada |
Y por último, pero no menos importante, necesitamos una configuración integrada en la que podamos completar el círculo y todo encaje. Podemos hacer esto con un iFlow como se ve en la primera captura de pantalla o “a mano” con el Integration Builder. Así que nos arremangamos y lo hacemos. Creamos una nueva Configuración Integrada y usamos nuestro CC_SFTP_Sender como comunicación entrante. Para nuestra interfaz de receptor utilizamos SI_ImportData y nuestro Operation Mapping OM_DataListExternalToDataList y para el procesamiento de salida utilizamos CC_Proxy_Receiver.
Configuración Integrada
Configuración Integrada
Configuración Integrada
Configuración Integrada
¡Y hemos terminado y listos para rodar!
¡Pero espera! ¿Cómo sabemos que esto realmente está funcionando? Así que volvemos a nuestro sistema ERP, abra nuestro método ZZII_SI_IMPORT_DATA~SI_IMPORT_DATA y coloque un punto de interrupción externo allí. Podemos especificar el usuario para el punto de interrupción externo en Más -> Utilidades -> Configuración -> Depuración.
Depurar
Ponemos un archivo en nuestro servidor SFTP y esperamos a que nuestro CC_SFTP_Sender lo obtenga desde allí. Después de unos segundos, nuestro punto de interrupción llega y aparece el editor de depuración.
Punto de ruptura
Datos de entrada
Existe la variable estándar «entrada» donde podemos encontrar nuestros datos que han sido enviados. Y como podemos ver, nuestros amados personajes de LotR han llegado sanos y salvos a su destino.
Tienes razón. Hay una manera más fácil de hacer esto. Si no necesita una asignación de mensajes en su escenario, simplemente puede omitir las operaciones y la asignación de mensajes y simplemente crear el XML en el adaptador SFTP. Esto funciona bastante bien. Debe tener en cuenta que el nombre del documento y el título de la estructura deben coincidir exactamente con el tipo de datos. Tengo problemas con el espacio de nombres XML. El adaptador lo imprimió como «ns:http://namespace», pero el PROXY esperaba «ns0:http://namespace». No pude editar ns a ns0, así que me deshice de los espacios de nombres XML en la definición del tipo de mensaje. Esto funcionó para mí.
No es ciencia espacial, pero me llevó algún tiempo ponerlo a trabajar. Apreciaría mucho sus pensamientos y comentarios sobre el tema, para mejorar el escenario.
Para más información sobre ese tema ver:
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