Difference between revisions of "Unique name"

From OpenKM Documentation
Jump to: navigation, search
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:'''
Line 8: Line 9:
 
* 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 34: Line 36:
 
   </property-group>
 
   </property-group>
 
</property-groups>
 
</property-groups>
 +
 +
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', 'cli_id');
 +
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('customer', 'col01', 'text', 'cli_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 ('clientes', '0001','Customer 1');
 +
INSERT INTO OKM_DB_METADATA_VALUE (DMV_TABLE, DMV_COL00, DMV_COL01) VALUES ('clientes', '0002','Customer 2');
 +
</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.codigo.proyecto")) {
 +
        prjCode = ((Input) formElement).getValue();
 +
    } else if (formElement.getName().equals("okp:data.description")) {
 +
        desc = ((Input) formElement).getValue();
 +
    } else if (formElement.getName().equals("okp:data.cliente")) {
 +
        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>
  
 
</source>
 
</source>

Revision as of 12:44, 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.codigo.proyecto 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.codigo.proyecto" 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, $customer_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:
<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', 'cli_id');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES ('customer', 'col01', 'text', 'cli_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 ('clientes', '0001','Customer 1');
INSERT INTO OKM_DB_METADATA_VALUE (DMV_TABLE, DMV_COL00, DMV_COL01) VALUES ('clientes', '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.codigo.proyecto")) {
        prjCode = ((Input) formElement).getValue();
    } else if (formElement.getName().equals("okp:data.description")) {
        desc = ((Input) formElement).getValue();
    } else if (formElement.getName().equals("okp:data.cliente")) {
        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>