Error al crear conector Script para llenar tabla en una plantilla docx

1
0
-1

Hola comunidad,

Estoy intentando exportar datos en una plantilla que tiene tablas para llenar, pero con el conector de office "Insert data in a .docx/.odt template" no pude realizarlo, asi que estoy intentando generarlo con un conector de script siguiendo la documentación https://github.com/opensagres/xdocreport/wiki/DocxReportingJavaMainListF... pero me genera el siguiente error: "java.io.IOException: InputStream cannot be null."

El error ocurre en estas linea:

def campo4 = "http:/localhost:3849/bonita/portal/" + plantillaPrueba.url
InputStream input = XDocReportRegistry.class.getResourceAsStream(campo4)
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(input, TemplateEngineKind.Velocity);

Al parecer la variable input esta quedando vacia. la plantilla la tengo en una variable de proceso tipo documento.

A continuacion el codigo completo:

//package fr.opensagres.xdocreport.samples.docxandvelocity

import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.util.ArrayList
import java.util.List
import com.mypackage.logger
import groovy.json.*

import fr.opensagres.xdocreport.core.XDocReportException
import fr.opensagres.xdocreport.document.IXDocReport
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry
//import fr.opensagres.xdocreport.samples.odtandvelocity.model.Developer
//import fr.opensagres.xdocreport.samples.odtandvelocity.model.Project
import fr.opensagres.xdocreport.template.IContext
import fr.opensagres.xdocreport.template.TemplateEngineKind
import fr.opensagres.xdocreport.template.formatter.FieldsMetadata

def idCase = processInstanceId
logger.w("Inicio - crearPlantillaCotizacion", (idCase.toString() + "-Gestionar Cotizaciones"))

public class Role {

private final String name;

public Role(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

logger.w("class Role definida", (idCase.toString() + "-Gestionar Cotizaciones"))

public class Developer {

private final String name;
private final String lastName;
private final String mail;
private final List roles;

public Developer(String name, String lastName, String mail) {
this.name = name;
this.lastName = lastName;
this.mail = mail;
this.roles = new ArrayList();
}

public String getName() {
return name;
}

public String getLastName() {
return lastName;
}

public String getMail() {
return mail;
}

public Developer addRole(Role role) {
roles.add(role);
return this;
}

public List getRoles() {
return roles;
}

}

logger.w("class Developer definida", (idCase.toString() + "-Gestionar Cotizaciones"))

public class Project {

private final String name;
private String url;

public Project(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setURL(String url) {
this.url = url;
}

public String getURL() {
return url;
}
}

logger.w("class Project definida", (idCase.toString() + "-Gestionar Cotizaciones"))

// 1) Load Docx file by filling Velocity template engine and cache
// it to the registry

def campo1 = plantillaPrueba.name
logger.w("campo1: " + campo1, (idCase.toString() + "-Gestionar Cotizaciones"))

def campo2 = plantillaPrueba.contentFileName
logger.w("campo2: " + campo2, (idCase.toString() + "-Gestionar Cotizaciones"))

def campo3 = plantillaPrueba.url
logger.w("campo3: " + campo3, (idCase.toString() + "-Gestionar Cotizaciones"))

def campo4 = "http:/localhost:3849/bonita/portal/" + plantillaPrueba.url
logger.w("campo4: " + campo4, (idCase.toString() + "-Gestionar Cotizaciones"))

//def campo5 = "D:\\BonitaCommunity-2021.1\\DocxProjectWithVelocityList1.docx"
//logger.w("campo5: " + campo5, (idCase.toString() + "-Gestionar Cotizaciones"))

//File documento = new File("DocxProjectWithVelocityList1.docx")
//logger.w("documento: " + documento, (idCase.toString() + "-Gestionar Cotizaciones"))

InputStream input = XDocReportRegistry.class.getResourceAsStream(campo4)
logger.w("Paso1: input: " + input, (idCase.toString() + "-Gestionar Cotizaciones"))

IXDocReport report = XDocReportRegistry.getRegistry().loadReport(input, TemplateEngineKind.Velocity);
logger.w("Paso2", (idCase.toString() + "-Gestionar Cotizaciones"))

// 2) Create fields metadata to manage lazy loop (#foreach velocity) for table row.
FieldsMetadata metadata = report.createFieldsMetadata();
logger.w("Paso3", (idCase.toString() + "-Gestionar Cotizaciones"))

// NEW API
metadata.load( "developers", Developer.class, true);
logger.w("Paso4", (idCase.toString() + "-Gestionar Cotizaciones"))

// 3) Create context Java model
IContext context = report.createContext();
Project project = new Project( "XDocReport");
context.put( "proyecto", project);
logger.w("Paso5", (idCase.toString() + "-Gestionar Cotizaciones"))

List developers = new ArrayList();
developers.add( new Developer( "ZERR", "Angelo", "angelo.zerr@gmail.com" ) );
developers.add( new Developer( "Leclercq", "Pascal", "pascal.leclercq@gmail.com" ) );
context.put( "developers", developers );
logger.w("Paso6", (idCase.toString() + "-Gestionar Cotizaciones"))

// 4) Generate report by merging Java model with the Docx
OutputStream out = new FileOutputStream( new File( "D:/BonitaCommunity-2021.1/DocxProjectWithVelocityList_Out.docx" ) );
report.process( context, out );
logger.w("Paso7", (idCase.toString() + "-Gestionar Cotizaciones"))

logger.w("FIn - crearPlantillaCotizacion", (idCase.toString() + "-Gestionar Cotizaciones"))

return "OK"

Comments

Submitted by delphine.coille on Thu, 03/18/2021 - 15:51

Hola,

Como tuviste respuestas en la pregunta en inglés, vamos a borrar esta pregunta para evitar duplicados y confusión. Gracias por tu comprensión.

Delphine

Submitted by ing.armandobrit... on Thu, 03/18/2021 - 22:16

Hola,

Muchas gracias, no hay problema en borrarla.

Submitted by ing.armandobrit... on Thu, 03/18/2021 - 22:16

Hola,

Muchas gracias, no hay problema en borrarla.

No answers yet.
Notifications