Professional Documents
Culture Documents
Status Control
Status Control
Disclaimer
1.1 AVEVA does not warrant that the use of the AVEVA software will be uninterrupted, error-free or free from
viruses.
1.2 AVEVA shall not be liable for: loss of profits; loss of business; depletion of goodwill and/or similar losses; loss of
anticipated savings; loss of goods; loss of contract; loss of use; loss or corruption of data or information; any
special, indirect, consequential or pure economic loss, costs, damages, charges or expenses which may be
suffered by the user, including any loss suffered by the user resulting from the inaccuracy or invalidity of any data
created by the AVEVA software, irrespective of whether such losses are suffered directly or indirectly, or arise in
contract, tort (including negligence) or otherwise.
1.3 AVEVA's total liability in contract, tort (including negligence), or otherwise, arising in connection with the
performance of the AVEVA software shall be limited to 100% of the licence fees paid in the year in which the user's
claim is brought.
1.4 Clauses 1.1 to 1.3 shall apply to the fullest extent permissible at law.
1.5 In the event of any conflict between the above clauses and the analogous clauses in the software licence under
which the AVEVA software was purchased, the clauses in the software licence shall take precedence.
Copyright
Copyright and all other intellectual property rights in this manual and the associated software, and every part of it
(including source code, object code, any data contained in it, the manual and any other documentation supplied
with it) belongs to, or is validly licensed by, AVEVA Solutions Limited or its subsidiaries.
All rights are reserved to AVEVA Solutions Limited and its subsidiaries. The information contained in this document
is commercially sensitive, and shall not be copied, reproduced, stored in a retrieval system, or transmitted without
the prior written permission of AVEVA Solutions Limited. Where such permission is granted, it expressly requires
that this copyright notice, and the above disclaimer, is prominently displayed at the beginning of every copy that is
made.
The manual and associated documentation may not be adapted, reproduced, or copied, in any material or
electronic form, without the prior written permission of AVEVA Solutions Limited. The user may not reverse
engineer, decompile, copy, or adapt the software. Neither the whole, nor part of the software described in this
publication may be incorporated into any third-party software, product, machine, or system without the prior written
permission of AVEVA Solutions Limited, save as permitted by law. Any such unauthorised action is strictly
prohibited, and may give rise to civil liabilities and criminal prosecution.
The AVEVA software described in this guide is to be installed and operated strictly in accordance with the terms
and conditions of the respective software licences, and in accordance with the relevant User Documentation.
Unauthorised or unlicensed use of the software is strictly prohibited.
Copyright 1974 to current year. AVEVA Solutions Limited and its subsidiaries. All rights reserved. AVEVA shall not
be liable for any breach or infringement of a third party's intellectual property rights where such breach results from
a user's modification of the AVEVA software or associated documentation.
AVEVA Solutions Limited, High Cross, Madingley Road, Cambridge, CB3 0HB, United Kingdom.
Trademark
AVEVA and Tribon are registered trademarks of AVEVA Solutions Limited or its subsidiaries. Unauthorised use of
the AVEVA or Tribon trademarks is strictly forbidden.
AVEVA product/software names are trademarks or registered trademarks of AVEVA Solutions Limited or its
subsidiaries, registered in the UK, Europe and other countries (worldwide).
The copyright, trademark rights, or other intellectual property rights in any other product or software, its name or
logo belongs to its respective owner.
Status Control
Revision Sheet
Status Control
Contents Page
Status Control
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1:1
Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1:1
Guide Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1:1
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6:1
Example to Prevent Modification of an Object of a Certain Status. . . . . . . . . . . . . . . . . . . . 6:1
Example to Catch when the Dictionary Database has been Deferred . . . . . . . . . . . . . . . . . 6:1
Example to Prevent Change of Status after a Certain Level . . . . . . . . . . . . . . . . . . . . . . . . 6:1
Example to Prevent Removal of Status from an Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6:2
Example where a User may only Amend Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6:2
1 Introduction
Status Control is the ability to control and report on the status of individual model objects as
they progress through their lifecycles. It can be applied to any model objects, e.g. tagged
items, catalogue components, drawings, etc. It can be expressed in a variety of ways, e.g.
Approved for Construction, 80% Complete, Clash Free, etc.
The desired project configuration is created by administrators as Status Definitions in
Lexicon. It is applied to model objects by end users in any of the constructor modules -
Design, Outfitting, Paragon, Spooler, Diagrams, Hull, Draft and Marine Drafting - using the
Status Controller.
Status Control can be tightly coupled with Data Access Control. For example, it can be
configured so that only certain users may approve an object. It can also be configured to
prevent changes to an object once it has achieved a particular status.
A core concept for Status Control is that of a Controlled Object. A Controlled Object is
defined as any model object that has one or more Status Values assigned to it. A Controlled
Object may be controlled for multiple statuses to suit processes for design, manufacturing,
fabrication, construction, etc.
1.1 Assumptions
End users have a basic knowledge of PDMS/Marine.
Administrators have a reasonable knowledge of Lexicon, and if required can use the Access
Control Assistant in Admin.
Developers have a reasonable knowledge of PML and/or C# (.NET).
Configuring Status Definitions in describes how administrators can set up the status
Lexicon definitions for their project
Status Controller in Design and describes how end users can control the status of
other Constructor Modules their model objects
Using Status Control with Data gives examples for administrators to extend
Access Control control of data integrity
Using Status Control with Auto gives examples for administrators to customise
Colours graphical views
Customising Status Control using shows developers how to add functionality from
PML PML
Customising Status Control using shows developers how to add functionality from
C# (.NET) C#
Distributing Customised Status shows where Status Layout files are stored
Layouts
2 Example Workflow
Consider the following simple workflow for a Design Status definition which will be used as a
worked example.
This example has a primary route from starting work through to releasing, with stages for
checking and approving, and options at various stages to put back for rework.
Status Link objects reside in the same database as the model objects they reference, so that
they are globally distributed with those model objects. The Status Link holds references to
the model object and to the Status Value, along with attribute data for comments and history.
So status data is not stored directly on the model object and the user does not need write
access to the model object in order to set its status.
The Status Link objects are not visible to the end user, but the status data is available on the
model object as pseudo attributes. Administrators need to know of their existence for
purposes of Data Access Control.
Lexicon uses a hierarchy of Status World, Status Definition and Status Value data types
to define a Example Workflow. In the Lexicon Dictionary Explorer, right click on the
Dictionary WORLD and select New Status World then enter a name in the Current Element
Editor.
Right click on the new Status World in the Explorer and select New Status Definition (the
user can also create Status Groups to contain Status Definitions). Enter a Name and
Description in the Editor
Note: These will typically be similar but the description can include spaces and will be used
in the Status Controller if it is set.
The next step is to define the Controllable element types for this Status Definition. Click on
the selection button to show the Select element types form.
Select EQUIPMENT, click Add to list, and then click OK. The user can add other types if
the definition is to apply to multiple types of elements.
Right click on the Status Definition in the Explorer and select New Status Value. Enter a
Name, Description and Numerical value in the Editor.
Note: Numerical value is optional and may be used as a percentage or a simple value.
Note: Status Value name uniqueness applies only within the owning Status Definition. So
you can use repeat names such as Preliminary and Released in different
definitions.
Select the status values that will be valid transitions from this value and click OK.
In the drop-down selection for Promote and Demote, select the appropriate values.
Note: Promote and demote are optional and simply denote a main route through the
workflow - any valid transitions not marked as promote or demote will still be
available in the Status Controller.
Select the Status Definition again in the Explorer and note its Initial status.
Note: It will be set to the first status value by default but the user can change this if
required.
The constructor modules such as Paragon, Design and Outfitting, use the Status Controller
to interact with Controlled Objects. Click on Display > Status Controller to display the
Status Controller window. Initially this will be empty.
Click Add to display the Reference Browser. Use the Explorer and Search tabs to select
the required owning elements, then click OK. If the Scope window is cancelled, all
controllable elements can be included in the Status Controller content.
Note: This can take several minutes. If unsure what to include, select an element such as a
zone that has few offspring; the scope can always be changed later.
To display particular status data, click in the drop-down list for Status Layout and select New
Status Layout.
Alternatively right click in the grid area and select Status Layout.
The Select Status Columns window is displayed. For the example, check the columns for
Equipment Design Status then click OK.
The Set Layout Scope Elements window is displayed to allow scope selection. If cancelled,
the Status Controller will be populated with those objects that are or could be controlled by
the selected status definitions. A selected scope will reduce the number of rows populated,
which can mean a much faster display of the Status Controller. If more than one Status
Definition has been selected, one can be selected as the Focus Status in the drop-down list,
and this will be used for Edit Status operations.
Use the Set Layout Scope toolbar button to modify the currently displayed scope.
Display other attribute columns by right clicking in one of the column titles and selecting
Column Setup. The pseudo attribute expressions for the status columns already added will
be shown in this window.
Note: The user can show the status of a related object in its own column. For example, if
the user is managing status of schematic equipment (SCEQUI), they can show the
status of a linked EQUI using an expression like
This name will then appear in the Status Layout drop-down list on the Status Controller. Use
Save Status Layout As to save the layout with a different name.
Note: The other options available on the right click menu from the column titles, including
Settings and Export to Excel, which function similarly to in the Search Results.
This will display the form to edit values of the Focus Status for the selected objects. Initially
the objects are Not Controlled, i.e. they have not been assigned a status value (for this
status definition - they may have status values for other status definitions). Click on the
drop-down list and select Assign to the initial value, enter a Comment (optional), and then
click on OK or Apply.
The available options for status values will then reflect the valid transitions in the status
definition. For example, from Work Completed, there are two transitions.
If Promote and Demote transitions have been defined, these can be selected directly.
This will display a variant of the Edit Status window showing appropriate options.
Note: Actual values will be shown if all selected objects share the same values, otherwise
they will be displayed as mixed.
The Remove Status option will delete the status data for the selected objects, so that they
will no longer be controlled.
The Navigate To option will be enabled for a single row selection and will set the current
element.
The Status History also has right click options including Export to Excel.
Hovering the cursor over one of the regions on the chart gives some figures for the objects it
represents.
A right click context menu is available while the cursor is over a region on the chart. The
selected option is applied to the objects represented by that region.
For example, selecting List Elements displays a list of the elements for that region (you can
copy and paste from this window).
A right click menu in the background of the window offers various options, including a range
of Chart Types.
The Chart Legend option controls positioning of the legend, e.g. left, right, etc.
The Focus Status Toolbar enables selection of status layout, scope and focus status
definition. The button in between these represents Save Status Layout.
The Status Commands Toolbar buttons represent Promote, Demote, Edit Status, Remove
Status, Status History and Statistical Report.
The Element Interaction Toolbar buttons represent Select CE in Grid, Select CE Members
in Grid, and Select Graphical Selection in Grid.
A number of pseudo attributes are available on controlled objects to return their current
status data, and a set of commands are provided to set status data. These provide an
alternative to using the object methods described above.
To query a qualified pseudo attribute on the command line, enter the qualifier in brackets
noting the space required in front of the closing bracket, e.g.
Q STVVAL(/DesignStatus )
This will return the name of the status value, e.g. /WorkPending
To obtain this information in PML2, add the required status definitions into an array and use
the qualified attribute method as illustrated below.
!statusDefinitions[1] = /DesignStatus
!statusValues = !!ce.attribute('STVVAL', !statusDefinitions)
In this example the first element of the status values array will now be set to the status value
object, e.g.
Q var !statusValues[1].desc
will return the string 'Work Pending'.
When using status value as a condition in a collection, a command like the following will not
return the expected objects:
var !myItems collect all equi with (stvval( /EquipmentDesignStatus )
eq /Approved )
This is because the name of the status value is local to the definition (so that the same
name can be used in multiple definitions). Instead use one of these:
var !myItems collect all equi with (stvnam( /EquipmentDesignStatus )
eq '/ Approved')
var !myItems collect all equi with (stvnum( /EquipmentDesignStatus ) gt 75)
5.2 Commands
STM ASS[ign] /Definition [to SELELE] ['comment']
Assigns Status /Definition to current element or SELELE making it controlled by this status
and sets the current status value to INIVAL. If a comment is given, it will be set otherwise
any current comment is cleared.
Status Control can be tightly coupled with Data Access Control to preserve data integrity.
Below are some examples of what can be achieved. They have been created on the basis
of Roles where the first PEROP grants all rights on all element and attribute classes, and
then successive PEROPs deny some rights under specific conditions.
6.1 Examples
6.1.2 Example to Catch when the Dictionary Database has been Deferred
This traps the situation where a user has tried to defeat the access control by deferring the
dictionary database containing the status definitions.
Create a PEROP that denies modify and delete operations on equipment for all attributes if
the Design Status is not a valid reference. Here is the condition.
COND ( NOT UNSET ( ATTRIB STVUNR ) )
A suitable error message would be: DAC: You may not modify an object with an unresolved
status
Status values can be used in the Element Rules for Auto Colours.
7.1 Examples
7.1.2 Example Rule for Equipment with Design Work Completed or Higher
Rule Name: Equipment Completed
Types: EQUI
Rule: attrib stvnum( /DesignStatus ) ge 50
7.1.3 Example Rule for Equipment with Design Status Not Controlled
Rule Name: Equipment Not Controlled
Types: EQUI
Rule: badref ( attrib stvval( /DesignStatus ) )
If these Element Rules are defined, then Auto Colour rules can be added, for example to
show completed equipment in green, pending equipment in yellow, and uncontrolled
equipment in red.
Status Control operations can be carried out using PML. All the operations that can be
carried out using the Status Controller can also be done using the appropriate objects and
syntax.
Specific company and project requirements can be implemented using Status Events and a
framework is provided for this purpose.
Event Description
BeforeStatusAssign Before a status is assigned to an object
AfterStatusAssign After a status is assigned to an object
BeforeStatusRemove Before a status is removed from an object
AfterStatusRemove After a status is removed from an object
BeforeStatusChange Before a status is changed/promoted/demoted on an
object
AfterStatusChange After a status is changed/promoted/demoted on an
object
BeforeControlledElementDelete Before a controlled object is deleted
Event Description
BeforeSavework Before savework when there are changes to status data
AfterSavework After savework when there are changes to status data
BeforeFlush Before flush when there are changes to status data
AfterFlush After flush when there are changes to status data
-- End of customisation
--==========================================================
Important: Other parts of the statusProjectHandler PML object should not be modified.
A number of examples are provided (commented out). These make use of the statusData
PML object documented below.
Note: The statusData object can hold status data for a single object and status definition
combination, or it can hold an array of statusData objects for multiple objects and
status definition combinations (see the constructor methods below).
8.3.1 Members
8.3.2 Constructors
Method Description
statusData() Constructor for all status definitions on CE
statusData( Constructor for single status definition on CE
STRING name of status definition )
statusData( Constructor for all status definitions on a single
DBREF of object ) object
statusData( Constructor for all status definitions on array of
ARRAY of DBREF of objects ) objects
statusData( Constructor for single object and single status
DBREF of object, definition
DBREF of status definition )
statusData( Constructor for single object and single status
DBREF of object, definition
STRING name of status definition )
statusData( Constructor for array of objects and single status
ARRAY of DBREF of objects, definition
DBREF of status definition )
statusData( Constructor for array of objects and single status
ARRAY of DBREF of objects, definition
STRING name of status definition )
Method Description
output() is ARRAY of STRING Return one line status summary per object
(automatically does a refresh with refresh mode part)
outputAll() is ARRAY of STRING Return multi line status details per object
(automatically does a refresh with refresh mode full)
print() Print one line status summary per object
printAll() Print multi line status details per object
refresh() Reread status data
refreshModeFull() Set refresh mode to full (slows performance)
refreshModeNone() Set refresh mode to none (best performance)
refreshModePart() Set refresh mode to part
Method Description
assign() Assign stored status definition to object(s)
assign ( Assign stored status definition to object(s) and set
STRING comment ) comment
assignStatus( Assign status definition to object(s)
DBREF of status definition )
assignStatus( Assign status definition to object(s)
STRING name of status definition )
assignStatus( Assign status definition to object(s) and set comment
DBREF of status definition,
STRING comment )
assignStatus( Assign status definition to object(s) and set comment
STRING name of status definition,
STRING comment )
remove() Remove stored status definition from object(s)
removeStatus( Remove status definition from object(s)
DBREF of status definition)
removeStatus( Remove status definition from object(s)
STRING name of status definition )
Method Description
promote() Promote stored status for object(s)
promote( Promote stored status for object(s) and set comment
STRING comment )
promoteStatus( Promote status for object(s)
DBREF of status definition )
promoteStatus( Promote status for object(s)
STRING name of status definition )
promoteStatus( Promote status for object(s) and set comment
DBREF of status definition,
STRING comment )
promoteStatus( Promote status for object(s) and set comment
STRING name of status definition,
STRING comment )
demote() Demote stored status for object(s)
Method Description
set( Set stored status for object(s)
STRING name of status value)
set( Set stored status for object(s) and set comment
STRING name of status value,
STRING comment )
setStatus( Set status for object(s)
DBREF of status definition,
STRING name of status value )
setStatus( Set status for object(s)
STRING name of status definition,
STRING name of status value)
setStatus( Set status for object(s) and set comment
DBREF of status definition,
STRING name of status value,
STRING comment )
setStatus( Set status for object(s) and set comment
STRING name of status definition,
STRING name of status value,
STRING comment )
Method Description
init() Internal method to initialise member data
clear() Internal method to clear member data
Method Description
statuses() Returns the available statuses as an array of STATUS
Method Description
statusEvents( Constructor that initialises for the status definition
STRING name of status definition )
Initialise( Initialises for the status definition
STRING name of status definition )
Method Description
status( Constructor
STRING name of status definition )
assign( Assign status to object
STRING name of object )
assign ( Assign status to objects
ARRAY of names of objects )
assign ( Assign status to object and set comment
STRING name of object,
STRING comment )
assign ( Assign status to objects and set comment
ARRAY of names of objects,
STRING comment )
controlledElements() Returns an array of names of objects controlled by
this status
demote( Demote status on object
STRING name of object )
demote ( Demote status on objects
ARRAY of names of objects )
demote ( Demote status on object and set comment
STRING name of object,
STRING comment )
Method Description
statusValue( Constructor
STRING name of status definition,
STRING valname of status value )
statusValue ( Constructor
STATUS status definition,
STRING valname of status value )
description() Returns description of status value
name() Returns valname of status value
number() Returns number of status value
validTransitions() Returns array of STATUSVALUE that are valid
transitions
Method Description
assignedStatus( Constructor
STRING name of status definition,
STRING name of model object )
comment() Returns comment from status link
currentValue() Returns STATUSVALUE status value that status link
refers to
definition() Returns STATUS status definition that status value
is owned by
thisElement() Returns STRING reference number of model object
that status link refers to
statusEvent.BeforeStatusChange += new
StatusEvent.BeforeStatusChangeEventHandler(My_BeforeStatusChange
);
// ...
// Event handler
private void My_BeforeStatusChange (object sender,
CancelStatusEventArgs e)
{
// Do any extra actions and check status change is allowed
The list of available status events is displayed in the Visual Studio Object Browser display as
follows:
Event Arguments
BeforeStatusAssign object sender, CancelStatusEventArgs e
AfterStatusAssign object sender, StatusEventArgs e
BeforeStatusRemove object sender, CancelStatusEventArgs e
StatusEventArgs
CancelStatusEventArgs
Event Arguments
BeforeSavework object sender, CancelDBChangeEventArgs e
AfterSavework object sender, DBChangeEventArgs e
BeforeFlush object sender, CancelDBChangeEventArgs e
AfterFlush object sender, DBChangeEventArgs e
DBChangeEventArgs
CancelDBChangeEventArgs
Individual users can customise and save their own status layouts. This process is described
in Status Layout in Status Controller in Design and other Constructor Modules. As an
administrator you may decide to create a set of project standard status layouts for all users
on the project.
Status layouts are stored in files in the user’s Local Settings Application Data folder, for
example, for the project BAS the folder will be:
C:\Documents and Settings\john.smith\Local Settings\Application
Data\Aveva\PDMS\BASStatusGridProfiles
An administrator who has created a set of status layouts in their own folder can copy these
files and distribute them to other users to include in their own equivalent folders. There is no
need to copy the LastSelectedStatusGridProfile or WindowsLayout files in this folder as
these will be created automatically.
This section suggests an approach to upgrading status data created by AVEVA Model
Manager.
For Model Manager, the equivalent to a Status Definition is a list of values for a particular
controlled object type and is defined in VPE. Individual controlled objects then hold one of
these values in a specified attribute, e.g. :mmstatus.
A Status Definition could be created for each list of values, applied to the particular
controlled object type. Where the controlled object type is qualified by a filter, e.g. PIPE with
PURP 'Civils', this could be implemented as a UDET, e.g. :CivilsPipe.
An allowable transition should be set from the initial value to each other value in the
definition, to support the next stage (some of these transitions could be removed later).
A macro would then be written, to loop through each controlled object, assign its appropriate
status definition then set it to the equivalent status value for its Model Manager status data.
Index
C L
Change Events Lexicon
Database . . . . . . . . . . . . . . . . . 8:2, 9:5 Configuring Status Definitions . . . . . 3:1
Status . . . . . . . . . . . . . . . . . . . . . . . . 9:4
Class M
Status . . . . . . . . . . . . . . . . . . . . . . . . 9:1
StatusCommand . . . . . . . . . . . . . . . . 9:3 Methods
StatusEvents . . . . . . . . . . . . . . . . . . 9:3 Abort Changes . . . . . . . . . . . . . . . . . 8:3
StatusManagement . . . . . . . . . . . . . 9:1 Add Checks . . . . . . . . . . . . . . . . . . . 8:3
StatusValue . . . . . . . . . . . . . . . . . . . 9:2 Assign and Remove . . . . . . . . . . . . . 8:6
Classes Dependent Changes . . . . . . . . . . . . 8:3
.NET . . . . . . . . . . . . . . . . . . . . . . . . . 9:1 Intended for User . . . . . . . . . . . . . . . 8:5
Commands . . . . . . . . . . . . . . . . . . . . . . . 5:3 Internal . . . . . . . . . . . . . . . . . . . . . . . 8:7
Customising Promote and Demote . . . . . . . . . . . . 8:6
StatusProject Handler PML Object . . 8:2 Set Status . . . . . . . . . . . . . . . . . . . . 8:7
Synchronise External Systems . . . . 8:3
D
N
Data Model
Status Control . . . . . . . . . . . . . . . . . . 2:2 Namespaces and Assemblies . . . . . . . . 9:1
E O
Example Object
Add Event Handler . . . . . . . . . . . . . . 8:9 Assignedstatus . . . . . . . . . . . . . . . 8:11
Set and Get Status Data . . . . 8:8, 8:12 Status . . . . . . . . . . . . . . . . . . . . . . . . 8:9
Statusevents . . . . . . . . . . . . . . . . . . 8:8
G Statusmanagement . . . . . . . . . . . . . 8:8
Statusvalue . . . . . . . . . . . . . . . . . . 8:11
Graphical View
Drag and Drop . . . . . . . . . . . . . . . . 4:11 P
PML
Core Status Objects . . . . . . . . . . . . . 8:8
PML Object
StatusData . . . . . . . . . . . . . . . . . . . . 8:3
Pseudo Attributes . . . . . . . . . . . . . . . . . . 5:1
R
Reports
Statistical . . . . . . . . . . . . . . . . . . . . . 4:7
S
Status
Controller Toolbar . . . . . . . . . . . . . . 4:10
Distributing Customised Layouts . . 10:1
Edit Operations . . . . . . . . . . . . . . . . . 4:5
History . . . . . . . . . . . . . . . . . . . . . . . 4:7
Layout . . . . . . . . . . . . . . . . . . . . . . . . 4:1
Status Change
Events . . . . . . . . . . . . . . . . . . . . . . . 8:1
Status Control
Auto Colours . . . . . . . . . . . . . . . . . . . 7:1
C# . . . . . . . . . . . . . . . . . . . . . . . . . . . 9:1
Data Access Control . . . . . . . . . . . . . 6:1
Examples . . . . . . . . . . . . . . . . . 6:1, 7:1
using PML . . . . . . . . . . . . . . . . . . . . 8:1
Status Controller
Constructor Modules . . . . . . . . . . . . 4:1
Design . . . . . . . . . . . . . . . . . . . . . . . 4:1
Status Events
PML . . . . . . . . . . . . . . . . . . . . . . . . . 8:1
W
Workflow
Example . . . . . . . . . . . . . . . . . . . . . . 2:1