Ir al contenido
Otras versiones

Cargando…

Script para automatización - Establecer un nombre de documento único basado en metadatos

Cada vez que se sube un nuevo documento, el script establece un nombre de documento único basado en los valores de los metadatos.  

Definición del grupo de metadatos:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 2.1//EN"
"http://www.openkm.com/dtd/property-groups-2.1.dtd">
<property-groups>
<property-group label="Datos" name="okg:data">
        <input label="Id" type="text" name="okp:data.id" width="200px" readonly="true"/>
        <input label="Project code" type="text" name="okp:data.project.code" width="200px">
            <validator type="req"/>
            <validator type="num"/>
            <validator type="maxlen" parameter="6"/>
            <validator type="minlen" parameter="6"/>
        </input>
        <select label="Customer" name="okp:data.customer" type="simple" table="customer"
                optionsQuery="select $cus_id, $cus_nombre from DatabaseMetadataValue dmv where dmv.table='customer'">
            <validator type="req"/>
        </select>
        <input label="Description" type="text" name="okp:data.description" width="200px">
            <validator type="req"/>
            <validator type="maxlen" parameter="150"/>
        </input>
</property-group>
</property-groups>

Definición de los metadatos de base de datos:

-- metadata type
DELETE FROM OKM_DB_METADATA_TYPE WHERE DMT_TABLE='customer';
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('customer', 'col00', 'integer', 'cus_id');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('customer', 'col01', 'text', 'cus_nombre');
-- values
DELETE FROM OKM_DB_METADATA_VALUE WHERE DMV_TABLE='customer';
INSERT INTO OKM_DB_METADATA_VALUE (DMV_TABLE, DMV_COL00, DMV_COL01) VALUES ('customer', '0001','Customer 1');
INSERT INTO OKM_DB_METADATA_VALUE (DMV_TABLE, DMV_COL00, DMV_COL01) VALUES ('customer', '0002','Customer 2');

El script:

import com.openkm.api.OKMPropertyGroup;
import com.openkm.api.OKMRepository;
import java.util.*;
import com.openkm.dao.DatabaseMetadataDAO;
import com.openkm.api.OKMPropertyGroup;
import com.openkm.bean.form.FormElement;
import com.openkm.bean.form.Input;
import com.openkm.bean.form.Select;
import com.openkm.bean.form.Option;
import com.openkm.util.PathUtils;
import com.openkm.util.FileUtils;
import com.openkm.api.OKMDocument;
String grpName = "okg:data";
String table = "autonumber";
String sequenceName = "doc_id";
String path = OKMRepository.getInstance().getNodePath(null,uuid);
// Evaluate if already has property group
boolean add = true;
String prjCode = "";
String clientCode = "";
String docId = "";
String desc = "";
for (FormElement formElement : OKMPropertyGroup.getInstance().getProperties(null, path, grpName)) {
if (formElement.getName().equals("okp:data.id")) {
docId = ((Input) formElement).getValue();
add = docId.equals("");
} else if (formElement.getName().equals("okp:data.project.code")) {
prjCode = ((Input) formElement).getValue();
} else if (formElement.getName().equals("okp:data.description")) {
desc = ((Input) formElement).getValue();
} else if (formElement.getName().equals("okp:data.customer")) {
for (Option option: ((Select) formElement).getOptions()) {
if (option.isSelected()) {
clientCode = option.getValue();
}
}
}
}
// Setting properties
if (add) {
// add unique document id
docId = String.valueOf(DatabaseMetadataDAO.getNextSequenceValue(table, sequenceName));
switch (docId.length()) {
case 1:
docId = "0000" + docId;
break;
case 2:
docId = "000" + docId;
break;
case 3:
docId = "00" + docId;
break;
case 4:
docId = "0" + docId;
break;
}
Map map = new HashMap();
map.put("okp:data.id",docId);
OKMPropertyGroup.getInstance().setPropertiesSimple(null, path, grpName, map);
}
// rename document
String newName = prjCode + "-" + docId + "-" + clientCode + "-" + desc + "." + FileUtils.getFileExtension(PathUtils.getName(path));
OKMDocument.getInstance().rename(null, path, newName);

Cree una tarea de automatización para mostrar el grupo de propiedades en el asistente de documentos:

Cree una tarea de automatización basada en el evento property_group_set:

Suba un nuevo archivo:

El documento se crea automáticamente a partir de los valores de los campos de metadatos: