Ir al contenido

Crear su propia Automation Validation

Puede crear su propia Automation Validation.

Condiciones:

  • La nueva clase Automation Validation debe implementar la interfaz “Validation”.
  • La nueva clase Automation Validation debe declararse bajo el paquete “com.openkm.plugin.automation.validation”.
  • La nueva clase Automation Validation debe anotarse 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í.

Método Tipo Descripción
isValid(Map<String, Object> env, Object… params) boolean El método que ejecuta el evento de Automation para evaluar si las condiciones son verdaderas o falsas.
getName() String Establece el nombre que se mostrará en el selector 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
getParamDesc01
getParamDesc02
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.

La variable env está presente en el método isValid; es un Map de valores inyectados por automation. Estos valores del map proporcionan información sobre el nodo implicado en el evento y otra información relacionada.

Por ejemplo, para obtener el nodo que causó el evento.

NodeBase node = automationUtils.getNodeToEvaluate(env);

La variable params 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 Validation (que no serán Automation.PARAM_TYPE_EMPTY).

El array puede tener varios objetos de distintos tipos; es necesario obtener los parámetros con el 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á 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 id 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.

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.
*/
@PluginImplementation
public 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;
}
}