¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como usar um script Groovy para corrigir a conversão de XML para JSON na Integração da Plataforma na Nuvem

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

Olá Especialistas,

Preciso usar um script Groovy para superar as limitações do conversor padrão de XML para JSON na Integração da Plataforma na Nuvem.

Aqui está o formato JSON de saída que preciso obter:

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

Mas isso é o que recebi do conversor:

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

Não sou especialista em Groovy e tentei usar o fornecido pela nota da SAP para substituir "false" por false usando o seguinte Groovy, mas não funcionou:

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;
}

Alguém pode me ajudar com um script Groovy que funcione para mim?

Obrigado pelo seu tempo.

Anirban

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

4 Respuestas

0
Cargando...

Obrigado, Morten, pelo script detalhado!

Mas peço desculpa pela minha ignorância, pois sou completamente novo em groovy. Simplesmente copiei seu script, salvei com a extensão ".groovy" e adicionei ao iFlow. No entanto, continuo recebendo um erro genérico:

Tenho certeza de que estou perdendo um passo fundamental no processo. Preciso instalar algum arquivo JAR ou algo assim?

Além disso, se me permite fazer uma pergunta adicional sobre o script: o que acontece se eu quiser limpar outro elemento no nível raiz, por exemplo, se "PO" for um número inteiro, devo abordá-lo da seguinte forma?

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

Obrigado novamente pelo seu tempo e apoio.

Cumprimentos,

Anirban

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

Olá Anirban

Aqui está um script Groovy que limpa o JSON. Ele faz isso sem usar expressões regulares e apenas atualiza os valores que precisam ser atualizados.

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 -> 
        // Converter Pharmaceutical para um valor booleano
        item.Pharmaceutical = (item.Pharmaceutical == 'false' ? false : true)
        // Converter Quantity para um inteiro
        item.Quantity = item.Quantity.toDouble().intValue()
        // Converter Discount_Percent para um inteiro
        item.Discount_Percent = item.Discount_Percent.toDouble().intValue()
        // Se Unit_Price estiver vazio, substituir por zero, caso contrário converter para 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...

Olá Morten,

O Preço_Unitário terá um valor decimal, mas o Desconto_Porcentagem e a Quantidade são inteiros. Desculpe pela confusão.

Saudações,

Anirban

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

Olá Anirban

Não está totalmente claro como essa conversão deve funcionar. Pode Unit_Price conter um preço, ou sempre está vazio e deve ser substituído por zero? E Quantity e Discount_Percent podem ter decimais que devem ser mantidos? Ou prefere descartar tudo após o separador decimal?

Saudações,

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?