Ir al contenido
Otras versiones

Cargando…

Informes con parámetros

Cuando ejecuta un informe desde OpenKM, es posible que se le muestre un formulario en el que debe introducir valores con fines de filtrado. El caso más habitual es el filtrado por un rango de fechas.

Para entender el filtro del formulario utilizaremos el informe UsersLogin.rep (descargue UsersLogin.zip).

En el ejemplo se han definido dos campos de filtrado:

Campo Tipo Descripción
from_date Input Campo utilizado para filtrar desde una fecha.
to_date Input Campo utilizado para filtrar hasta una fecha.

El fichero params.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE report-parameters PUBLIC "-//OpenKM//DTD Report Parameters 2.1//EN"
"http://www.openkm.com/dtd/report-parameters-2.1.dtd">
<report-parameters>
<input label="From" name="from_date" type="date">
<validator type="req"/>
</input>
<input label="To" name="to_date" type="date">
<validator type="req"/>
</input>
</report-parameters>

En el informe se crean dos parámetros:

Parámetro Clase Descripción
from_date java.util.Date Fecha desde.
to_date java.util.Date Fecha hasta.

Los parámetros también se utilizan en los informes SQL o Java.

  • Haga clic en botón de consulta del informe.

Las variables from_date y to_date se inyectan en la ejecución del código y pueden utilizarse directamente, como en el ejemplo siguiente.

import java.util.Calendar;
import com.openkm.dao.ActivityDAO;
import com.openkm.dao.bean.ActivityFilter;
import com.openkm.dao.bean.Activity;
ActivityFilter filter = new ActivityFilter();
Calendar begin = Calendar.getInstance();
begin.setTime(from_date);
begin.set(Calendar.HOUR, 0);
begin.set(Calendar.MINUTE, 0);
begin.set(Calendar.SECOND, 0);
begin.set(Calendar.MILLISECOND, 0);
filter.setBegin(begin);
Calendar end = Calendar.getInstance();
end.setTime(to_date);
end.set(Calendar.HOUR, 0);
end.set(Calendar.MINUTE, 0);
end.set(Calendar.SECOND, 0);
end.set(Calendar.MILLISECOND, 0);
filter.setEnd(end);
filter.setAction("LOGIN");
List al = new ArrayList();
for (Iterator it = ActivityDAO.findByFilter(filter).iterator(); it.hasNext();){
Activity act = (Activity) it.next();
Map actMap = new HashMap();
actMap.put("user", act.getUser());
actMap.put("date", act.getDate().getTime());
al.add(actMap);
}
return al

Haga clic en botón de consulta del informe.

En el ejemplo hay un parámetro llamado “name” de clase “java.lang.String” que se utiliza para filtrar la lista de usuarios.

select * from OKM_USER where USR_ID like concat('%',$P{name},'%')