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 |
4.1.1 Key links
| 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_Typeis one ofActivity,Artifact,Class,Interaction,Requirement,State,StateMachine,UseCase(and probably some more) andNTypeis 8 andPDATA1has a number greater then zero thenPDATA1corresponds to t_diagram.Diagram_ID of the composite diagram. -
Artifactand 32 means that it renders an image. Unfortunately I have no idea where that image comes from. -
NTypehas 0 or 1 for lots of plain elements. It’s not obvious what might be the difference. -
ConstraintandMessageEndpointseem to have 2 forNType. - 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 …