
La utilización de recursos es un aspecto importante de SAP IPAAS (Integration Suite). Dado que necesitamos trabajar con una cantidad finita de velocidad de procesamiento y memoria, debemos tener esto en cuenta al desarrollar una nueva interfaz.
Aquí presentaré una forma alternativa de realizar una tarea simple de carga de datos maestros en S/4HANA Cloud mediante la combinación de CI y OC. Entonces, en lugar de construir la solución completa en CI, estamos distribuyendo la carga a diferentes productos de la suite de integración, para una distribución óptima de la carga. Además, dado que estamos combinando las capacidades de diferentes productos, puede requerir menos esfuerzo crear una solución para la declaración de un problema complejo.
Como vemos arriba, distribuimos la tarea entre CI y OC, y estamos utilizando la capacidad adecuada de los productos para lograr la solución.
Antes del desarrollo: suponga que las siguientes tareas de condición previa se completan en SAP S/4HANA Cloud:
Toda la operación POST en las API de SAP S/4HANA Cloud está protegida por X-CSRF-Token. Necesitamos crear un nuevo recurso para obtener el token. Cree un nuevo punto final /token.
La idea es obtener el token y la cookie en el cuerpo de la respuesta. Para eso, necesitamos crear un gancho de publicación para reemplazar la respuesta $metadata con un cuerpo personalizado.
let token = response_headers['x-csrf-token'];
let cookie = response_headers['set-cookie'];
done({
response_body: {
'token': token,
'cookie': cookie[1]
},
continue: true
});
Ahora, si probamos esta API /token, obtenemos la siguiente respuesta.
Ahora que hemos creado el punto final para obtener el token CSRF, simplemente necesitamos llamarlo para obtener los tokens. Estos tokens se transferirán a la API A_BusinessPartner real para una publicación exitosa. Podemos escribir esta lógica en el pre-enganche.
const https = require('https');
let u = '?;
let o = '?';
let e="?";
var options = {
hostname: 'api.openconnectors.eu10.ext.hana.ondemand.com',
port: 443,
path: '/elements/api-v2/token',
method: 'GET',
headers: {
"Authorization": `User ${u}, Organization ${o}, Element ${e}`
}
};
//Get SFDC connector from CE and return the results
https.get(options, (res) => {
let rawData="";
res.on('data', (chunk) => rawData += chunk);
res.on('end', () => {
console.log(rawData);
try {
let parsedData = JSON.parse(rawData);
let v = request_vendor_headers;
v['x-csrf-Token'] = parsedData.token;
v['cookie'] = parsedData.cookie;
done({ "request_vendor_headers": v });
} catch (e) {
done({ "response_error": e.message });
}
});
res.on('error', (e) => {
done({ "response_body": e.message });
});
});
reemplazar ? con credenciales reales.
Ahora hemos completado la tarea de PUBLICAR un nuevo BUPA en SAP S/4HANA Cloud. Ahora necesitamos activar masivamente en esta API.
A continuación, debemos crear la fórmula que se activará una vez que todos los BUPA se publiquen en SAP S/4HANA Cloud. Dentro de esta fórmula, verificaremos si hay algún error en la publicación; en caso afirmativo, se enviará un correo electrónico a la persona designada.
Siguiendo el código para comprobar si hay algún error.
let d = steps.GetStatus.response.body.length;
if(d > 0){
return done(true);
}
else{
return done(false);
}
Código siguiente para formatear el cuerpo del correo electrónico y enviar el correo electrónico.
let m = '<table border="1" style="border-collapse: collapse;" cellpadding="5">';
let d = steps.GetStatus.response.body;
d.forEach((row) => {
m = m + '<tr><td>Line</td><td>' + row.rowNum + '</td></tr>';
m = m + '<tr><td>Error</td><td>' + row.status + '</td></tr>';
m = m + '<tr><td>File Row</td><td>' + row.response + '</td></tr>';
})
m = m + '</table>';
notify.email('test@gmail.com',
'BUPA Replication',
m);
done(true);
El IFLOW ahora va a ser muy simple. En aras de la simplicidad, no hemos incluido el adaptador SFTP. Al día de escribir este blog, el adaptador receptor de conector abierto no se puede convertir a multipart/form-data – que es el formato esperado de la API /bulk, por lo que se está utilizando el adaptador HTTP.
Lo importante a tener en cuenta es que, si bien llamamos al punto final /bulk, también debemos especificar la URL a la que se llamará al completar la tarea masiva. Esta URL es el punto final de la API de la fórmula que creamos anteriormente.
Encabezado del mensaje:
Tipo de contenido | multiparte/datos de formulario; límite=—-abc |
Autorización |
¿Usuario?, ¿Organización?, ¿Elemento? (credencial del elemento S/4HANA Cloud) |
Elements-Async-Callback-URL | https://api.openconnectors.eu10.ext.hana.ondemand.com/elements/api-v2/formulas/instances/41574/executions |
Ejemplo de carga útil:
[
{ "LastName": "Bhowmick", //will succeed
"CorrespondenceLanguage": "EN",
"FirstName": "Deepankar",
"BusinessPartnerGrouping": "BPEE",
"BusinessPartnerCategory": "1"
},
{
"LastName": "LastThree", //will error
"CorrespondenceLanguage": "EN",
"FirstName": "FirstThree",
"BusinessPartnerGrouping": "BPEE",
"BusinessPartnerCategory": 9
},
{
"LastName": "LastThree", //will error
"CorrespondenceLanguage": "EN",
"FirstName": "FirstThree",
"BusinessPartnerGrouping": "BPEE",
"BusinessPartnerCategory": 9
}
]
Script para preparar manualmente el formato multipart/form-data.
import com.sap.gateway.ip.core.customdev.util.Message
import java.util.HashMap
import com.sap.gateway.ip.core.customdev.util.Message
import org.apache.camel.impl.DefaultAttachment
import javax.mail.util.ByteArrayDataSource
def Message processData(Message message) {
String msg = """------abc\r\n""" +
"""Content-Disposition: form-data; name="file"; filename="hello.json"\r\n""" +
"""Content-Type: application/json\r\n\r\n""" +
"""${message.getBody(java.lang.String).replace('\n','\r\n')}\r\n""" +
"""------abc--"""
message.setBody(msg)
return message
}
Adaptador de receptor HTTP.
Después de ejecutar el IFLOW, deberíamos tener un BUPA creado para «Deepankar Bhowmick». Los 2 restantes deberían aparecer en el correo electrónico con correlación.
BUPA creado con éxito.
Notificación de error por correo electrónico con correlación (qué registro de archivo tiene qué error).
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