Hola JDEFriends,
En esta ocasión quería mostraros cómo he conseguido realizar de manera simple transformar un json de orchestrator con artículos repetidos, en otro como salida sin referencias repetidas.
Tenemos el siguiente json input:
Vemos cómo tenemos varias referencias repetidas. Vamos a usar la función "uniq" del módulo json en JRuby en el Manipulate Output de nuestro orchestrator:
require 'json' def main(orchAttr, input) jsonIn = JSON.parse(input) #Add code here to manipulate JSON output items = jsonIn['ITEMS'] unique_items = items.uniq{|item| item['ShortItemNo']} jsonIn['ITEMS'] = unique_items jsonOut = JSON.generate(jsonIn) return jsonOut end
Obtenemos todos los nodos de ITEMS y aplicamos la función uniq que itera sobre todo los items y nos devuelve el json con los items únicos en función del atributo 'ShortItemNo'
Buen código!
muy bueno, yo tengo un problema parecido a ver si lo puedo solucionar así.
ResponderEliminarRealizo una conexión a una base de datos externa con una conexión/conector y solo debo obtener el mayor Nro de un Select
def selectStmt = "SELECT MAX (ALHONB) FROM BLXXXX WHERE C0ST= 'F';
esto no me trae nada , pero no me da error en la ORCH.
def selectStmt = "SELECT ALHONB FROM BLXXXX WHERE C0ST= 'F' ORDER BY ALHONB DESC";
Me devuelve el JSON con muchos valores ordenados , pero solo debo tomar el mayor
Pues me extraña bastante que en la primera no te devuelva el máximo, ¿has probado por base de datos la salida? ¿has comprobado poniendo una traza en el groovy/jruby del script? ¿cómo se lo estás asignando al parámetro de salida? pone un alias "MAX(ALHONB) AS ALHONB". De todas formas, con la segunda opción también podrías poner un "LIMIT 1" al final para que te devuelva solo el primer registro. Saludos.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarBuenas, gracias por la respuesta
ResponderEliminarhe cambiado la salida , xq estaba como "Rows" entonces la sentencia MAX me intentaba hacerlo en un array entiendo .
//use the helper to set the records from the result set to the array variable
returnMap = orchAttr.mapResultSetToDataSet(resultSet,"rows");
returnMap = orchAttr.mapResultSetToDataSet(resultSet,"ALHONB"); la cambie por esta y le quité los valores de salida a la ORCH
Me devuelve solo el mayor --> 682217
"ConnectorRequest1": {
"ALHONB": [
{
"00001": 682217
}
]
},
"jde__status": "SUCCESS",
"jde__startTimestamp": "2024-07-24T07:59:17.329+0200",
"jde__endTimestamp": "2024-07-24T07:59:17.748+0200",
"jde__serverExecutionSeconds": 0.419
}
gracias por la respuesta, en JDE tengo experiencia , en estas cuestiones de integraciones todavía necesito mas practica !