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í.
Descripción de los métodos
Sección titulada «Descripción de los métodos»| 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;
@PluginImplementationpublic 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; }}