Script for automation - Set unique document name based on metadata
Esta página aún no está disponible en tu idioma.
Each time a new document is uploaded, the script sets a unique document name based in metadata values.
Metadata group definition:
<?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>Database metadata definition:
-- metadata typeDELETE 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');
-- valuesDELETE 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');The 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 groupboolean 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 propertiesif (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 documentString newName = prjCode + "-" + docId + "-" + clientCode + "-" + desc + "." + FileUtils.getFileExtension(PathUtils.getName(path));OKMDocument.getInstance().rename(null, path, newName);Images
Section titled “Images”Register metadata group
Section titled “Register metadata group”
Register automation rule
Section titled “Register automation rule”Create automation task to show property group in document wizard:

Create automation task based on property_group_set event:


Results
Section titled “Results”Upload a new file:

Automatically the document is created based on metadata fields values:
