Crear su propio plugin de validador de formularios
Los validadores de formulario se utilizan para implementar lógica compleja que debe evaluarse desde el lado del servidor y que no queda cubierta por el elemento Metadata Validator por defecto.
Para crear su propio validador de formularios es necesario crear una nueva clase que implemente la interfaz FieldValidator:
package com.openkm.plugin.form;
import java.util.List;
import net.xeoh.plugins.base.Plugin;
/** * FieldValidator */public interface FieldValidator extends Plugin { public abstract String getName(); public abstract String validate(String value, List<String> uuids);}La nueva clase debe cargarse en el paquete com.openkm.plugin.form, porque el sistema de plugins de la aplicación la cargará desde ahí. Vea el ejemplo a continuación:
Descripción de los métodos
Sección titulada «Descripción de los métodos»| Método | Tipo | Descripción |
|---|---|---|
| getName() | String | El método devuelve el nombre del plugin utilizado en la lista de selección del formulario. |
| validate(String value, List |
String | Cuando la cadena devuelta es igual a “”, la aplicación considera que todo ha ido correctamente; en caso contrario, se devuelve el texto del error. La variable value contiene el valor del campo de metadatos y uuids es la lista de los uuid de los nodos afectados (documentos, carpetas, correos, registros). En el caso habitual en que solo se actualiza un nodo, la lista contendrá un único uuid. Si hay varios nodos seleccionados, contendrá la lista de todos los nodos seleccionados en los que se aplicarán los cambios de metadatos. |
Ejemplo de implementación de un validador de formularios
Sección titulada «Ejemplo de implementación de un validador de formularios»En este ejemplo no se permitirán dos comentarios iguales en el campo de metadatos llamado okp:tecnology.comment
package com.openkm.plugin.form;
import com.openkm.api.OKMRelation;import com.openkm.bean.Relation;import com.openkm.dao.LegacyDAO;import net.xeoh.plugins.base.annotations.PluginImplementation;
import java.util.ArrayList;import java.util.List;
@PluginImplementationpublic class DuplicateDocumentNumberValidator implements FieldValidator {
@Override public String getName() { return "Duplicated document number"; }
@Override public String validate(String value, List<String> uuids) { String validate = "";
String sql = "SELECT NPG_NODE FROM OKM_NODE_PROPERTY WHERE NPG_NAME = 'okp:tecnology.comment' AND NPG_VALUE = " + value; try { List<List<String>> result = LegacyDAO.executeSQL(sql); if (result.size() > 0) { if(uuids.isEmpty()) { validate = "Duplicated document number"; } else { List<String> allowedUuids = new ArrayList<>(); for(String uuid: uuids) { allowedUuids.add(uuid); List<Relation> relations = OKMRelation.getInstance().getRelations(null, uuid); for(Relation relation: relations){ allowedUuids.add(relation.getNode()); } }
for(List<String> resultList : result){ if(!allowedUuids.contains(resultList.get(0))){ validate = "Duplicated document number"; } } } } } catch (Exception e) { validate = e.getMessage(); }
return validate; }}