4. Most Important Tables

In this chapter we are going into quite some details of the most important tables. Namely these are that for elements, packages, diagrams, diagram objects, connectors and tagged values. Those are the ones you most likely need to retrieve often.

The single columns have a short description of what I think is their meaning. Some are obvious, some are just smoke signals. A reference to the GUI screen shots is placed where this is possible.

To improve readability and reference the properties were either split into several sub-tables or the table has an indicator on top of a logical section. Each sub-table is sorted alphabetically according to the name in Column.

4.1 More things than you find in the Project Browser: t_object

As you already know, this table holds all elements stored in the repository. That is any element you can see in the project browser plus those not shown like notes, boundaries and a couple of other elements. Please note that the Package element is a pendant7 to the Package itself. Part of the information in both is redundant and both link to each other.

The following table lists the most important properties also to be found in the General properties window. The remaining properties are listed subsequently in logical groups.

Column Description
Alias Alias property
Author Author property
Complexity Complexity property
  Valid values are: 1 for Easy, 2 for Medium, 3 for Difficult
GenType Language property String value. Note that this value does not
  appear unless it is defined as Product in the Language Datatypes
Name Name property
Notes Notes property
PDATA5 Keywords property
Phase Phase property String value
Scope Scope property String value
Status Status property corresponds to values in t_statustypes
Stereotype Stereotype property
Version Version property
Column Description
Diagram_ID Only for Text elements; reference to primary key of the diagram
ea_guid A global UID shown here
  Use Repository.GetElementByGUID (ea_guid) to retrieve this element
Object_ID Primary, unique key for the element
  Use Repository.GetElementByID (Object_ID) to retrieve this element
Package_ID Primary key of the package where the element is located
ParentID Only for nested elements: primary key of the object
Classifier_guid See below
4.1.1.1 Classifier_guid

For ActivityParameter elements the Classifier_guid encodes the type of the parameter. This can eventually be one of

{EABOOL00-B653-4f3c-A010-30205D67F5F5}
{EAINT000-B653-4f3c-A010-30205D67F5F5}
{EAREAL00-4339-434b-BC17-A5E1FDC63F6C}
{EASTRING-B653-4f3c-A010-30205D67F5F5}
{EAUNAT00-B653-4f3c-A010-30205D67F5F5}

And now guess…

Another use came with the introduction of connectors from connectors. These create elements with object type ProxyConnector. Here the Classifier_guid holds the GUID of the corresponding connector.

4.1.2 Details

Column Description
Abstract Abstract property
Cardinality Cardinality property String value
Concurrency String equivalent of the Concurrency property for class elements
IsActive Boolean values for the Is* properties
IsLeaf ditto
IsSpecification ditto
IsRoot ditto
Persistence Persistence property String value

4.1.3 Dock

Column Description
CreatedDate Created property
GenFile Filename property String value
ModifiedDate Modified property
Multiplicity Multiplicity property String value

4.1.4 Appearance

Column Description
Backcolor Background Color property RGB values in decimal
Bordercolor Border Color property RGB values in decimal
BorderStyle For frame-like elements (boundaries etc.).
  Corresponds to the style (0..3) where 3 = solid line
BoderWidth Border Width property
Fontcolor Font Color property RGB values in decimal
StyleEx Individual font settings

4.1.5 Object_Type and NType

Another classical database design anti-pattern can be found in the two columns Object_Type and NType. While Object_Type is a string value, NType adds forgotten salt to any of the expressions depending on some additional context informtion.

The meaning of NType per Object_Type is hard to structure due to its context sensitivity. So here are a couple of statements:

  • If Object_Type is one of Activity, Artifact, Class, Interaction, Requirement, State, StateMachine, UseCase (and probably some more) and NType is 8 and PDATA1 has a number greater then zero then PDATA1 corresponds to t_diagram.Diagram_ID of the composite diagram.
  • Artifact and 32 means that it renders an image. Unfortunately I have no idea where that image comes from.
  • NType has 0 or 1 for lots of plain elements. It’s not obvious what might be the difference.
  • Constraint and MessageEndpoint seem to have 2 for NType.
  • The following table lists a couple of further combinations8:
Object_Type NType Meaning
Text 0 plain text
  18 Diagram Note
  19 Hyperlink; Name has $help://, $inet://, etc.
  76 Legend
  82 Diagram Hyperlink; PDATA1 == t_diagram.Diagram_ID
Event 0 Send
  1 Receive
  2 Accept timer
UMLDiagram 0 Frame; PDATA1 == t_diagram.Diagram_ID
  1 Diagram reference; PDATA1 == t_diagram.Diagram_ID
StateNode 3 Initial
  4 Final
  5 History
  10 Junction
  11 Choice
  13 Entry point
  14 Exit point
  15 Deep history
  100 Activity initial
  101 Activity final
  102 Flow final
InteractionFragment 0 alt
  1 opt
  2 break
  3 par
  4 loop
  5 critical
  6 neg
  7 assert
  8 strict
  9 seq
  10 ignore
  11 consider
ConditionalNode 18 makes no sense at all

4.1.6 Misc

Column Description
Classifier NULL or 0 where not defined. If > 0 then it is the
  primary key of the element which classifies the element
EventFlags semi-colon separated list of attributes with links into the Risk/Metrics/etc. tables
GenOptions Some very nasty semi-colon separated list of attributes (used for code generation⁈)
GenLinks String value of the class which this one is specialized from
  Usually only set where classes are reverse engineered and the general class is missing
Header1/2 Used for code generation
PDATA1 For Package elements: primary key of the package
  For Elements: Same as the Status column
  For Parts/Instances: GUID of the classifier
  For UseCase: #EXP#=<ep>; semi-colon separated list of Extension Points <ep>
  For Notes: linked element feature name
  For Text displaying as hyperlink: t_diagram.Diagram_ID
  For Requirements: Status property
  For UMLDiagram: Diagram_ID of the underlying diagram;
PDATA2 For Elements: Same as the Priority column
  For Notes: Object_ID of the linked feature element
  For Requirements: Priority property
PDATA3 For Elements: Same as the Difficulty column
  For Notes: Reference name into the linked feature element
  For Ports in classified Parts: the GUID of the corresponding Port in the Classifier.
  For State: t_diagram.Diagram_ID of the composite diagram
  For Requirements: Difficulty property
PDATA4 For Note elements: Yes if the note is linked to an element feature and idref=<val>; list where <val> is the primary key of the connector(s) to which the note is linked
  For elements: If > 0 this is the primary key of the connector for which this element is defines as association class
RunState For objects a list of run state variables
Style see below
Tagged Flag to show that an element it bookmarked (little red triangle in diagram)
TPos Tree order of the element in the project browser

I have no idea why the column Style is called by that name since only StyleEx really has some character style information. Alas, this is a semi-colon separated list of attribute assignments. It’s a Sparxian zoo where all sorts of homeless animals can gather. For example the Locked=true; appears whenever an element has been marked on a diagram with the Is Locked context. The element is now protected from manual changes in the GUI (and even the API, though it does not tell the reason for an update failure in GetLastError) and the element shows a red excalamtion mark in the browser. Another on indicates a linked document if = MDoc=1; There are some more options used like ShowBeh, EScrpt and LinkOpen which seem to be too exotic to be explained here (currently).

4.1.7 Unknown or heritage

Column Description
Effort Always 0
Visibility Always NULL ⁈
StateFlags Always NULL ⁈
PackageFlags Always NULL ⁈
ActionFlags Always NULL ⁈

… omitted …