Creating your own Report plugin
You can create your own Report plugin.
Conditions:
- The new Report Plugin class must implement the “Report” interface.
- The new Report Plugin class must be declared under the package “com.openkm.plugin.report”.
- The new Report Plugin class must be annotated with “@PluginImplementation”.
- The new Report Plugin class must extend “BasePlugin”.
Report interface:
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();}The new class must be loaded into the package com.openkm.plugin.report because the application plugin system will try to load from there.
Methods description
Section titled “Methods description”| Method | Type | Description |
|---|---|---|
| getFormElements() | List |
The method returns a list of FormElement objects that will be rendered in the UI to ask for report filter values. |
| execute(Map<String, String> params) | PageInfo | Returns a list of elements related to the report. The params variable contains the values of the form elements set by the user in the UI. |
| getName() | String | Returns the name of the report. |
Example of the Report plugin implementation
Section titled “Example of the Report plugin implementation”In this example, we return a list of documents filtered by document name (provided as an input value), and with a limit on the number of results as an input value (if it is empty, the default limit is 100). The list shows only 3 fields related to the document (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; }}