Avalados por :

Adicionando Delimitador a Arquivo Plano no iFlow com Script Groovy - Exemplo e Código

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

Olá Comunidade,

O problema aqui é que estou recebendo um arquivo plano do remetente sem nenhum delimitador. Gostaria de adicionar um delimitador no iflow antes de passar para o conversor de csv para xml. Estou livre para adicionar qualquer delimitador, escolhi a vírgula ',' como delimitador.

Preciso de ajuda com um script groovy para adicionar o delimitador ao arquivo plano. Os locais onde o delimitador deve ser adicionado são valores codificados diretamente, por enquanto estou adicionando em uma variável na propriedade de troca.

Você poderia me ajudar com o código groovy para atender a este requisito?

Um exemplo:

Arquivo plano do remetente:

00000000000401ZJH00000400000005000001000004760 SATZ BEZUEGE COVERINGS SET ZF0760 190 ZA D 101

13 -- Os primeiros 13 caracteres são o número do material. O valor é 0000000000040

3 -- Os próximos 3 caracteres são o código do modelo de carro. O valor é 1ZJ

1 -- O próximo 1 caractere é o código de família. O valor é H

9 -- Os próximos 9 caracteres são o preço. O valor aqui é 000004000

e assim por diante...

Obrigado.

Saudações, Avinash

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

4 Respuestas

0
Cargando...

Olá Morten,

Existem espaços entre os campos no arquivo em tempo real. Por exemplo.

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

Modifique seu código, que está colado abaixo:

Ao executar o fluxo de integração, recebo um erro como 'Detalhes do erro

javax.script.ScriptException: java.lang.Exception: java.lang.StringIndexOutOfBoundsException: String index out of range: 300@ linha 20 em addDelimiter.groovy, causa: java.lang.StringIndexOutOfBoundsException: String index out of range: 300'
Você pode sugerir uma solução?

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 ->
// Adicionar um separador de linha antes de todas as linhas exceto a primeira
if (lineNum !=
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Avinash

Aqui tens um script Groovy que lê cada linha do arquivo plano, adiciona o delimitador e atualiza o conteúdo da mensagem:

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 ->         // Adicionar um separador de linhas antes de todas as linhas exceto a primeira        if (lineNum != 0) {            builder.append(System.lineSeparator())        }        def offset = 0        columnLengths.eachWithIndex { len, i ->             // Adicionar o delimitador antes de todos os valores exceto o primeiro            if (i != 0) {                builder.append(delimiter)            }            builder.append(line.substring(offset, offset + len))            offset += len        }    }    message.setBody(builder.toString())    return message}

Para adicionar mais colunas, atualize a lista de columnLengths. O código assume que não há espaços entre as colunas.

Avise-me como funciona.

Saudações,

Morten

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

Sim, Morten, tem várias linhas.

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

Olá Avinash

Estou assumindo que o arquivo plano tem várias linhas?

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?