Print Header

Related Topics

Related Case Studies

Contact Blue Fish

Blue Fish Development Group
701 Brazos St. #700
Austin, TX 78701
(512) 469-9300

Documentum Object Types

Author Photo

December 3, 1999 - Article by Michael Trafton

Learn about Documentum’s object-oriented type hierarchy, and how to create and use object types.

What is an Object Type?

Documentum is more than a document management system - it’s really an object management system. As an object-oriented repository, Documentum is made up of different types of objects that work together to provide the functionality in the system. For example, there is a user object that knows the Name, logon id, and email address for each user of the system. There is a group object to help organize those users. There’s a document object, a folder object, and a cabinet object (for obvious reasons). There’s even an object that knows about all the different kinds of objects within a docbase.

Documentum’s Type Hierarchy

Like any object-oriented system, Documentum’s object types are made up of objects with a more general purpose. For example, dm_syobject is an object type that has a general purpose - it can be versioned, it can have content and renditions, it has security, etc. A dm_script object is inherited from the dm_syobject, so it has all these qualities as well. But a dm_script has a more specific use - its content contains a series of Documentum APIs, and when you double-click it in Workspace, it executes those APIs.

Below is an inheritance diagram of some commonly used objects.

Fig. 1

Figure 1: Common Documentum Object Types

Custom Object Types

In order to configure Documentum to fit their particular business needs, most people create several custom object types with attributes that they design themselves. For example, imagine that you will use Documentum to manage the large number of resumes that are processed by your HR department. A resume is obviously a type of document, but it has special attributes that describe it. The applicant’s name, the position that he is applying for, and the date the resume was received are all attributes that describe a resume that do not apply to a generic document. In this example, we would create a custom object type named resume that is inherited from dm_document. We will create the resume with three attributes.

  • Employee name Char (32)
  • Position Char (32)
  • Date Received Date/Time

However, since resume is a sub-type of dm_document, it will also contain all the attributes that dm_document contains, such as object_name, title, subject, keywords and authors.

Creating an Object Type

To create a custom object type, you must use the DQL create type command. You must specify the name of the type, the name of the type that you are inheriting from and the attributes that are specific to this type. For each attribute, you must specify the data type of the attribute and if it is a repeating attribute. Valid datatypes are:

  • DM_STRING: Stored in Oracle as a VARCHAR max size 255 (2000 if using Oracle)
  • DM_INTERGER
  • DM_BODLEAN
  • DM_ID: Used to reference the r_object_id of another object. If an object is dumped and loaded into a new docbase, the referenced object will also be dumped and loaded

The syntax of the CREATE TYPE command follows:

        
CREATE TYPE type_name [(attribute_def {,attribute_def})] [WITH] SUPERTYPE parent_type

    

Determining the Attributes of an Existing Type

There are two ways to determine the attributes of an existing object type - with the describe DQL command and with the describe API.

Using DQL

The describe DQL command works the same way that it does in SQL. The syntax is:

        
describe object type

    

And the results look like this.

        
describe dm_document
Type Name:	dm_document
SuperType Name:	dm_sysobject

Attributes:	    69

object_name                       CHAR(255) 
r_object_type                     CHAR(32)  
title                             CHAR(255) 
subject                           CHAR(128) 
authors                           CHAR(32)    REPEATING
keywords                          CHAR(32)    REPEATING
a_application_type                CHAR(32)  
a_status                          CHAR(16)  
r_creation_date                   TIME      
r_modify_date                     TIME      
r_modifier                        CHAR(32)  
r_access_date                     TIME      
a_is_hidden                       BOOLEAN   
i_is_deleted                      BOOLEAN   
a_retention_date                  TIME      
a_archive                         BOOLEAN   
a_compound_architecture           CHAR(16)  
a_link_resolved                   BOOLEAN   
i_reference_cnt                   INTEGER   
i_has_folder                      BOOLEAN   
i_folder_id                       ID          REPEATING
r_composite_id                    ID          REPEATING
r_composite_label                 CHAR(32)    REPEATING
r_component_label                 CHAR(32)    REPEATING
r_order_no                        INTEGER     REPEATING
r_link_cnt                        INTEGER   
r_link_high_cnt                   INTEGER   
r_assembled_from_id               ID        
r_frzn_assembly_cnt               INTEGER   
r_has_frzn_assembly               BOOLEAN   
resolution_label                  CHAR(32)  
r_is_virtual_doc                  INTEGER   
i_contents_id                     ID        
a_content_type                    CHAR(32)  
r_page_cnt                        INTEGER   
r_content_size                    INTEGER   
a_full_text                       BOOLEAN   
a_storage_type                    CHAR(32)  
i_cabinet_id                      ID        
owner_name                        CHAR(32)  
owner_permit                      INTEGER   
group_name                        CHAR(32)  
group_permit                      INTEGER   
world_permit                      INTEGER   
i_antecedent_id                   ID        
i_chronicle_id                    ID        
i_latest_flag                     BOOLEAN   
r_lock_owner                      CHAR(32)  
r_lock_date                       TIME      
r_lock_machine                    CHAR(32)  
log_entry                         CHAR(80)  
r_version_label                   CHAR(32)    REPEATING
i_branch_cnt                      INTEGER   
i_direct_dsc                      BOOLEAN   
r_immutable_flag                  BOOLEAN   
r_frozen_flag                     BOOLEAN   
r_has_events                      BOOLEAN   
acl_domain                        CHAR(32)  
acl_name                          CHAR(32)  
a_special_app                     CHAR(32)  
i_is_reference                    BOOLEAN   
r_creator_name                    CHAR(32)  
r_is_public                       BOOLEAN   
r_policy_id                       ID        
r_resume_state                    INTEGER   
r_current_state                   INTEGER   
r_alias_set_id                    ID        
i_is_replica                      BOOLEAN   
i_vstamp                          INTEGER   

    

