madrid gug - grails plugins: exporter

15
Plugins de Grails: Exporter Iván López Martín

Upload: ivan-lopez

Post on 02-Jul-2015

689 views

Category:

Technology


3 download

DESCRIPTION

Presentation about the Grails Exporter plugin at Madrid Groovy Users Group. Jun 26, 2012

TRANSCRIPT

Plugins de Grails: ExporterIván López Martín

¿Quién soy?

Iván López Martín @ilopmar

Usando Grails/Groovy desde hace más de 2 años

Creador de www.bokzuy.com

Geek, Padre, Desarrollador, Linuxero, Pro-Software libre

Trabajo en Kaleidos

http://lopezivan.blogspot.com

Plugin Exporter

http://grails.org/plugin/export

Permite exportar datos desde una aplicación grails a los formatos: CSV, Excel, ODS, RTF, PDF y XML

Sencillo de utilizar y muy flexible

Distintas opciones en función del formato de salida elegido

Proporciona un servicio exportService que se encarga de la generación del archivo final

Parámetros

El servicio de exportación recibe:

• Output stream

• Lista de objetos a exportar

• Campos

• Etiquetas

• Formatters

• Parámetros

Ejemploclass User {    String name    Date birthDate    Company company}

Ejemploclass User {    String name    Date birthDate    Company company}

List fields = ["name", "company.name", "birthDate"]

Ejemploclass User {    String name    Date birthDate    Company company}

List fields = ["name", "company.name", "birthDate"]Map labels = ["name":"Nombre de usuario", "company.name":"Compañía", "birthDate":"Fecha de nacimiento"]

Ejemploclass User {    String name    Date birthDate    Company company}

List fields = ["name", "company.name", "birthDate"]Map labels = ["name":"Nombre de usuario", "company.name":"Compañía", "birthDate":"Fecha de nacimiento"]Map formatters = [birthDate:dateToString]

def dateToString = { domain, value ­>    return Utils.stringDate(value)}

Ejemploclass User {    String name    Date birthDate    Company company}

List fields = ["name", "company.name", "birthDate"]Map labels = ["name":"Nombre de usuario", "company.name":"Compañía", "birthDate":"Fecha de nacimiento"]Map formatters = [birthDate:stringDate]

Map parameters = ["encoding":"UTF­8"]httpResponse.contentType = "application/vnd.oasis.opendocument.spreadsheet"httpResponse.setHeader("Content­disposition", "attachment; filename=usuarios.ods")

Ejemploclass User {    String name    Date birthDate    Company company}

List fields = ["name", "company.name", "birthDate"]Map labels = ["name":"Nombre de usuario", "company.name":"Compañía", "birthDate":"Fecha de nacimiento"]Map formatters = [birthDate:stringDate]

Map parameters = ["encoding":"UTF­8"]httpResponse.contentType = "application/vnd.oasis.opendocument.spreadsheet"httpResponse.setHeader("Content­disposition", "attachment; filename=usuarios.ods")

def objects = User.list()

exportService.export('ods', httpResponse.outputStream, objects, fields, labels, formatters, parameters)

Pero no termina ahí

Se puede utilizar para exportar datos generados y calculados que no están persistidos con una clase de dominio

La lista “objects” tendrá mapas con las propiedades que se desean exportar

De esta forma conseguimos generar informes adhoc para el usuario

Ejemplo

def rnd = new Random()

def list = []10.times {    def map = [:]    map.p1 = UUID.randomUUID().toString().replaceAll('­', '')    map.p2 = rnd.nextInt(10)    map.p3 = new Date() + rnd.nextInt(50) + 10        list << map}

Ejemplo

def rnd = new Random()

def list = []10.times {    def map = [:]    map.p1 = UUID.randomUUID().toString().replaceAll('­', '')    map.p2 = rnd.nextInt(10)    map.p3 = new Date() + rnd.nextInt(50) + 10        list << map}

println list

­­­­[[p1:3475045bb4794778a441238f8b1b700c, p2:3, p3:Tue Jul 31 16:03:07 CEST 2012], [p1:cc2af0e290774667bd7b71e3ac8d8c6f, p2:4, p3:Sun Aug 19 16:03:07 CEST 2012], [p1:91e81467dd9146e5ac32e19e739d8515, p2:1, p3:Mon Jul 16 16:03:07 CEST 2012], ...]

Ejemplo

List fields = ["p2", "p1"]

Map labels = [p2:"Prop. 2"C, p1:"Prop. 1"]

Map parameters = ["encoding":"UTF­8"]httpResponse.contentType = "application/vnd.ms­excel"httpResponse.setHeader("Content­disposition", "attachment; filename=listado.xls")

exportService.export('excel', httpResponse.outputStream, list, fields, labels, [:], parameters)

¿Preguntas?

¿?