3
respostas

Parâmetro MAP List para Jaspersoft

Estou com uma dúvida de como ler um parâmetro do tipo MAP enviado para um relatório.

Exemplo: estou enviando um parâmetro chamado "documentos". Se eu mandar dar um print dele no relatório sai o JSON. Queria transforma isso em uma lista ou criar um texto separando cada item por vírgula.

Segue como ele chega no reporta mandando imprimir direto o parâmetro:

{0=docA, 1=docB}

Minha dúvida é como manipular isso lá. Ler esse dado e criar um FOREACH para imprimir da seguinte forma em uma variável:

docA, docB

3 respostas

Consegui utilizando a conversão para toString e dando um replace nos colchetes gerados: $P{documentos_map}.values().toString().replace("[", "").replace("]"

Resultado de saída: a string "docA, docB".

Alguém sabe como parametrizar para quando gerar a string poder escolher o caracter da quebra? Em vez de vírgula poder escolher outro.

Oi Alan, tudo bem?

Nesse caso o que você pode fazer é criar um novo parâmetro que armazene o caractere desejado e usá-lo no lugar da vírgula.

  • Você pode criar novo parâmetro no seu relatório para armazenar o caractere de quebra. Vou chamá-lo de "caractere_quebra". Isso possibilita escolher o caractere desejado, como uma vírgula, ponto e vírgula, espaço etc.

  • Tente modificar essa sua expressão para também substituir a vírgula pelo caractere escolhido.

Algo como:

$P{documentos_map}.values().toString().replace("[", "").replace("]", "").replace(",", $P{caractere_quebra})

Com isso, você poderá escolher dinamicamente o caractere de quebra que deseja. Basta inserir o caractere desejado ao preencher no parâmetro criado.

Espero que isso ajude a solucionar o desafio.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Bom dia.

Tenho seguinte problema: gerar uma lista com base em uma string.

Estava quebrando pela vírgula, pois a string eu mesmo gero e envio.

Entrada: {0=docA, 1=docB}

Utilizando o map, eu consigo o resultado: docA, docB

Porém, quando na entrada eu tenho uma string com vírgula como por exemplo: {0=docA, 1=docB, 3=docC,D} como isso entra como uma string, se eu quebrar utilizando o map.toString() ele quebra em 4 valores: docA, docB, docC, D (entende a vírgula o índice 3 e quebra gerando um quarto elemento.

Minha dúvida era como passar um parâmetro MAP e utilizar o mesmo dentro do report. Melhor modo que encontrei foi usando toString().

toString() transform "{0=docA, 1=docB, 3=docC,D}" em "[docA, docB, docC, D]". Com se a letra D virasse um 4 elemento. Por isso tive a ideia de ver se tinha algo no método toString que ao invés de colocar vírgula, colocasse outro caracter ficando, por exemplo, "[docA| docB| docC, D]"... dessa forma escolhendo o | não geraria o 4 elemento.