Crear su propia validación de automatización
Puede crear su propia validación de automatización (Automation Validation).
Condiciones:
- La nueva clase de Automation Validation debe implementar la interfaz “Validation”.
- La nueva clase Automation Validation debe declararse en el paquete “com.openkm.plugin.automation.validation”.
- La nueva clase de Automation Validation debe estar anotada con “@PluginImplementation”.
- La nueva clase Automation Validation debe extender “BasePlugin”.
Interfaz Automation Validation:
package com.openkm.plugin.automation;
import com.openkm.db.bean.AutomationRule.EnumEvents;import net.xeoh.plugins.base.Plugin;
import java.util.List;import java.util.Map;
public interface Validation extends Plugin {
String METHOD = "isValid";
boolean isValid(Map<String, Object> env, Object... params) throws AutomationException;
String getName();
String getParamType00();
String getParamSrc00();
String getParamDesc00();
String getParamType01();
String getParamSrc01();
String getParamDesc01();
String getParamType02();
String getParamSrc02();
String getParamDesc02();
List<EnumEvents> getValidEventsAtPre();
List<EnumEvents> getValidEventsAtPost();}La nueva clase debe cargarse en el paquete com.openkm.plugin.automation.validation, 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 |
|---|---|---|
| isValid(Map<String, Object> env, Object… params) | boolean | Método ejecutado por el evento de Automation para evaluar si las condiciones son verdaderas o falsas. |
| getName() | String | Establece el nombre que se mostrará en la lista de selección de la interfaz de administración. |
| getParamType00 getParamType01 getParamType02 |
String | Establece el tipo de parámetro. Valores disponibles: - Automation.PARAM_TYPE_EMPTY - Automation.PARAM_TYPE_TEXT - Automation.PARAM_TYPE_INTEGER - Automation.PARAM_TYPE_BOOLEAN - Automation.PARAM_TYPE_TEXTAREA - Automation.PARAM_TYPE_CODE - Automation.PARAM_TYPE_USER - Automation.PARAM_TYPE_ROLE - Automation.PARAM_TYPE_OMR Cuando el valor es Automation.PARAM_TYPE_EMPTY. Los parámetros funcionan como un grupo lógico. [ getParamType00 + getParamSrc00 + getParamDesc00 ] |
| getParamSrc00 getParamSrc01 getParamSrc02 |
String | Establece el tipo de origen. Valores disponibles: - Automation.PARAM_SOURCE_EMPTY - Automation.PARAM_SOURCE_FOLDER - Automation.PARAM_SOURCE_OMR |
| getParamDesc00 getParamDesc00 getParamDesc00 |
String | La descripción del parámetro. |
| getValidEventsAtPre() | List |
Devuelve una lista de eventos. El método devuelve una lista de eventos válidos para la prevalidación. |
| getValidEventsAtPost() | List |
Devuelve una lista de eventos. El método devuelve una lista de eventos válidos para la posvalidación. |
Entender la variable env
Sección titulada «Entender la variable env»La variable env está presente en el método isValid; es un Map de valores inyectados por la automatización. Estos valores proporcionan información sobre el nodo implicado en el evento y otra información relacionada.
Por ejemplo, para recuperar el uuid del nodo que causó el evento.
NodeBase node = automationUtils.getNodeToEvaluate(env);Entender la variable params
Sección titulada «Entender la variable params»La variable params está presente en el método isValid; es un array de Objects. Este array lo rellena un evento de Automation en función del número de parámetros definidos en la clase Validation (aquellos cuyo valor no sea Automation.PARAM_TYPE_EMPTY).
El array puede tener varios Objects de distinto tipo, por lo que es necesario recuperar los parámetros con el tipo de objeto correcto.
Por ejemplo, para recuperar el primer parámetro como objeto String.
String param00 = AutomationUtils.getString(0, params);Descripción de los valores disponibles de ParamType:
Sección titulada «Descripción de los valores disponibles de ParamType:»| Propiedad | Descripción |
|---|---|
| Automation.PARAM_TYPE_EMPTY | Indica un valor vacío. |
| Automation.PARAM_TYPE_TEXT | Indica que se requerirá un valor de texto. |
| Automation.PARAM_TYPE_INTEGER | Indica que se requerirá un valor entero. |
| Automation.PARAM_TYPE_BOOLEAN | Indica que se requerirá un valor booleano. |
| Automation.PARAM_TYPE_TEXTAREA | Indica que se requerirá un valor de área de texto. |
| Automation.PARAM_TYPE_CODE | Indica que se requerirá un código. |
| Automation.PARAM_TYPE_USER | Indica que se requerirá un usuario válido de la aplicación. |
| Automation.PARAM_TYPE_ROLE | Indica que se requerirá un rol válido de la aplicación. |
| Automation.PARAM_TYPE_OMR | Indica que se requerirá un identificador de OMR válido (reconocimiento óptico de marcas). |
Descripción de los valores disponibles de Src:
Sección titulada «Descripción de los valores disponibles de Src:»| Propiedad | Descripción |
|---|---|
| PARAM_SOURCE_EMPTY | Indica un origen vacío. |
| PARAM_SOURCE_FOLDER | Indica que el origen debe ser una carpeta. |
| PARAM_SOURCE_OMR | Indica que el origen debe ser un OMR válido (reconocimiento óptico de marcas). |
Ejemplo
Sección titulada «Ejemplo»Clase PathContains:
package com.openkm.plugin.automation.validation;
import com.openkm.api.OKMRepository;import com.openkm.db.bean.Automation;import com.openkm.db.bean.AutomationRule.EnumEvents;import com.openkm.db.bean.NodeBase;import com.openkm.db.service.NodeBaseSrv;import com.openkm.plugin.BasePlugin;import com.openkm.plugin.automation.AutomationException;import com.openkm.plugin.automation.AutomationUtils;import com.openkm.plugin.automation.Validation;import net.xeoh.plugins.base.annotations.PluginImplementation;import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;import java.util.stream.Stream;
/** * Check if the current parent path contains a designed one. The only parameter * is a path and will test if this one is included in the actual parent. */@PluginImplementationpublic class PathContains extends BasePlugin implements Validation {
private static ArrayList<EnumEvents> EVENTS_AT_PRE = Stream.of(EnumEvents.EVENT_DOCUMENT_CREATE, EnumEvents.EVENT_DOCUMENT_UPDATE, EnumEvents.EVENT_DOCUMENT_DELETE, EnumEvents.EVENT_DOCUMENT_RENAME, EnumEvents.EVENT_DOCUMENT_MOVE, EnumEvents.EVENT_DOCUMENT_RESTORE_VERSION, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI_FOR_PREVIEW, EnumEvents.EVENT_DOCUMENT_PRINT, EnumEvents.EVENT_DOCUMENT_STAMP, EnumEvents.EVENT_RECORD_CREATE, EnumEvents.EVENT_RECORD_DELETE, EnumEvents.EVENT_FOLDER_CREATE, EnumEvents.EVENT_FOLDER_DELETE, EnumEvents.EVENT_MAIL_CREATE, EnumEvents.EVENT_MAIL_DOWNLOAD_FROM_UI, EnumEvents.EVENT_LINK_CREATE, EnumEvents.EVENT_TEXT_EXTRACTOR, EnumEvents.EVENT_PROPERTY_GROUP_ADD, EnumEvents.EVENT_PROPERTY_GROUP_SET, EnumEvents.EVENT_PROPERTY_GROUP_REMOVE ).collect(Collectors.toCollection(ArrayList::new));
private static ArrayList<EnumEvents> EVENTS_AT_POST = Stream.of(EnumEvents.EVENT_DOCUMENT_CREATE, EnumEvents.EVENT_DOCUMENT_UPDATE, EnumEvents.EVENT_DOCUMENT_DELETE, EnumEvents.EVENT_DOCUMENT_RENAME, EnumEvents.EVENT_DOCUMENT_MOVE, EnumEvents.EVENT_DOCUMENT_RESTORE_VERSION, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI_FOR_PREVIEW, EnumEvents.EVENT_DOCUMENT_PRINT, EnumEvents.EVENT_DOCUMENT_STAMP, EnumEvents.EVENT_RECORD_CREATE, EnumEvents.EVENT_RECORD_DELETE, EnumEvents.EVENT_FOLDER_CREATE, EnumEvents.EVENT_FOLDER_DELETE, EnumEvents.EVENT_MAIL_CREATE, EnumEvents.EVENT_MAIL_DOWNLOAD_FROM_UI, EnumEvents.EVENT_LINK_CREATE, EnumEvents.EVENT_TEXT_EXTRACTOR, EnumEvents.EVENT_PROPERTY_GROUP_ADD, EnumEvents.EVENT_PROPERTY_GROUP_SET, EnumEvents.EVENT_PROPERTY_GROUP_REMOVE, EnumEvents.EVENT_MAIL_IMPORT_ATTACHMENTS ).collect(Collectors.toCollection(ArrayList::new));
@Autowired private AutomationUtils automationUtils;
@Autowired private OKMRepository okmRepository;
@Autowired private NodeBaseSrv nodeBaseSrv;
@Override public boolean isValid(Map<String, Object> env, Object... params) throws AutomationException { try { String fldUuid = automationUtils.getString(0, params); NodeBase node = automationUtils.getNodeToEvaluate(env); String parentPath = nodeBaseSrv.getPathFromUuid(node.getParent()); String fldPath = okmRepository.getNodePath(null, fldUuid);
if (parentPath.startsWith(fldPath)) { return true; } else { return false; } } catch (Exception e) { throw new AutomationException("PathContains exception", e); } }
@Override public String getName() { return "PathContains"; }
@Override public String getParamType00() { return Automation.PARAM_TYPE_TEXT; }
@Override public String getParamSrc00() { return Automation.PARAM_SOURCE_FOLDER; }
@Override public String getParamDesc00() { return "String"; }
@Override public String getParamType01() { return Automation.PARAM_TYPE_EMPTY; }
@Override public String getParamSrc01() { return Automation.PARAM_SOURCE_EMPTY; }
@Override public String getParamDesc01() { return ""; }
@Override public String getParamType02() { return Automation.PARAM_TYPE_EMPTY; }
@Override public String getParamSrc02() { return Automation.PARAM_SOURCE_EMPTY; }
@Override public String getParamDesc02() { return ""; }
@Override public List<EnumEvents> getValidEventsAtPre() { return EVENTS_AT_PRE; }
@Override public List<EnumEvents> getValidEventsAtPost() { return EVENTS_AT_POST; }}