Documentum virtual documents
A virtual document (VD) is a SysObject that owns an ordered tree of other SysObjects. The root is still a document — type tag 09, the dm_document family — not a folder. Folder objects (type tag 0b) cannot be components.
r_is_virtual_doc
Non-zero on an object that has been used as a VD root (commonly 1). The flag does not make it a different type. Components of a VD can themselves be virtual documents; that is how you get depth.
select object_name, r_is_virtual_doc
from dm_sysobject
where r_is_virtual_doc > 0
dmr_containment
Each parent/child link is a dmr_containment object: parent id, component id, order, and the binding that decides which version of the child you get when the tree is resolved. You do not store a folder path on the VD; membership is this containment row, not i_folder_id.
select parent_id, component_id, order_no, version_label
from dmr_containment
where parent_id = id('09xxxxxxx')
Binding
| Binding | What you get at resolve time |
|---|---|
| CURRENT | Whatever version of the component carries CURRENT when you open the VD. Late. A later checkin of the child shows up in the parent. |
| Version | Early. The containment points at one version’s object id. Later checkins of the child do not replace it. |
| Label | Follow a symbolic version label on the component (not necessarily CURRENT). If that label moves, so does the binding. |
| Snapshot | An assembly taken at a point in time. Component versions are recorded so later edits of the children do not change what the snapshot contains. |
Freeze and unfreeze
r_frozen_flag marks a frozen VD or assembly: components cannot be added, removed, or rebound until you unfreeze. r_immutable_flag is the broader “this object may not be modified” bit (also used by retention and other policies). Freeze typically sets both; unfreeze clears the freeze flag when policy still allows it. Immutable without frozen is a different lock — do not treat the two attributes as synonyms.
DQL: IN DOCUMENT
Direct children of one VD. Substitute the root’s id; do not paste a real one into notes or tickets.
select object_name
from dm_sysobject
in document id('09xxxxxxx')
The whole tree uses DESCEND (that spelling — not DESCENT):
select object_name
from dm_sysobject
in document id('09xxxxxxx') descend
Pin a version of the root with VERSION:
select object_name
from dm_sysobject
in document id('09xxxxxxx') version 'CURRENT'
Object ids are 16 hex characters. Examples use 09xxxxxxx: 09 is the dm_document type tag, and the rest is x because those digits include the docbase id.