¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo utilizar un script Groovy para corregir la conversión de XML a JSON en la Integración de la Plataforma en la Nube

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 24 Vistas
0
Cargando...

Hola Expertos,

Necesito utilizar un script Groovy para superar las limitaciones del convertidor estándar de XML a JSON en la Integración de la Plataforma en la Nube.

Aquí está el formato JSON de salida que necesito obtener:

{
"PO": "test21",
"Items": [{
"Id": "000010",
"Product": "XXXXX",
"Quantity": 5,
"Discount_Percent": 0,
"Unit_Price": 0,
"Pharmaceutical": false,
}]
}

Pero esto es lo que recibí del convertidor:

"PO": "test21",
"Items": [{
"Id": "000010",
"Product": "XXXXX",
"Quantity": "5.000",
"Discount_Percent": "0.000",
"Unit_Price": "",
"Pharmaceutical": "false",
}]
}

No soy un experto en Groovy e intenté utilizar el que se proporciona en la nota de SAP para reemplazar "false" con false usando el siguiente Groovy, pero no funcionó:

import com.sap.gateway.ip.core.customdev.util.Message;

def Message processData(Message message) {
def body = message.getBody(java.lang.String) as String;
String output = body.replaceAll("\"false\"", "\$1");
message.setBody(output);
return message;
}

¿Alguien puede ayudarme con un script Groovy que funcione para mí?

Gracias por su tiempo.

Anirban

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

¡Muchas gracias, Morten, por el detallado script!

Pero perdona mi ignorancia, ya que soy completamente nuevo en groovy. Simplemente copié tu script, lo guardé con la extensión ".groovy" y lo añadí al iFlow. Sin embargo, sigo obteniendo un error genérico:

Estoy seguro de que me falta un paso fundamental en el proceso. ¿Necesito instalar algún archivo JAR o algo así?

Además, si me permites hacer una pregunta adicional sobre el script: ¿qué sucede si quiero limpiar otro elemento a nivel de raíz, por ejemplo, si "PO" es un número entero, debería abordarlo de la siguiente manera?

object.root.each { item ->item.PO = item.Quantity.toDouble().intValue()}

Gracias de nuevo por tu tiempo y apoyo.

Saludos,

Anirban

21.png
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Anirban

Aquí tienes un script Groovy que limpia el JSON. Lo hace sin usar expresiones regulares y solo actualiza los valores que necesitan ser actualizados.

import com.sap.gateway.ip.core.customdev.util.Message
import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def Message processData(Message message) {

    def json = message.getBody(java.lang.String)
    def jsonSlurper = new JsonSlurper()
    def object = jsonSlurper.parseText(json)

    object.Items.each { item -> 
        // Convertir Pharmaceutical a un valor booleano
        item.Pharmaceutical = (item.Pharmaceutical == 'false' ? false : true)
        // Convertir Quantity a un entero
        item.Quantity = item.Quantity.toDouble().intValue()
        // Convertir Discount_Percent a un entero
        item.Discount_Percent = item.Discount_Percent.toDouble().intValue()
        // Si Unit_Price está vacío, reemplazar con cero, de lo contrario convertir a double
        if (item.Unit_Price == '') {
            item.Unit_Price = 0
        } else {
            item.Unit_Price = item.Unit_Price.toDouble()
        }
    }

    message.setBody(JsonOutput.toJson(object))
    return message

}
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Morten,

El Precio_Unitario tendrá un valor decimal, pero el Descuento_Porcentaje y la Cantidad son enteros. Disculpa por la confusión.

Saludos,

Anirban

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Anirban

No está del todo claro cómo debería funcionar esta conversión. ¿Puede Unit_Price contener un precio, o siempre está vacío y debería reemplazarse por cero? ¿Y Quantity y Discount_Percent pueden tener decimales que deben conservarse? ¿O prefieres desechar todo después del separador decimal?

Saludos,

Morten

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?