Difference between revisions of "Unique name"
From OpenKM Documentation
(→Example) |
|||
(12 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
The script generates unique document name based in metadata values each time new document is uploaded. | The script generates unique document name based in metadata values each time new document is uploaded. | ||
+ | |||
'''Description:''' | '''Description:''' | ||
* Property '''okp:data.id''' store unique autoincremental value. | * Property '''okp:data.id''' store unique autoincremental value. | ||
− | * Property '''okp:data. | + | * Property '''okp:data.project.code''' store project code value. |
* Property '''okp:data.customer''' store customer code. | * Property '''okp:data.customer''' store customer code. | ||
* Property '''okp:data.description''' store document description. | * Property '''okp:data.description''' store document description. | ||
* When a new document is uploaded user must fill all fields except '''okp:data.id''' which is automatically set by OpenKM. | * When a new document is uploaded user must fill all fields except '''okp:data.id''' which is automatically set by OpenKM. | ||
− | * When PropertyGroup is changed - event fired - is executed automatic code which generates '''okp:data.id''' and rename document based on projectCode-autonumericId-clientCode-description.documentExtension | + | * When PropertyGroup is changed - event fired - is executed automatic code which generates '''okp:data.id''' and rename document based on '''projectCode-autonumericId-clientCode-description.documentExtension'''. |
+ | |||
'''Property group definition:''' | '''Property group definition:''' | ||
Line 17: | Line 19: | ||
<property-group label="Datos" name="okg:data"> | <property-group label="Datos" name="okg:data"> | ||
<input label="Id" type="text" name="okp:data.id" width="200px" readonly="true"/> | <input label="Id" type="text" name="okp:data.id" width="200px" readonly="true"/> | ||
− | <input label="Project code" type="text" name="okp:data. | + | <input label="Project code" type="text" name="okp:data.project.code" width="200px"> |
<validator type="req"/> | <validator type="req"/> | ||
<validator type="num"/> | <validator type="num"/> | ||
Line 25: | Line 27: | ||
<select label="Customer" name="okp:data.customer" type="simple" | <select label="Customer" name="okp:data.customer" type="simple" | ||
table="customer" | table="customer" | ||
− | optionsQuery="select $cus_id, $ | + | optionsQuery="select $cus_id, $cus_nombre from DatabaseMetadataValue dmv where dmv.table='customer'"> |
<validator type="req"/> | <validator type="req"/> | ||
</select> | </select> | ||
Line 34: | Line 36: | ||
</property-group> | </property-group> | ||
</property-groups> | </property-groups> | ||
+ | </source> | ||
+ | |||
+ | '''Database metadata:''' | ||
+ | <source lang="sql"> | ||
+ | -- 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'); | ||
</source> | </source> | ||
+ | |||
+ | '''Code:''' | ||
+ | <source lang="java"> | ||
+ | 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); | ||
+ | </source> | ||
+ | |||
+ | == Example == | ||
+ | '''Register property groups:''' | ||
+ | [[File:Okm_user_guide_440.png|center]] | ||
+ | |||
+ | |||
+ | '''Create automation task to show property group in document wizard:''' | ||
+ | [[File:Okm_user_guide_441.png|center]] | ||
+ | |||
+ | [[File:Okm_user_guide_442.png|center]] | ||
+ | |||
+ | |||
+ | '''Create automation task based on property_group_set event:''' | ||
+ | [[File:Okm_user_guide_445.png|center]] | ||
+ | |||
+ | [[File:Okm_user_guide_446.png|center]] | ||
+ | |||
+ | |||
+ | '''Upload new file and fill metadata fields:''' | ||
+ | [[File:Okm_user_guide_443.png|center]] | ||
+ | |||
+ | |||
+ | '''Automatically is created document name based in metadata fields:''' | ||
+ | [[File:Okm_user_guide_444.png|center]] | ||
[[Category: Utilities]] | [[Category: Utilities]] |
Latest revision as of 13:07, 2 May 2013
The script generates unique document name based in metadata values each time new document is uploaded.
Description:
- Property okp:data.id store unique autoincremental value.
- Property okp:data.project.code store project code value.
- Property okp:data.customer store customer code.
- Property okp:data.description store document description.
- When a new document is uploaded user must fill all fields except okp:data.id which is automatically set by OpenKM.
- When PropertyGroup is changed - event fired - is executed automatic code which generates okp:data.id and rename document based on projectCode-autonumericId-clientCode-description.documentExtension.
Property 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:
-- 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');
Code:
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);
Example
Register property groups:
Create automation task to show property group in document wizard:
Create automation task based on property_group_set event:
Upload new file and fill metadata fields:
Automatically is created document name based in metadata fields: