Crear su propio plugin de Report
Puede crear su propio plugin de Report.
Condiciones:
- La nueva clase de plugin de Report debe implementar la interfaz “Report”.
- La nueva clase de plugin de Report debe declararse dentro del paquete “com.openkm.plugin.report”.
- La nueva clase de plugin de Report debe estar anotada con “@PluginImplementation”.
- La nueva clase de plugin de Report 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 ahí.
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 renderizará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. El parámetro 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 Report
Sección titulada «Ejemplo de implementación del plugin Report»En este ejemplo, devolvemos una lista de documentos filtrados por nombre de documento (proporcionado como valor de entrada) y limitados por un límite de resultados (también proporcionado como valor de entrada). Si el límite está vacío, el valor por defecto es 100. La lista muestra solo tres campos relacionados con cada 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; }}