Ir al contenido
Otras versiones

Cargando…

Crear su propia acción de automatización (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();
}
Método Tipo Descripción
executePre(Map<String, Object> env, Object… params) void Método ejecutado por el evento de Automation en la fase “pre” cuando se cumplen las condiciones de validación.
executePost(Map<String, Object> env, Object… params) void Método ejecutado por el evento de Automation en la fase “post” cuando se cumplen las condiciones de validación.
hasPost() boolean Cuando devuelve true, indica que el método executePost(…) puede utilizarse en la fase post de Automation.
Puede encontrar más información sobre las fases de automatización en: Automatización.
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: Automatización.
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.

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 obtener el uuid del nodo que provocó un evento utilice:

String uuid = AutomationUtils.getUuid(env);

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 utilice:

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).

Cuando cree sus acciones de automatización, debe tener en cuenta la posibilidad de una recursión no deseada. Por ejemplo, si su acción está vinculada a un evento “CREATE_DOCUMENT” y en la acción crea un nuevo documento, puede entrar en un bucle infinito. Por este motivo, cuando cree 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;
}

Clase AddKeyword:

package com.openkm.automation.action;
import java.util.Map;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
/**
* AddKeyword
*
*/
@PluginImplementation
public class AddKeyword implements Action {
private static Logger log = LoggerFactory.getLogger(AddKeyword.class);
@Override
public void executePre(Map<String, Object> env, Object... params) {
}
@Override
public void executePost(Map<String, Object> env, Object... params) {
String keyword = AutomationUtils.getString(0, params);
String uuid = AutomationUtils.getUuid(env);
try {
if (uuid != null && keyword != null && !keyword.isEmpty()) {
if (Config.SYSTEM_KEYWORD_LOWERCASE) {
keyword = keyword.toLowerCase();
}
NodeBaseDAO.getInstance().addKeyword(uuid, keyword);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
@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 "";
}
}