Recientemente hemos introducido una nueva función en Integration Advisor llamada «pre-transformaciones“. Esta función permite reordenar la estructura MIG de origen de una guía de mapeo antes del mapeo real para que el mapeo posterior sea más simple y se centre solo en el mapeo de contenido entre los campos de origen y de destino.
Actualmente, se admiten dos operaciones «Copiar nodo referenciado» y «Agrupar por clave» (ver documento en línea). Sin embargo, estas dos operaciones se pueden usar para modelar casos de uso aún más complejos. Un ejemplo de un caso de uso más complejo es restaurar la estructura jerárquica de una estructura plana, lo que se explicará en este artículo de blog.
Como ejemplo, utilizamos el siguiente escenario: Suponga que tiene un MIG de origen basado en el mensaje X12 856 (Aviso de envío/Manifiesto) que se asignará a un MIG de destino basado en cXML ShipNoticeRequest. El mensaje fuente X12 tiene una estructura plana. Aquí usamos la función de calificación para modelar las diferentes instancias de los nodos HL que corresponden a Envío, Pedido, Paquete y Artículo:
Eso significa que Envío, Pedido, Paquete y Artículo son hermanos en la estructura de origen. Sin embargo, el mensaje de destino tiene una estructura jerárquica, donde ShipNoticePortion (corresponde a Order) es el padre de ShipNoticeItem (corresponde a Item), que nuevamente es el padre de Packaging (corresponde a Pack):
Si ingenuamente hiciéramos las siguientes asignaciones
obtendríamos en cada instancia de Packaging una fusión de todos los HL [Pack] instancias en lugar de solo el HL [Pack] instancia que corresponde al ShipNoticeItem principal y similar, cada elemento se agrega a cada ShipNoticePortion en lugar de solo los correspondientes:
Por lo tanto, primero debemos transformar la estructura del mensaje de origen para que refleje la jerarquía que está codificada en los segmentos HL del mensaje X12. Para eso queremos usar la función de transformación previa.
Para crear la transformación previa, primero debe crear dos MIG: uno basado en el mensaje X12 856 (aviso/manifiesto de envío), que será el mensaje de origen, y otro basado en cXML ShipNoticeRequest. Para el primero, usamos la función de calificación para crear 4 nodos calificados hermanos para el bucle HL:
Tenga en cuenta que esta calificación aún no ha sido propuesta por el editor de MIG. Primero tiene que crear un marcador calificador correspondiente (ver documento en línea).
Agregue los siguientes segmentos a los nodos respectivos:
Entonces su MIG se verá similar a
Para agregar los siguientes nodos de grupo:
Ahora su MIG se verá similar a
Como último paso de la preparación, cree un MAG con sus dos MIG, vaya a «Descripción general» y agregue una transformación previa mediante el botón +.
Ahora podemos construir nuestra transformación previa. Agregue un nuevo paso de transformación con la operación «Copiar nodo referenciado». Asigne los siguientes nodos como parámetros de operación:
y ejecutar la pretransformación.
Luego agregue un segundo paso de transformación del tipo «Copiar nodo referenciado» y asigne los siguientes nodos:
y ejecutar la pretransformación de nuevo. Ahora el MIG pre-transformado se verá como
El siguiente paso es la creación de la transformación principal. Para eso, presione el botón «Transformación principal» y conecte los siguientes nodos (aquí solo se enumeran los elementos de mapeo que son necesarios para la demostración de la restauración de la estructura de árbol, un escenario real contendrá más elementos de mapeo):
Ahora puede simular el mapeo. Utilice la siguiente carga útil para la simulación:
<?xml version="1.0" encoding="UTF-8"?>
<M_856>
<S_ST>
<D_143>856</D_143>
<D_329>0001</D_329>
</S_ST>
<S_BSN>
<D_353>00</D_353>
<D_396>SOPI-1lvlPack</D_396>
<D_373>20180122</D_373>
<D_337>101059</D_337>
<D_1005>0001</D_1005>
</S_BSN>
<S_DTM>
<D_374>011</D_374>
<D_373>20180222</D_373>
<D_337>100000</D_337>
<D_623>ET</D_623>
</S_DTM>
<S_DTM>
<D_374>017</D_374>
<D_373>20180223</D_373>
<D_337>100000</D_337>
<D_623>ET</D_623>
</S_DTM>
<G_HL>
<S_HL>
<D_628>1</D_628>
<D_735>S</D_735>
<D_736>1</D_736>
</S_HL>
<G_N1>
<S_N1>
<D_98>ST</D_98>
<D_93>ShipTo Name</D_93>
</S_N1>
</G_N1>
<G_N1>
<S_N1>
<D_98>SU</D_98>
<D_93>Supplier Name</D_93>
</S_N1>
</G_N1>
</G_HL>
<G_HL>
<S_HL>
<D_628>2</D_628>
<D_734>1</D_734>
<D_735>O</D_735>
<D_736>1</D_736>
</S_HL>
<S_PRF>
<D_324>Order ID 1</D_324>
</S_PRF>
<S_DTM>
<D_374>004</D_374>
<D_373>20180201</D_373>
<D_337>093059</D_337>
<D_623>ET</D_623>
</S_DTM>
</G_HL>
<G_HL>
<S_HL>
<D_628>7</D_628>
<D_734>1</D_734>
<D_735>O</D_735>
<D_736>1</D_736>
</S_HL>
<S_PRF>
<D_324>Order ID 2</D_324>
</S_PRF>
<S_DTM>
<D_374>004</D_374>
<D_373>20180202</D_373>
<D_337>093059</D_337>
<D_623>ET</D_623>
</S_DTM>
</G_HL>
<G_HL>
<S_HL>
<D_628>3</D_628>
<D_734>2</D_734>
<D_735>P</D_735>
<D_736>1</D_736>
</S_HL>
<S_PO4>
<D_103>CTN</D_103>
<D_384>100</D_384>
<D_355_2>KG</D_355_2>
</S_PO4>
<S_MAN>
<D_88>GM</D_88>
<D_87>CTN1</D_87>
</S_MAN>
</G_HL>
<G_HL>
<S_HL>
<D_628>5</D_628>
<D_734>2</D_734>
<D_735>P</D_735>
<D_736>1</D_736>
</S_HL>
<S_PO4>
<D_103>BOX</D_103>
<D_384>10</D_384>
<D_355_2>KG</D_355_2>
</S_PO4>
<S_MAN>
<D_88>GM</D_88>
<D_87>BOX2</D_87>
</S_MAN>
</G_HL>
<G_HL>
<S_HL>
<D_628>8</D_628>
<D_734>7</D_734>
<D_735>P</D_735>
<D_736>1</D_736>
</S_HL>
<S_PO4>
<D_103>BOX</D_103>
<D_384>500</D_384>
<D_355_2>KG</D_355_2>
</S_PO4>
<S_MAN>
<D_88>GM</D_88>
<D_87>BOX4</D_87>
</S_MAN>
</G_HL>
<G_HL>
<S_HL>
<D_628>4</D_628>
<D_734>3</D_734>
<D_735>I</D_735>
<D_736>0</D_736>
</S_HL>
<S_LIN>
<D_350>1</D_350>
<D_235>PL</D_235>
<D_234>10</D_234>
<D_235_2>VP</D_235_2>
<D_234_2>Supplier Part ID 1</D_234_2>
</S_LIN>
<S_SN1>
<D_350>10</D_350>
<D_382>100</D_382>
<D_355>EA</D_355>
<D_330>100</D_330>
<D_355_2>EA</D_355_2>
</S_SN1>
</G_HL>
<G_HL>
<S_HL>
<D_628>6</D_628>
<D_734>5</D_734>
<D_735>I</D_735>
<D_736>0</D_736>
</S_HL>
<S_LIN>
<D_350>2</D_350>
<D_235>PL</D_235>
<D_234>20</D_234>
<D_235_2>VP</D_235_2>
<D_234_2>Supplier Part ID 2</D_234_2>
</S_LIN>
<S_SN1>
<D_350>20</D_350>
<D_382>10</D_382>
<D_355>EA</D_355>
<D_330>100</D_330>
<D_355_2>EA</D_355_2>
</S_SN1>
</G_HL>
<G_HL>
<S_HL>
<D_628>9</D_628>
<D_734>8</D_734>
<D_735>I</D_735>
<D_736>0</D_736>
</S_HL>
<S_LIN>
<D_350>4</D_350>
<D_235>PL</D_235>
<D_234>20</D_234>
<D_235_2>VP</D_235_2>
<D_234_2>Supplier Part ID 3</D_234_2>
</S_LIN>
<S_SN1>
<D_350>20</D_350>
<D_382>200</D_382>
<D_355>EA</D_355>
<D_330>200</D_330>
<D_355_2>EA</D_355_2>
</S_SN1>
</G_HL>
<G_HL>
<S_HL>
<D_628>10</D_628>
<D_734>8</D_734>
<D_735>I</D_735>
<D_736>0</D_736>
</S_HL>
<S_LIN>
<D_350>5</D_350>
<D_235>PL</D_235>
<D_234>30</D_234>
<D_235_2>VP</D_235_2>
<D_234_2>Supplier Part ID 4</D_234_2>
</S_LIN>
<S_SN1>
<D_350>30</D_350>
<D_382>300</D_382>
<D_355>EA</D_355>
<D_330>300</D_330>
<D_355_2>EA</D_355_2>
</S_SN1>
</G_HL>
<S_CTT>
<D_354>5</D_354>
</S_CTT>
<S_SE>
<D_96>80</D_96>
<D_329>0001</D_329>
</S_SE>
</M_856>
Esta carga útil tiene la siguiente estructura lógica:
+--Order ID 1 (D_628=2) | | | | (D_734=2) | | | +--CTN1 (D_628=3) | | | | | | (D_734=3) | | | | | +--Supplier Part ID 1 (D_628=4) | | | | (D_734=2) | | | +--BOX2 (D_628=5) | | | | (D_734=5) | | | +--Supplier Part ID 2 (D_628=6) | +--Order ID 2 (D_628=7) | | (D_734=7) | +--BOX4 (D_628=8) | | (D_734=8) | +--Supplier Part ID 3 (D_628=9) | | (D_734=8) | +--Supplier Part ID 4 (D_628=10) The simulation with this payload gives the following result:
<?xml version="1.0" encoding="UTF-8"?>
<ShipNoticeRequest xmlns:f="http://www.sap.com/ns/integration-advisor/xslt-functions"
xmlns:msg="http://sap.com/xi/SAPGlobal20/Global">
<ShipNoticeHeader shipmentID="ShipTo Name Supplier Name" noticeDate=""/>
<ShipNoticePortion>
<OrderReference orderID="Order ID 1" orderDate="20180201 093059">
<DocumentReference payloadID=""/>
</OrderReference>
<ShipNoticeItem quantity="100" lineNumber="10">
<ItemID>
<SupplierPartID>
<_CONTENT_>Supplier Part ID 1</_CONTENT_>
</SupplierPartID>
</ItemID>
<UnitOfMeasure/>
<Packaging>
<PackagingCode lang="">
<_CONTENT_>CTN</_CONTENT_>
</PackagingCode>
<PackageTypeCodeIdentifierCode>CTN</PackageTypeCodeIdentifierCode>
<ShippingContainerSerialCode>CTN1</ShippingContainerSerialCode>
<DispatchQuantity quantity="100">
<UnitOfMeasure>KG</UnitOfMeasure>
</DispatchQuantity>
</Packaging>
</ShipNoticeItem>
<ShipNoticeItem quantity="100" lineNumber="20">
<ItemID>
<SupplierPartID>
<_CONTENT_>Supplier Part ID 2</_CONTENT_>
</SupplierPartID>
</ItemID>
<UnitOfMeasure/>
<Packaging>
<PackagingCode lang="">
<_CONTENT_>BOX</_CONTENT_>
</PackagingCode>
<PackageTypeCodeIdentifierCode>BOX</PackageTypeCodeIdentifierCode>
<ShippingContainerSerialCode>BOX2</ShippingContainerSerialCode>
<DispatchQuantity quantity="10">
<UnitOfMeasure>KG</UnitOfMeasure>
</DispatchQuantity>
</Packaging>
</ShipNoticeItem>
</ShipNoticePortion>
<ShipNoticePortion>
<OrderReference orderID="Order ID 2" orderDate="20180202 093059">
<DocumentReference payloadID=""/>
</OrderReference>
<ShipNoticeItem quantity="200" lineNumber="20">
<ItemID>
<SupplierPartID>
<_CONTENT_>Supplier Part ID 3</_CONTENT_>
</SupplierPartID>
</ItemID>
<UnitOfMeasure/>
<Packaging>
<PackagingCode lang="">
<_CONTENT_>BOX</_CONTENT_>
</PackagingCode>
<PackageTypeCodeIdentifierCode>BOX</PackageTypeCodeIdentifierCode>
<ShippingContainerSerialCode>BOX4</ShippingContainerSerialCode>
<DispatchQuantity quantity="500">
<UnitOfMeasure>KG</UnitOfMeasure>
</DispatchQuantity>
</Packaging>
</ShipNoticeItem>
<ShipNoticeItem quantity="300" lineNumber="30">
<ItemID>
<SupplierPartID>
<_CONTENT_>Supplier Part ID 4</_CONTENT_>
</SupplierPartID>
</ItemID>
<UnitOfMeasure/>
<Packaging>
<PackagingCode lang="">
<_CONTENT_>BOX</_CONTENT_>
</PackagingCode>
<PackageTypeCodeIdentifierCode>BOX</PackageTypeCodeIdentifierCode>
<ShippingContainerSerialCode>BOX4</ShippingContainerSerialCode>
<DispatchQuantity quantity="500">
<UnitOfMeasure>KG</UnitOfMeasure>
</DispatchQuantity>
</Packaging>
</ShipNoticeItem>
</ShipNoticePortion>
</ShipNoticeRequest>
Aquí podemos ver que los artículos (
En este artículo de blog, mostramos cómo podemos usar las operaciones disponibles de la función de transformación previa para resolver desafíos de mapeo aún más complejos, como la restauración de una estructura de árbol a partir de un mensaje de origen plano. Estaremos encantados de saber más sobre sus casos de uso para esta nueva característica.
Por favor, comparte tus ideas y comentarios en un comentario. Además, puede seguir el Página de temas de SAP Integration Suite para conocer más sobre Integration Suite en general, o lea otras publicaciones en Asesor de integración. También puedes seguir mi perfil si quieres leer contenido similar en el futuro.
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