Ir al contenido
Otras versiones

Cargando…

Creación de su propio plugin de informes

Puede crear su propio plugin de informes.

Condiciones:

  • La nueva clase del plugin de informes debe implementar la interfaz “Report”.
  • La nueva clase del plugin de informes debe declararse en el paquete “com.openkm.plugin.report”.
  • La nueva clase del plugin de informes debe estar anotada con “@PluginImplementation”.
  • La nueva clase del plugin de informes debe extender “BasePlugin”.

Interfaz Report:

package com.openkm.plugin.report;import com.openkm.bean.PageInfo;import com.openkm.bean.form.FormElement;import com.openkm.core.AccessDeniedException;import com.openkm.core.DatabaseException;import com.openkm.core.PathNotFoundException;import com.openkm.core.RepositoryException;import net.xeoh.plugins.base.Plugin;import java.util.List;import java.util.Map;/** * Report plugin */public interface Report extends Plugin { List<FormElement> getFormElements(); PageInfo execute(Map<String, String> params) throws AccessDeniedException, PathNotFoundException, RepositoryException, DatabaseException; String getName();}

La nueva clase debe cargarse en el paquete com.openkm.plugin.report porque el sistema de plugins de la aplicación intentará cargarla desde allí.

Método Tipo Descripción
getFormElements() List El método devuelve una lista de objetos FormElement que se mostrarán en la interfaz para solicitar los valores de filtro del informe.
execute(Map<String, String> params) PageInfo Devuelve una lista de elementos relacionados con el informe.
La variable params contiene los valores de los elementos del formulario establecidos por el usuario en la interfaz.
getName() String Devuelve el nombre del informe.

Ejemplo de implementación del plugin de informes

Sección titulada «Ejemplo de implementación del plugin de informes»

En este ejemplo, devolvemos una lista de documentos filtrada por el nombre del documento (proporcionado como valor de entrada) y con un límite en el número de resultados como valor de entrada (si está vacío, el límite por defecto es 100). La lista muestra solo 3 campos relacionados con el documento (Author, Path, Date).

package com.openkm.plugin.report;
import com.openkm.bean.Folder;
import com.openkm.bean.PageInfo;
import com.openkm.bean.form.FormElement;
import com.openkm.bean.form.Input;
import com.openkm.core.AccessDeniedException;
import com.openkm.core.DatabaseException;
import com.openkm.core.PathNotFoundException;
import com.openkm.core.RepositoryException;
import com.openkm.db.bean.NodeBase;
import com.openkm.db.bean.NodeDocument;
import com.openkm.db.service.NodeBaseSrv;
import com.openkm.module.db.DbRepositoryModule;
import com.openkm.plugin.BasePlugin;
import com.openkm.util.FormatUtil;
import com.openkm.ws.rest.util.SimpleNodeBase;
import com.openkm.ws.rest.util.SimpleRowReport;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@PluginImplementation
public class TestReport extends BasePlugin implements Report {
private static final Logger log = LoggerFactory.getLogger(TestReport.class);
private static final String REPORTS_DEFAULT_LIMIT = "100";
private static final String REPORT_INPUT_FILTER = "filter";
private static final String REPORT_INPUT_LIMIT = "limit";
private static final String REPORT_COLUMN_LABEL_1 = "Author";
private static final String REPORT_COLUMN_LABEL_2 = "Path";
private static final String REPORT_COLUMN_LABEL_3 = "Date";
@Autowired
private DbRepositoryModule dbRepositoryModule;
@Autowired
private NodeBaseSrv nodeBaseSrv;
@Override
public String getName() {
return "Consulting documents sample";
}
@Override
public List getFormElements() {
List formElements = new ArrayList<>();
FormElement feInputFilter = new Input();
feInputFilter.setName(REPORT_INPUT_FILTER);
feInputFilter.setLabel("Filter");
FormElement feInputLimit = new Input();
feInputLimit.setName(REPORT_INPUT_LIMIT);
feInputLimit.setLabel("Limit");
formElements.add(feInputFilter);
formElements.add(feInputLimit);
return formElements;
}
@Override
public PageInfo execute(Map<String, String> params) throws AccessDeniedException, PathNotFoundException,
RepositoryException, DatabaseException {
PageInfo reportPageInfo = new PageInfo();
List simpleRowReportList = new ArrayList<>();
Folder rootFolder = dbRepositoryModule.getRootFolder(null);
String filter = params.get(REPORT_INPUT_FILTER);
String limit = StringUtils.isNotEmpty(params.get(REPORT_INPUT_LIMIT)) ? params.get(REPORT_INPUT_LIMIT) : REPORTS_DEFAULT_LIMIT;
List<Class<? extends NodeBase>> filteredByNodeTypeList = new ArrayList<>();
filteredByNodeTypeList.add(NodeDocument.class);
PageInfo pageInfo = nodeBaseSrv.getCommonChildrenPaginated(rootFolder.getUuid(), 0, Integer.parseInt(limit), filter, "name",
true, filteredByNodeTypeList);
// Only fill the metadata values when results size greater than 0
if (pageInfo.getObjects().size() > 0) {
for (SimpleNodeBase snb : (List) pageInfo.getObjects()) {
SimpleRowReport simpleRowReportPlugin = new SimpleRowReport();
simpleRowReportPlugin.setUuid(snb.getUuid());
simpleRowReportPlugin.setName(snb.getName());
simpleRowReportPlugin.setReportColumnLabel1(REPORT_COLUMN_LABEL_1);
simpleRowReportPlugin.setReportColumnLabel2(REPORT_COLUMN_LABEL_2);
simpleRowReportPlugin.setReportColumnLabel3(REPORT_COLUMN_LABEL_3);
simpleRowReportPlugin.setReportColumnValue1(snb.getAuthor());
simpleRowReportPlugin.setReportColumnValue2(snb.getPath());
simpleRowReportPlugin.setReportColumnValue3(FormatUtil.formatDate(snb.getVersionCreated())); // formatted from backend
simpleRowReportList.add(simpleRowReportPlugin);
}
reportPageInfo.setTotalElements(pageInfo.getObjects().size());
reportPageInfo.setObjects(simpleRowReportList);
}
return reportPageInfo;
}
}