ADempiere: Reportes & Procesos
La ventana "Reportes y Procesos" es usada para definir los parámetros y reglas de acceso para cada reporte y proceso corriendo en el sistema. Esta ventana solamente puede ser accedida por el rol System Administrator. Los registros que se hacen en esta ventana se guardan en la tabla AD_Process y las instancias de los procesos se van registrando en la table AD_PInstance, desde aquí se puede conocer la fecha y usuario que ejecutaron el proceso además de otros datos relacionados con el mismo.
La ventana para el registro de los procesos & reportes en el sistema se encuentra ubicada en Menu » Diccionario de Aplicación » Informe y Procesos (Report & Process)
Esta ventana esta compuesta por 4 pestañas (La principal y las dependientes):
- Informe y Proceso: Donde se registra el código y nombre que identifica al reporte o al proceso en el sistema y la clase, procedimiento o flujo de trabajo que contiene las funciones manejadoras del reporte o proceso.
- Traducción de Informe y Proceso: Donde se coloca la traducción al otro idioma del nombre del proceso (el nombre que mostrara en el menu).
- Acceso a Informe y Proceso: Donde se indica el rol que tendrá acceso al reporte o proceso. Por defecto esta registrado System Administrator.
- Parámetro: Donde se definen los parámetros para el manejo de los datos en el reporte o proceso.
- Traducción de Parámetro
Reportes
Para registrar un reporte en ADempiere se deben colocar principalmente los siguientes datos:
- Código: Para que el sistema no coloque la secuencia de código por defecto para el reporte, de modo que puedas encontrarlo fácilmente.
- Nombre
- Tipo de Entidad: La entidad con que estas identificando los datos agregados al sistema por tu customizacion.
- Nivel de Acceso de Datos: Asegúrate de que este seleccionado Sistema+Empresa
- Nombre de clase: La clase manejadora de los reportes es org.compiere.report.ReportStarter
- Si estas trabajando con iReport (el cual es mi caso) entonces colocas el nombre del archivo jrxml donde diseñaste el reporte, esto es en el campo Reporte Jasper. Para evitar problemas al levantar el reporte entonces adjuntas el archivo jrxml desde la opción adjuntar que tiene la ventana, quedando de esta forma el dato en el campo Reporte Jasper:
attachment:miReporte.jrxml.
- En caso de que el reporte que estés adjuntando contenga un subreporte entonces debes adjuntar el subreporte
- Si los datos del reporte están siendo filtrados por unas variables específicas debes registrar esas variables en la pestaña parámetros. Seleccionando el nombre del campo en la base de datos y en el campo Elemento del Sistema se debe colocar el nombre igual al usado en la variable del reporte (en ireport).
- Una vez registrado el reporte se crea el menu desde el que se accederá el mismo desde el sistema.
Procesos
Un proceso en ADempiere es una clase que se ejecuta cuando el usuario pulsa un botón en la interfaz gráfica. La clase debe extender de SvrProcess la cual contiene los métodos que regulan el funcionamiento de los procesos.
public class GeneraCestaTicket extends SvrProcess { ... }
Los principales métodos son:
- protected void prepare() {} - Con éste método se captura el valor de los parámetros. Los parámetros que va a recibir el proceso se configura en la pestaña Parámetros de la ventana Reportes & Procesos.
- protected String doIt() throws Exception {} - Donde se define cómo se manejarán los datos (Se realiza la programación específica de ese proceso).
protected void postProcess(boolean success) - Cuando el sistema entra a este
método ya la transacción ha sido completada y no se puede dar vuelta atrás.
Este método es opcional, lo aplicas si quieres realizar alguna acción en caso
de que el proceso haya sido exitoso o no.
Registrando el Proceso en la DB
Los pasos para registrar un proceso en ADempiere son similares al del registro del reporte. Lo que cambia es que en el campo Nombre de Clase debes colocar la ruta donde está la clase en la que codificaste el proceso, Ejemplo:
org.compiere.process.ChangeLogProcess
Llamando un proceso desde el código
Buscando en la web encontré un post donde indican que existe la opción de llamar un proceso desde cualquier otro lado del código que se esté desarrollando, se realiza de la siguiente manera:// Crea una instancia de los parámetros: Los parámetros que debes enviar al proceso.
ProcessInfoParameter pi1 = new ProcessInfoParameter("AD_Client_ID", clientId,"","","");
ProcessInfoParameter pi2 = new ProcessInfoParameter("AD_Org_ID", orgId, "","","");
// Crea una instancia del proceso. Ésta es una clase compuesta que contiene los parámetros.
ProcessInfo pi = new ProcessInfo("", 0,0,0);
pi.setParameter(new ProcessInfoParameter[] {pi1, pi2, pi3});
// Localiza el proceso en la base de datos. En este caso se le envía el value del proceso
MProcess pr = new Query(Env.getCtx(), MProcess.Table_Name, "value=?", null)
.setParameters(new Object[]{"MyProcess"})
.first();
if (pr==null) {
log.warn("El proceso " + pr.getName() + " no existe. ");
return false;
}
// Crea una instancia de la clase del proceso que estás codificando.
MyProcess process = new MyProcess();
// Crea un MPInstance (principalmente para propósitos de logging/sync)
MPInstance mpi = new MPInstance(Env.getCtx(), 0, null);
mpi.setAD_Process_ID(pr.get_ID());
mpi.setRecord_ID(0);
mpi.save();
// Conecta los procesos a la MPInstance creada.
pi.setAD_PInstance_ID(mpi.get_ID());
log.info("Iniciando el proceso " + pr.getName());
boolean result = process.startProcess(ctx, pi, null);
Tengo que realizar una prueba personal para ver este código funcionando en directo.
Comentarios
Publicar un comentario