madrid gug - grails plugins: exporter
DESCRIPTION
Presentation about the Grails Exporter plugin at Madrid Groovy Users Group. Jun 26, 2012TRANSCRIPT
¿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}
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":"UTF8"]httpResponse.contentType = "application/vnd.oasis.opendocument.spreadsheet"httpResponse.setHeader("Contentdisposition", "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":"UTF8"]httpResponse.contentType = "application/vnd.oasis.opendocument.spreadsheet"httpResponse.setHeader("Contentdisposition", "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":"UTF8"]httpResponse.contentType = "application/vnd.msexcel"httpResponse.setHeader("Contentdisposition", "attachment; filename=listado.xls")
exportService.export('excel', httpResponse.outputStream, list, fields, labels, [:], parameters)