Mostrando entradas con la etiqueta grails. Mostrar todas las entradas
Mostrando entradas con la etiqueta grails. Mostrar todas las entradas

sábado, 28 de febrero de 2009

Timestamps en Grails

Para clases del dominio, necesitamos a veces utilizar fechas de creación y modificación. En Rails ya vienen los timestamps por defecto en las migraciones. Grails, para no quedarse atrás lo hace bastante sencillo.
Para cualquier clase del dominio que quieras agregarle los timestamps de creación y modificación debes usar los siguientes atributos:

class Usuario{
String nombre
String documento
//demas atributos...
Date dateCreated //fecha de creación
Date lastUpdated //ultima actualización
}

Recuerda que para que no te cree el campo al generar las vistas, debes poner esto en las constraints:


static constraints ={
lastUpdated(display:false)
dateCreated(display:false)
}


Espero que sirva!

lunes, 8 de septiembre de 2008

Grails - Objetos Command

Hay veces que necesitamos mapear propiedades para actualizar una clase del dominio que no necesariamente se corresponden con el mismo, o tenemos interacciones que ni siquiera utilizan una clase. 
Incluso en estos casos nos facilita la tarea las validaciones y data bindings de grails. Para utilizar estas facilidades debemos recurrir a las clases Command.
En el siguiente ejemplo usaremos un objeto Command para cambiar un password en el ámbito de un controlador de Usuario.
El primer paso es crear una clase PasswordCommand (podemos incluso crearla dentro del mismo archivo en donde tenemos nuestro controlador).

class PasswordCommand {
    String password_actual
    String password_nuevo
    String password_confirmacion    

static constraints = {
password_nuevo(blank:false, minSize:6)
}
}

Esa clase es como cualquiera del dominio, podemos definir las costraints que queramos. Luego sólo falta utilizarla en la acción que necesitemos, en este caso en la acción cambiarPassword:

class UsuarioController{
def cambiarPassword = {PasswordCommand cmd ->
if(!cmd.hasErrors()){
//procesar
}
}
}


Al definir así nuestra acción, Grails creará una instancia de PasswordCommand, haciendo binding de las propiedades que vienen en el request.

Como verán no es un trabajo muy complicado y nos ahorra el trabajo de validar "manualmente" esos parámetros que quedan fuera del dominio.

viernes, 1 de agosto de 2008

Exportar a Excel en Grails

En mi último proyecto en Grails, el cliente quería exportar a excel muchas de las consultas que proporcionaba el programa.
Como no encontré mucha información por ahí, les cuento lo que se me ocurrió a mi.
Antes que nada, utilicé JExcelApi para generar los archivos excel. Recuerden que en Grails podemos utilizar cualquier librería Java existente.

Primer paso, colocar el jar (jxl.jar en nuestro caso) de la librería en la carpeta "lib" de nuestro proyecto.
Ya que tenía varios métodos para exportar, decidí crear un servicio en grails que encapsulara a los mismos . Lo único que hay que hacer es agregar los imports correspondientes a las clases que utilicemos para nuestro excel.
import jxl.*;
import jxl.write.*;
Lo que nos queda es implementar nuestros métodos usando JExcelApi (ejemplos en otra ocasión) y llamar al servicio desde nuestro controlador.

Para agregar el servicio a nuestro controlador sólo debemos definir una variable del mismo nombre y será "inyectada" automáticamente a través de Spring. En mi caso el servicio se llamaba Report, entonces

def reportService
Hay que tener en cuenta que a los métodos de reportes les pasé como parámetro el response, así escribimos en el mismo y al cliente le aparecerá el diálogo para bajar un archivo XLS.

en el controlador:
response.setHeader("Content-disposition",
"attachment; filename=Clientes.xls")
response.contentType = "application/vnd.ms-excel"
//"clientes" es una lista de objetos del dominio
reportService.exportClientes(response.outputStream, clientes)

en el reporte:
def workbook = Workbook.createWorkbook(outputStream);
Y eso es todo. Tal vez más adelante ponga algún ejemplo de como utilizar JXL, pero es trivial.