Difference between revisions of "Unique name"
From OpenKM Documentation
(→Example) |
|||
(10 intermediate revisions by the same user not shown) | |||
Line 4: | Line 4: | ||
'''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'''. |
Line 19: | 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 27: | 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 43: | Line 43: | ||
-- metadata type | -- metadata type | ||
DELETE FROM OKM_DB_METADATA_TYPE WHERE DMT_TABLE='customer'; | 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', ' | + | 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', ' | + | INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('customer', 'col01', 'text', 'cus_nombre'); |
-- values | -- values | ||
DELETE FROM OKM_DB_METADATA_VALUE WHERE DMV_TABLE='customer'; | DELETE FROM OKM_DB_METADATA_VALUE WHERE DMV_TABLE='customer'; | ||
− | INSERT INTO OKM_DB_METADATA_VALUE (DMV_TABLE, DMV_COL00, DMV_COL01) VALUES (' | + | 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 (' | + | INSERT INTO OKM_DB_METADATA_VALUE (DMV_TABLE, DMV_COL00, DMV_COL01) VALUES ('customer', '0002','Customer 2'); |
</source> | </source> | ||
Line 83: | Line 83: | ||
docId = ((Input) formElement).getValue(); | docId = ((Input) formElement).getValue(); | ||
add = docId.equals(""); | add = docId.equals(""); | ||
− | } else if (formElement.getName().equals("okp:data. | + | } else if (formElement.getName().equals("okp:data.project.code")) { |
prjCode = ((Input) formElement).getValue(); | prjCode = ((Input) formElement).getValue(); | ||
} else if (formElement.getName().equals("okp:data.description")) { | } else if (formElement.getName().equals("okp:data.description")) { | ||
desc = ((Input) formElement).getValue(); | desc = ((Input) formElement).getValue(); | ||
− | } else if (formElement.getName().equals("okp:data. | + | } else if (formElement.getName().equals("okp:data.customer")) { |
for (Option option: ((Select) formElement).getOptions()) { | for (Option option: ((Select) formElement).getOptions()) { | ||
if (option.isSelected()) { | if (option.isSelected()) { | ||
Line 123: | Line 123: | ||
OKMDocument.getInstance().rename(null, path, newName); | OKMDocument.getInstance().rename(null, path, newName); | ||
</source> | </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: