Avalados por :

Agregando Delimitador a Archivo Plano en iFlow con Script Groovy - Ejemplo y Código

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 0 Vistas
0
Loading...

Hola Comunidad,

El problema aquí es que recibo un archivo plano del remitente sin ningún delimitador. Me gustaría agregar un delimitador en el iflow antes de pasar al convertidor de csv a xml. Soy libre de agregar cualquier delimitador, elegí la coma ',' como delimitador.

Necesitaría ayuda con un script groovy para agregar el delimitador al archivo plano. Los lugares donde se debe agregar el delimitador serán valores codificados en duro, por ahora lo estoy agregando en una variable en la propiedad de intercambio.

¿Podrías ayudarme con el código groovy para cumplir con este requisito?

Un ejemplo:

Archivo plano del remitente:

00000000000401ZJH00000400000005000001000004760 SATZ BEZUEGE COVERINGS SET ZF0760 190 ZA D 101

13 -- Los primeros 13 caracteres son el número de material. El valor es 0000000000040

3 -- Los siguientes 3 caracteres son el código del modelo de automóvil. El valor es 1ZJ

1 -- El siguiente 1 carácter es el código de familia. El valor es H

9 -- Los siguientes 9 caracteres son el precio. El valor aquí es 000004000

y así sucesivamente...

Gracias.

Saludos, Avinash

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

4 Respuestas

0
Loading...

Hola Morten,

Hay espacios entre los campos en el archivo en tiempo real. Por ejemplo.

00000000000401ZJH00000400000005000001000004760 SATZ BEZUEGE COVERINGS SET ZF0760 190 ZA D 101 0000000000 ACCESSORIES 202111010000000066NN0001F 3 3110F0

Modifiqué tu código, que está pegado a continuación:

Cuando ejecuto el flujo de integración, recibo un error como 'Detalles del error

javax.script.ScriptException: java.lang.Exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 300@ línea 20 en addDelimiter.groovy, causa: java.lang.StringIndexOutOfBoundsException: String index out of range: 300'
¿Puedes sugerir una solución?

import com.sap.gateway.ip.core.customdev.util.Message
def Message addDelimiter(Message message) {
def columnLengths = [13, 3, 1, 9, 7, 4, 9, 1, 20, 18, 4, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 2, 13, 10, 13, 50, 30, 30, 8, 8, 4, 4, 10, 1, 1, 4, 1, 1, 7]
def delimiter = '+'
def builder = new StringBuilder()
def payload = message.getBody(String)

payload.eachLine { line, lineNum ->
// Agregar un separador de línea antes de todas las líneas excepto la primera
if (lineNum !=
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Loading...

Hola Avinash

Aquí tienes un script Groovy que lee cada línea del archivo plano, agrega el delimitador y actualiza la carga del mensaje:

import com.sap.gateway.ip.core.customdev.util.Messagedef Message processData(Message message) {    def columnLengths = [13, 3, 1, 9]    def delimiter = '.'    def builder = new StringBuilder()    def payload = message.getBody(String)        payload.eachLine { line, lineNum ->         // Agregar un separador de líneas antes de todas las líneas excepto la primera        if (lineNum != 0) {            builder.append(System.lineSeparator())        }        def offset = 0        columnLengths.eachWithIndex { len, i ->             // Agregar el delimitador antes de todos los valores excepto el primero            if (i != 0) {                builder.append(delimiter)            }            builder.append(line.substring(offset, offset + len))            offset += len        }    }    message.setBody(builder.toString())    return message}

Para agregar más columnas, actualiza la lista de columnLengths. El código asume que no hay espacios entre las columnas.

Avísame cómo funciona.

Saludos,

Morten

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

Sí, Morten, tiene varias líneas.

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

Hola Avinash

¿Estoy asumiendo que el archivo plano tiene múltiples líneas?

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?