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

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/DocxReportingJavaMainListFieldInTable 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<Role> roles;
        
        public Developer(String name, String lastName, String mail) {
            this.name = name;
            this.lastName = lastName;
            this.mail = mail;
            this.roles = new ArrayList<Role>();
        }
    
        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<Role> 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<Developer> developers = new ArrayList<Developer>();
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"

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

Hola,

Muchas gracias, no hay problema en borrarla.

Hola,

Muchas gracias, no hay problema en borrarla.