Note: Workspace will not let you issue a DESCRIBE command in the DQL Passthrough dialog. You can only issue the DESCRIBE command using the idql command line utility.

Using API

The describe api is very similar to the DESCRIBE DQL command. The syntax is

        
describe,c,type,object type

    

The result set is the same as the result of the DESCRIBE DQL command.

Tips and Tricks

Don’t Let Your Object Hierarchy Get Too Deep

For performance reasons, it is best to keep your object hierarchy as shallow as possible. The reason for this is that each level of the object hierarchy is stored in a separate table in the database. In order to manipulate an object, the Documentum server must join that object type’s tables with the tables of all of the other object types in the hierarchy above it. The more levels in your hierarchy, the more tables that must be joined together. And database joins are very expensive.

For example the following object hierarchy must do 4 joins (one for each level) when you query on plant_maintenance_report.

        
       dm_document
            |
            |
         Report
            |
            |
    technical_report
            |
            |
plant_maintenance_report

    

It is advisable to try to collapse this hierarchy. The typical way to do this is to add all the custom attributes to the report object and add an extra attribute that identifies the type of report. You can still query for plant maintenance reports by using a where clause like this: where report_type = 'Plant Maintenance Report'. The resulting type hierarchy will look like this.

        
       dm_document
            |
            |
         Report

    

Creating Text Attributes Longer than 255 Characters

Typically, the maximum size of a string attribute in Documentum is 255 characters. However, Oracle users know that the Oracle database can support columns up to 2000 characters long. Luckily, Documentum does allow users of Oracle to have attributes that are greater than 255 characters. To do this, you must first create the attribute with a length of 255 characters or less. Then you may issue the ALTER TYPE DQL command to increase the size.

        
CREATE TYPE large_string_test (large_string CHAR(255)) WITH SUPERTYPE dm_document

    

To increase the attribute’s size to 2000 characters, use the ALTER TYPE command.

        
ALTER TYPE LARGE large_string_test MODIFY large_string CHAR(2000)

    

Object Types as an Alternative to Registered Tables

Sometimes you may need a database table to store validation or auditing information, but you do not want to go through the hassle of registering a table. Documentum allows you to create object types with no supertype. Since these objects are not inherited from any other type, Documentum does not have to issue any joins or carry any unwanted baggage. The performance of querying a type with no supertype is similar to querying a registered table. The syntax of creating an object with no supertype is the same as creating a normal object - you simply specify “NULL” as the supertype.

Note that since this type of object is not inherited from dm_syobject, it can not live in a folder, it does not have content or ACLs and can not be versioned.

As an example of using an object with null supertype, imagine that you have an attribute dialog you wish to provide a picklist of values for the keywords attribute. You must issue a validation object with no supertype. The validation object has two attributes, constraint and data.

        
CREATE TYPE validation (constraint  char(32), data char(32) WITH SUPERTYPE NULL

    

You then create several validation objects with different values for the keywords pick list.

        
CREATE validation OBJECT SET constraint = 'industry', SET data = 'Education'}
CREATE validation OBJECT SET constraint = 'industry', SET data = 'Petrochemical'}
CREATE validation OBJECT SET constraint = 'industry', SET data = 'Financial'}

    

Now to populate the pick list, issue a query like this

        
SELECT data FROM validation WHERE constraint = 'industry'

    
1 Votes | Average: 4 out of 51 Votes | Average: 4 out of 51 Votes | Average: 4 out of 51 Votes | Average: 4 out of 51 Votes | Average: 4 out of 5 (1 votes, average: 4 out of 5)
Loading ... Loading ...

Comment on this article:

You must be logged in to post a comment.

Notification

Subscribe to our newsletter to be notified when new articles are posted. You can unsubscribe at any time.