Hello,
This post is relating to repeating and single attributes in underlying database. Documentum objects support 2 types of attributes:
- Single Value Attributes
Single Value properties are properties that can hold a single value at a time like the attributes r_object_id, object_name,…etc. - Repeating Attributes
Repeating Attributes are properties that can hold multiple values like the attributes Keywords, i_folder_id, r_aspect_name…etc.
TABLES
All objects/properties/attributes are saved in underlying database. Depending of object in which the attribute is defined and its type (single/repeating), the attribute is stored either in table “object_type_s” (or single) or “object_type_r” (for repeating). For example, the attributes defined in the dm_sysobject type are stored in the tables dm_sysobject_s and dm_sysobject_r.
If my_huo_object has two custom single single_attr_1 and single_attr_2 and 2 repeating value attributes repeat_attr_1 and repeat_attr_2, then:
- the my_huo_object_s table will be the columns single_attr_1 and single_attr_2
- the my_huo_object_r table will be the columns repeat_attr_1 and repeat_attr_2
So, each single value attribute has single column in the “_s” table. However, the repeating value attribute with others important colmuns as i_position which determines the position of the value in repeating attribute to which it belongs.
For our previous example, the my_huo_object_r table will be the columns repeat_attr_1, repeat_attr_2 and i_postion.
In this example, the custom accelera_doc object type has the supertype, dm_document. Therefore, the following total set of database tables are used to store the properties of accelera_doc objects:
VIEWS
Concerning the views, each object type has 4 views named:
- _sv and _sp for all Single value attributes in conjunction with all super types
- _rv and _rp for all repeating value attributes in conjunction with all super types
The two _sp and _rp views are used by DQL and the two _sv and _rv views are used by the Object Manager. So, in case of requiring to query the table rather than the object use the _sp, _rp views rather than making your own joins between _s or _r tables up the inheritance hierarchy.
For example, the type dm_document has four views: dm_document_sp, dm_document_sv, dm_document_rp and dm_document_rv. If my_huo_object extends dm_document, its views (my_huo_object_sp, my_huo_object_sv, my_huo_object_rp and my_huo_object_rv) will have all the single/repeating attributes of dm_sysobject, dm_document and my_huo_object. Note : dm_document doesn’t have any single attribute or repeating attribute.
CALCULATE REPEATING VALUE POSITION
Some notes concerning th calculate of repeating’s index:
- i_position uses negative numbers for indexing. so, -1 is the first element, -2 is the second, and so on.
The expression “(i_position*-1)-1 as index” and “-(i_position+1) as sameindex” are equivalent.
- Example 1: for standard object
// Retrieve document id and index position where repeating attribute 'r_aspect_name' contains 'aspect_java_lu' # For repeating attribute describe dm_sysobject_r; r_object_id Char(16) i_position Integer i_partition Integer r_aspect_name Char(64) i_folder_id Char(16) authors Char(48) a_effective_date Time/Date a_effective_flag Char(8) a_effective_label Char(32) a_expiration_date Time/Date a_extended_properties Char(32) a_publish_formats Char(32) keywords Char(48) r_component_label Char(32) r_composite_id Char(16) r_composite_label Char(32) r_order_no Integer r_property_bag Char(2048) r_version_label Char(32) # For single attribute describe dm_sysobject_s; r_object_id Char(16) i_position Integer i_partition Integer acl_domain Char(255) acl_name Char(32) a_application_type Char(32) ... select r_object_id, r_aspect_name as my_aspect, (i_position*-1)-1 as index, -(i_position+1) as sameindex from dm_document where r_aspect_name = 'aspect_java_lu' enable (row_based); OR select r_object_id, r_aspect_name as my_aspect, (i_position*-1)-1 as index, -(i_position+1) as sameindex from dm_sysobject where r_aspect_name = 'aspect_java_lu' enable (row_based); OR select r_object_id, r_aspect_name as my_aspect, (i_position*-1)-1 as index, -(i_position+1) as sameindex from dm_sysobject_r where r_aspect_name = 'aspect_java_lu' enable (row_based); r_object_id my_aspect index sameindex 09xxxxxxxxxxxxxa aspect_java_lu 0 0 09xxxxxxxxxxxxxb aspect_java_lu 1 1 09xxxxxxxxxxxxxc aspect_java_lu 1 1 09xxxxxxxxxxxxxd aspect_java_lu 0 0
- Example 2: for the ASPECT
Where do Aspects Store Attribute Values? The dmc_aspect_type_s and dmc_aspect_type_r tables contains the definitions of the aspect. The i_attr_def column contains the name of the table that holds the attributes and values for the Aspect. select i_attr_def from dmc_aspect_type where object_name = 'my_aspect'; i_attr_def = dmi_03xxxxxxxxxxxc # For repeating attribute describe dm_dbo.dmi_03xxxxxxxxxxxc_r; r_object_id Char(16) i_position Integer i_partition Integer additionnal_approvers Char(50) contacts Char(50) ... # For single attribute describe dm_dbo.dmi_03xxxxxxxxxxxc_s; r_object_id Char(16) i_position Integer i_partition Integer afs_request_num Char(12) request_status Char(25) approved_rejected_date Time/Date ... # select r_object_id, contacts as my_contact, (i_position*-1)-1 as index, -(i_position+1) as sameindex from dm_dbo.dmi_03xxxxxxxxxxxc_r where contacts like 'Huseyin%' order by r_object_id, i_position desc; r_object_id my_contact index sameindex 09xxxxxxxxxxxxx9 Huseyin OZVEREN 1 1 09xxxxxxxxxxxxxa Huseyin Ozveren 3 3 09xxxxxxxxxxxxxe Huseyin Me 0 0
Below, the useful link to the Documentum 6 Object-Relational Model :
https://community.emc.com/servlet/JiveServlet/previewBody/1269-102-1-1396/DocumentumContentServer6ORDiagram.pdf
That’s all!!!
Huseyin OZVEREN