Ir al contenido

Informes con parámetros

Al ejecutar un informe desde OpenKM, puede mostrarse un formulario que requiera que el usuario introduzca valores con fines de filtrado. El caso más común es filtrar por un rango de fechas.

Para entender el filtro de formulario, usaremos el informe UsersLogin.rep (descargue UsersLogin.zip).

En el ejemplo, se han establecido dos campos de filtrado:

Campo Tipo Descripción
from_date Input Campo usado para filtrar la fecha de inicio.
to_date Input Campo usado para filtrar la fecha de fin.

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 de inicio.
to_date java.util.Date Fecha de fin.

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

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

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

import org.springframework.web.context.WebApplicationContext;
import com.openkm.db.service.ActivitySrv;
import com.openkm.db.bean.*;
import com.openkm.util.*;
import java.util.*;
WebApplicationContext cc = (WebApplicationContext) ContextWrapper.getContext();
ActivitySrv activitySrv = cc.getBean(ActivitySrv.class);
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 = activitySrv.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 el botón de consulta del informe .

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

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