Crear su propia Automation Action
Puede crear su propia acción de automatización (Automation Action).
Condiciones:
- La nueva clase de Automation Action debe implementar la interfaz “Action”.
- La nueva clase de Automation Action debe declararse en el paquete “com.openkm.automation.action”.
- La nueva clase de Automation Action debe estar anotada con “@PluginImplementation”.
Interfaz de validación:
package com.openkm.automation;
import java.util.Map;
import net.xeoh.plugins.base.Plugin;
public interface Action extends Plugin { public static final String METHOD_PRE = "executePre"; public static final String METHOD_POST = "executePost";
public void executePre(Map<String, Object> env, Object... params); public void executePost(Map<String, Object> env, Object... params); public boolean hasPost(); public boolean hasPre(); public String getName(); public String getParamType00(); public String getParamSrc00(); public String getParamDesc00(); public String getParamType01(); public String getParamSrc01(); public String getParamDesc01(); public String getParamType02(); public String getParamSrc02(); public String getParamDesc02();}Descripción de los métodos
Sección titulada «Descripción de los métodos»| Método | Tipo | Descripción |
|---|---|---|
| executePre(Map<String, Object> env, Object… params) | void | El método ejecutado por el evento de Automation cuando se cumplen las condiciones de validación, en la fase “pre”. |
| executePost(Map<String, Object> env, Object… params) | void | El método ejecutado por el evento de Automation cuando se cumplen las condiciones de validación, en la fase “post”. |
| hasPost() | boolean | Cuando devuelve true, indica que el método executePost(…) puede utilizarse en la fase post de Automation. Más información sobre las fases de automatización en Automation. |
| hasPre() | boolean | Cuando devuelve true, indica que el método executePre(…) puede utilizarse en la fase pre de Automation. Puede encontrar más información sobre las fases de automatización en Automation. |
| 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 del 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 se establece en 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 getParamDesc01 getParamDesc02 |
String | La descripción del parámetro. |
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 del map 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.
String uuid = AutomationUtils.getUuid(env);Entender la variable params
Sección titulada «Entender la variable params»La variable env está presente en el método isValid, es un array de Objects. Este array lo rellena el evento de Automation según el número de parámetros establecidos en la clase Action ( que no tendrán el valor Automation.PARAM_TYPE_EMPTY ).
El array puede contener varios Objects de distinto tipo; es necesario convertir los parámetros al tipo de objeto correcto.
Por ejemplo, para obtener el primer parámetro como un 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á 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 id 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). |
Detectar la recursión
Sección titulada «Detectar la recursión»Al crear sus acciones de automatización, debe tener en cuenta el caso de la recursividad. Por ejemplo, si su acción está vinculada al evento “CREATE_DOCUMENT” y dentro de la acción crea un nuevo documento, puede entrar en un bucle infinito. Por ello, al crear una nueva Action debe prestar especial atención a estos casos.
Código para detectar llamadas recursivas provocadas por las clases de acciones de automatización:
if (StackTraceUtils.isCallingMe(this.getClass().getName())) { log.info("Recursion detected"); return;}Ejemplo
Sección titulada «Ejemplo»Clase AddKeyword:
package com.openkm.automation.action;
import java.util.Map;
import com.openkm.automation.Action;import com.openkm.automation.AutomationUtils;import com.openkm.core.Config;import com.openkm.dao.NodeBaseDAO;import com.openkm.dao.bean.Automation;
import net.xeoh.plugins.base.annotations.PluginImplementation;
/** * AddKeyword */@PluginImplementationpublic class AddKeyword implements Action {
@Override public void executePre(Map<String, Object> env, Object... params) throws Exception { }
@Override public void executePost(Map<String, Object> env, Object... params) throws Exception { String keyword = AutomationUtils.getString(0, params); String uuid = AutomationUtils.getUuid(env);
if (uuid != null && keyword != null && !keyword.isEmpty()) { if (Config.SYSTEM_KEYWORD_LOWERCASE) { keyword = keyword.toLowerCase(); }
NodeBaseDAO.getInstance().addKeyword(uuid, keyword); } }
@Override public boolean hasPost() { return true; }
@Override public boolean hasPre() { return false; }
@Override public String getName() { return "AddKeyword"; }
@Override public String getParamType00() { return Automation.PARAM_TYPE_TEXT; }
@Override public String getParamSrc00() { return Automation.PARAM_SOURCE_EMPTY; }
@Override public String getParamDesc00() { return "Keyword"; }
@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 ""; }}