Plugins de Grails: Exporter
Ivá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
Ejemplo
  class User {
      String name
      Date birthDate
      Company company
  }
Ejemplo
  class User {
      String name
      Date birthDate
      Company company
  }

  List fields = ["name", "company.name", "birthDate"]
Ejemplo
  class 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"]
Ejemplo
  class 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)
  }
Ejemplo
  class 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")
Ejemplo
  class 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?




              ¿?

Madrid GUG - Grails Plugins: Exporter