En este blog recuperamos el mensaje de error y otros detalles de los flujos de flujo fallidos.
Paso 1: cree el iflow con el nombre del iflow deseado.
Paso 2: Conecte el remitente y el proceso de integración con el adaptador HTTP y en el campo Dirección proporcione la dirección del punto final deseado como se muestra a continuación (/Fetching_ the_Error_Msg).
Paso 3: agregue el modificador de contenido con dos propiedades como se indica a continuación.
Nombre Tipo de fuente Valor de fuente Tipo de datos
LogEndDate Expresión ${date:now:aaaa-MM-dd’T’HH:mm:ss.SSS} java.lang.String
LogStartDate XPath /Root/StartDate java.lang.String
Paso 4: Ahora agregue Solicitar respuesta y conéctese con el receptor con el adaptador OData V2.
Realice las siguientes configuraciones en la pestaña Conexión y procesamiento en el Adaptador OData V2.
Siga la siguiente configuración para recuperar los registros MPL de la API MessageProcessingLogs mediante el adaptador OData V2.
En la pestaña Conexión:
Dirección: https://<
Autenticación: Básica
Nombre de credencial: (Implemente las credenciales de registro de CPI con un nombre particular en el Material de seguridad en la sección de monitoreo como tipo de credenciales de usuario). Indique ese nombre particular en el campo Nombre de credencial.
En la pestaña Procesamiento:
Ruta de recursos: MessageProcessingLogs
Opción de consulta: $select=MessageGuid,CorrelationId,ApplicationMessageId,ApplicationMessageType,LogStart,LogEnd,Remitente,Receptor,IntegrationFlowName,Estado,AlternateWebLink,IntegrationArtifact,LogLevel,CustomStatus,TransactionId,PreviousComponentName&$filter=LogStart ge datetime’${property .LogStartDate} ‘ y LogEnd le datetime’${property.LogEndDate}’.
Paso 5: Agregue el divisor iterativo con la siguiente expresión XPath (//MessageProcessingLog).
Paso 6: Ahora cree un proceso de integración local y agregue un modificador de contenido.
Después de agregar el modificador de contenido, cree una propiedad como se muestra a continuación.
Nombre: MessageId Tipo de fuente: XPath Valor de fuente: /MessageProcessingLog/MessageGuid
Tipo de datos: java.lang.String
Paso 7: agregue el elemento Script maravilloso y cree un script maravilloso con el siguiente script.
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
def body = message.getBody(String);
body = body.replaceAll("<MessageProcessingLog>","").trim();
body = body.replaceAll("</MessageProcessingLog>","").trim();
//body = body.replaceAll(" <?xml version="1.0" encoding="UTF-8"?>","").trim();
body = body.replaceAll("\\\t|\\\n|\\\r","");
message.setBody(body);
return message;
}
Paso 8: agregue un modificador de contenido más para almacenar todo el cuerpo con la ayuda de la propiedad.
Nombre: MessageInfo Tipo de fuente: Expresión Valor de fuente: ${in.body}
Tipo de datos: java.lang.String
Paso 9: Ahora agregue una respuesta de solicitud y un receptor con el adaptador HTTP.
En la pestaña Conexión:
Dirección: https://<
Autenticación: Básica
Nombre de credencial: (Implemente las credenciales de registro de CPI con un nombre particular en el Material de seguridad en la sección de monitoreo como tipo de credenciales de usuario). Indique ese nombre particular en el campo Nombre de credencial.
Paso 10: agregue un modificador de contenido para establecer el tipo de contenido en el encabezado
Nombre: Tipo de contenido Tipo de fuente: Valor de fuente constante: aplicación/xml
Y configure el cuerpo en el modificador de contexto como se indica a continuación.
${propiedad.MessageInfo}
Paso 11: Defina una llamada de proceso en el proceso de integración principal como se muestra a continuación y seleccione el proceso de integración local creado.
Paso 12: Luego agregue Gather y configure los siguientes campos como se muestra a continuación:
Formato entrante: texto sin formato
Algoritmo de agregación: concatenar
Paso 13: Ahora agregue un modificador XML y verifique la declaración de eliminación xml.
Paso 14: agregue un modificador de contenido para establecer el tipo de contenido en el encabezado
Nombre: Tipo de contenido Tipo de fuente: Valor de fuente constante: aplicación/xml
Y configure el cuerpo en el modificador de contexto como se indica a continuación.
${en.cuerpo}
Paso 15: agregue un elemento de asignación de mensajes y cree una asignación como se muestra a continuación.
Después de crear la asignación, cargue los archivos XSD de origen y de destino con los códigos xsd que se indican a continuación.
Fuente XSD:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MessageProcessingLogs">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" name="MessageProcessingLog">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" nillable="false" maxOccurs="unbounded" name="MessageGuid" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="CorrelationId" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="ApplicationMessageId" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="ApplicationMessageType" xmlns=""/>
<xs:element type="xs:dateTime" nillable="true" minOccurs="0" maxOccurs="unbounded" name="LogStart" xmlns=""/>
<xs:element type="xs:dateTime" nillable="true" minOccurs="0" maxOccurs="unbounded" name="LogEnd" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="Sender" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="Receiver" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="IntegrationFlowName" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="Status" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="AlternateWebLink" xmlns=""/>
<xs:element nillable="false" maxOccurs="unbounded" name="IntegrationArtifact">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="Id" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="Name" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="Type" xmlns=""/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="LogLevel" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="CustomStatus" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="TransactionId" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="ErrorDetails" xmlns=""/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Objetivo XSD:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MessageProcessingLogs">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" name="MessageProcessingLog">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="IntegrationFlowName" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="PackageName" xmlns=""/>
<xs:element type="xs:string" nillable="false" maxOccurs="unbounded" name="MessageGuid" xmlns=""/>
<xs:element type="xs:dateTime" nillable="true" minOccurs="0" maxOccurs="unbounded" name="LogStart" xmlns=""/>
<xs:element type="xs:dateTime" nillable="true" minOccurs="0" maxOccurs="unbounded" name="LogEnd" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="Status" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="LogLevel" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="TransactionId" xmlns=""/>
<xs:element type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded" name="ErrorDetails" xmlns=""/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Después de cargar los archivos XSD, realice el mapeo uno a uno con todos los elementos en el XSD de destino.
Paso 16: Después de realizar el mapeo del mensaje, agregue el convertidor xml a csv con
ruta al elemento fuente en el campo xsd: /MessageProcessingLogs/MessageProcessingLog
y verifique el nombre del campo de inclusión como encabezado.
Después del convertidor de xml a csv, guarde e implemente el iflow y obtenga los puntos finales del monitoreo de mensajes.
Después de implementar Iflow, pruebe el iflow en cartero como se muestra a continuación con el cuerpo debajo.
Después de darle el cuerpo haga clic en el icono de enviar.
Después de hacer clic en enviar, guarde la respuesta en el archivo. Entonces, podemos ver el archivo en formato csv.
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