Customizing Powerdesigner
Customizing Powerdesigner
Customizing Powerdesigner
PowerDesigner
Windows
Contents
CHAPTER 1: PowerDesigner Resource Files ...............1
Opening Resource Files in the Editor ..................................3
Navigating and Searching in Resource Files ......................5
Editing Resource Files ..........................................................6
Saving Changes .....................................................................6
Sharing and Embedding Resource Files .............................6
Creating and Copying Resource Files .................................7
Comparing Resource Files ...................................................7
Merging Resource Files ........................................................8
iii
Contents
iv
Contents
Contents
vi
Contents
vii
Contents
viii
Contents
ix
Contents
Contents
.........................................................................................353
xi
Contents
xii
CHAPTER 1
Definition file: customize the metamodel to define the objects available for a specific
DBMS or language:
DBMS definition files (.xdb) - define a specific DBMS in the PDM (see Chapter 4,
DBMS Definition Files on page 119).
Process, object, and XML language definition files (.xpl, .xol, and .xsl) define a
specific language in the BPM, OOM, or XSM (see Chapter 3, Object, Process, and
XML Language Definition Files on page 107).
Extension files (.xem) extend the standard definitions of target languages to, for
example, specify a persistence framework or server in an OOM. You can create or attach
one or more XEMs to a model (see Chapter 2, Extension Files on page 11).
Report templates (.rtp) - specify the structure of a report. Editable within the Report
Template Editor (see Core Features Guide > Storing, Sharing and Reporting on Models >
Reports).
Report language files (.xrl) translate the headings and other standard text in a report (see
Chapter 6, Translating Reports with Report Language Files on page 287).
Impact and lineage analysis rule sets (.rul) - specify the rules defined for generating impact
and lineage analyses (see Core Features Guide > Linking and Synchronizing Models >
Impact and Lineage Analysis).
Object permission profiles (.ppf) - customize the PowerDesigner interface to hide models,
objects, and properties (see Core Features Guide > Administering PowerDesigner >
Customizing the PowerDesigner Interface > Using Profiles to Control the PowerDesigner
Interface).
User profiles (.upf) - store preferences for model options, general options, display
preferences, etc (see Core Features Guide > Modeling with PowerDesigner > Customizing
Your Modeling Environment > User Profiles).
Model category sets (.mcc) - customize the New Model dialog to guide model creation (see
Core Features Guide > Administering PowerDesigner > Customizing the PowerDesigner
Interface > Customizing the New Model Dialog).
Conversion tables (.csv) - define conversions between the name and code of an object (see
Core Features Guide > Modeling with PowerDesigner > Objects > Naming
Conventions).
Description
Properties - Opens the resource file in the Resource Editor.
New - Creates a new resource file using an existing file as a model (see Creating and
Copying Resource Files on page 7).
Save - Saves the selected resource file.
Save All - Saves all the resource files in the list.
Path - Specifies the directories that contain resource files to populate this list and other
places in the PowerDesigner interface where resources of this type can be selected. By
default, only the directory containing the resource files delivered in the PowerDesigner
installation is specified, but you can add as many additional directories as necessary. The
first directory in the list is the default, which is proposed whenever you save a you file.
If you plan to modify the delivered resource files or create your own, we recommend that
you store these files in a directory outside the PowerDesigner installation directory.
The root of the library belonging to your most recent repository connection is implicitly
included at the head of the list, and is scanned recursively (see Core Features Guide >
Administering PowerDesigner > Deploying an Enterprise Glossary and Library).
Note: In rare cases, when seeking resource files to resolve broken references in models, the
directories in the list are scanned in order, and the first matching instance of the required
resource is used.
Compare - Selects two resource files for comparison.
Merge - Selects two resource files for merging.
Description
Check In - [if the repository is installed] Checks the selected resource file into the repository. For information about storing your resource files in the repository, see Core Features
Guide > Administering PowerDesigner > Deploying an Enterprise Glossary and Library.
Update from Repository - [if the repository is installed] Checks out a version of the selected
file from the repository to your local machine.
Compare with Repository - [if the repository is installed] Compares the selected file with a
resource file stored in the repository.
To open any extension file currently attached to your model, double-click its entry inside the
Extensions category in the Browser.
To open any other resource file, select Tools > Resources > Type to open the relevant
resource file list, select a file in the list, and then click the Properties tool.
In each case, the file opens in the Resource Editor, in which you can review and edit the
structure of the resource. The left-hand pane shows a tree view of the entries contained within
the resource file, and the right-hand pane displays the properties of the currently-selected
element:
Note: You should never modify the resource files shipped with PowerDesigner. If you want to
modify a file, create a copy using the New tool (see Creating and Copying Resource Files on
page 7).
Each entry is a part of the definition of a resource file, and entries are organized into logical
categories. For example, the Script category in a DBMS language file collects together all the
entries relating to database generation and reverse engineering.
You can drag and drop categories or entries in the tree view of the resource editor and also
between two resource editors of the same type (for example two XOL editors).
Note: Some resource files are delivered with "Not Certified" in their names. Sybase will
perform all possible validation checks, however we do not maintain specific environments to
fully certify these resource files. We will support them by accepting bug reports and providing
fixes as per standard policy, with the exception that there will be no final environmental
validation of the fix. You are invited to assist us by testing fixes and reporting any continuing
inconsistencies.
Tool
Description
Back (Alt+Left) - Go to the previous visited entry or category. Click the down arrow to
directly select from your history.
Forward (Alt+Right) - Go to the next visited entry or category. Click the down arrow to
directly select from your history.
Lookup (Enter) - Go to the item named in the text box to the left of the tool. If more than one
item is found, they are listed in a results dialog and you should double-click on the desired
item or select it and click OK to go to it.
Click the down arrow to set lookup options:
[extension type] - select the type of extension to search, for example you can search only
stereotypes
Allow wildcard - Enables the use of the characters * to match any string and ? to match
any single character. For example, type is* to retrieve all extensions called
is....
Match case - Search with case sensitivity.
Save (Ctrl+Shift+S) Save the current resource file. Click the down arrow to save the
current resource file under a new name.
Find In Items (Ctrl+Shift+F) - Search for text in entries.
Replace In Items (Ctrl+Shift+H) - Search for and replace text in entries.
Note: To jump to the definition of a template from a reference in another template (see
Templates (Profile) on page 85) or other extension, place your cursor between the percent
signs and press F12. If an extension overrides another item, right-click it and select Go to
super-definition to go to the overriden item.
Description
New
Add items...
Opens a selection dialog box to allow you select one or more of the predefined
metamodel categories or entries to add to the present node. You cannot edit the
names of these items but you can change their comments and values by selecting
their node.
Remove
Restore Comment Restores the default comment for the selected category or entry.
Restore value
Note: You can rename a category or an entry directly from the resource file tree by selecting it
and pressing the F2 key.
Saving Changes
If you make changes to a resource file and then click OK to close the resource editor without
having clicked the Save tool, the changes are saved in memory, the editor is closed and you
return to the list of resource files. When you click Close in the list of resource files, a
confirmation box is displayed asking you if you really want to save the modified resource file.
If you click Yes, the changes are saved in the resource file itself. If you click No, the changes
are kept in memory until you close the PowerDesigner session.
The next time you open any model that uses the customized resource file, the model will take
modifications into account. However, if you have previously modified the same options
directly in the model, the values in the resource file do not change these options.
4. Click OK to open the Compare... dialog, which allows you to review all the differences
between the files.
For detailed information about this window, see Core Features Guide > Modeling with
PowerDesigner > Comparing and Merging Models.
5. Review the differences and then click Close to close the comparison window and return to
the list.
4. Click OK to open the Merge... dialog, which allows you to review all the merge actions
before you complete them.
For detailed information about this window, see Core Features Guide > Modeling with
PowerDesigner > Comparing and Merging Models.
10
CHAPTER 2
Extension Files
Extensions files (*.xem) allow you to customize and extend the PowerDesigner metamodel
to support your exact modeling needs. You can define additional properties for existing
objects or specify entirely new types of objects, modify the PowerDesigner interface
(reorganizing and adding property sheet tabs, Toolbox tools and menu items), and define
additional generation targets and options.
Extension files have an .xem extension and are located in install_dir/Resource
Files/Extende Model Definitions. To view the list of extensions, select Tools >
Resources > Extensions > model type. For information about the tools available in resource
file lists, see Chapter 1, PowerDesigner Resource Files on page 1.
Each extension file contains two first-level categories:
11
Note: Since you can attach several resource files to a model (for example, a target language
and one or more extension files) you can create conflicts, where multiple extensions with
identical names (for example, two different stereotype definitions) are defined on the same
metaclass in separate resource files. In case of such conflicts, the extension file extension
usually prevails. When two XEMs are in conflict, priority is given to the one highest in the List
of Extensions.
12
Extension files listed in grey are attached to the model, while those in black are embedded
in the model.
Note: If you embed an extension file in the model, the name and code of the extension may
be modified in order to make it respect the naming conventions of the Other Objects
category in the Model Options dialog.
13
Description
Name / Code
Specify the name and code of the extension file, which must be unique in a model.
File Name
[read-only] Specifies the path to the extension file. If the XEM has been copied to
your model, this field is empty.
Family / Subfamily
Restricts the availability of the XEM to a particular target family and subfamily.
For example, when an XEM has the family Java, it is available only for use with
targets in the Java object language family. EJB 2.0 is a sub-family of Java.
Auto-attach
Specifies that the XEM will be automatically attached to new models with a target
belonging to the specified family.
Category
Groups XEMs by type for generation and in the Select Extensions dialog. Extensions having the same category cannot be generated simultaneously. If you do
not specify a category, the XEM is displayed in the General Purpose category and
is treated as a generation target.
Enable Trace
Mode
Lets you preview the templates used during generation (see Templates (Profile) on
page 85). Before starting the generation, click the Preview page of the relevant
object, and click the Refresh tool to display the templates.
When you double-click on a trace line from the Preview page, the Resource Editor
opens to the corresponding template definition.
14
Description
Complement
Specifies that the XEM is used to complement the generation of an DBMS or
language genera- language definition, so that items to be generated for the language are merged with
tion
those of the XEM before generation, and all generated files specified by both the
language definition and the XEMs are generated (see Generated Files (Profile) on
page 86). If two generated files have identical names, the file in the XEM
overrides the one defined in the target.
Note: PowerBuilder does not support XEMs for complementary generation.
Comment
Generation - Contains Generation commands, options, and tasks to define and activate a
generation process (see Generation Category on page 112).
Transformation Profile - Groups transformations for application at model generation time
or on demand (see Transformations (Profile) on page 93).
15
16
A customer wants to know the value of his stocks in order to decide to sell or not, and sends a
stock value query from his Internet Browser, which is transferred from his browser to the
database server via the application server.
The first step in defining extensions, is to create an extension file (.xem) to keep them in:
1. Create or open an OOM and select Model > Extensions to open the list of extensions
attached to the model.
2. Click the Add a Row tool to create a new extension file, and then click the Properties tool
to open it in the Resource Editor.
3. Enter Robustness Analysis Extensions in the Name field, and clear the
Complement language generation check box, as these extensions do not belong to any
object language family and will not be used to complement any object language
generation.
4. Expand the Profile category, in which we will create the extensions:
For detailed information about creating extension files, see Creating an Extension File on
page 12.
17
18
Stereotype
Comment
Image file
Entity
Control
control.cur
19
4. Click OK to complete the definition of the custom symbol and return to the Resource
Editor.
5. Repeat these steps for the other stereotypes:
20
Stereotype
Shape Name
Entity
Entity Object
Control
Control Object
Value
Name
Comment
Help message
21
Value
Output message
Default severity
Error
Execute the
check by default
[selected]
4. Select the Check Script tab and enter the following script in the text field:
Function %Check%(link)
' Default return is True
%Check% = True
' The object must be an instance link
If link is Nothing then
Exit Function
End if
If not link.IsKindOf(PdOOM.cls_InstanceLink) then
Exit Function
End If
' Retrieve the link extremities
Dim src, dst
Set src = link.ObjectA
Set dst = link.ObjectB
' Source is an Actor
' Call CompareObjectKind() global function defined in Global
Script pane
If CompareObjectKind(src, PdOOM.Cls_Actor) Then
' Check if destination is an UML Object with "Boundary"
Stereotype
If not CompareStereotype(dst, PdOOM.Cls_UMLObject,
"Boundary") Then
%Check% = False
End If
ElseIf CompareObjectKind(dst, PdOOM.Cls_Actor) Then
' Check if source is an UML Object with "Boundary" Stereotype
If not CompareStereotype(src, PdOOM.Cls_UMLObject,
"Boundary") Then
%Check% = False
End If
End If
End Function
Note: For more information on VBS, see Chapter 7, Scripting PowerDesigner on page
305.
5. Select the Global Script tab (where you store functions and static attributes that may be
reused among different functions) and enter the following script in the text field:
22
23
6. Repeat these steps to create a second check by entering the following values:
Field
Value
Name
Help message
This check ensures that an instance link is not defined between two boundary objects.
Output message
Default severity
Error
[selected]
24
Value
Check Script
Function %Check%(link)
' Default return is True
%Check% = True
' The object must be an instance link
If link is Nothing then
Exit Function
End if
If not link.IsKindOf(PdOOM.cls_InstanceLink) then
Exit Function
End If
' Retrieve the link extremities
Dim src, dst
Set src = link.ObjectA
Set dst = link.ObjectB
' Error if both extremities are 'Boundary' objects
If CompareStereotype(src, PdOOM.Cls_UMLObject, "Boundary") Then
If CompareStereotype(dst, PdOOM.Cls_UMLObject,
"Boundary") Then
%Check% = False
End If
End If
End Function
7. Repeat these steps to create a third check by entering the following values:
Field
Value
Name
Help Message
Output Message
Default Severity
Error
[selected]
25
Value
Check Script
Function %Check%(link)
' Default return is True
%Check% = True
' The object must be an instance link
If link is Nothing then
Exit Function
End if
If not link.IsKindOf(PdOOM.cls_InstanceLink) then
Exit Function
End If
' Retrieve the link extremities
Dim src, dst
Set src = link.ObjectA
Set dst = link.ObjectB
' Source is and UML Object with "Entity" stereotype?
' Call CompareStereotype() global function defined in
Global Script pane
If CompareStereotype(src, PdOOM.Cls_UMLObject, "Entity") Then
' Check if destination is an UML Object with "Control" Stereotype
If not CompareStereotype(dst, PdOOM.Cls_UMLObject,
"Control") Then
%Check% = False
End If
ElseIf CompareStereotype(dst, PdOOM.Cls_UMLObject,
"Entity") Then
' Check if source is an UML Object with "Control"
Stereotype
If not CompareStereotype(src, PdOOM.Cls_UMLObject,
"Control") Then
%Check% = False
End If
End If
End Function
26
27
This template resolves to a boolean value to determine if one message number is greater
than another, and the result will be used in a second template.
6. Right-click the CommunicationDiagram category and select New > Template to
create a second template, enter description in the Name field, and then enter the
following GTL code in the text area:
Collaboration Scenario %Name%:
\n
.foreach_item(Symbols,,, %ObjectType% ==
CollaborationMessageSymbol, %compareCbMsgSymbols%)
%Object.description%
.next(\n)
The first line of this template generate the title of the scenario from the name of the
communication diagram. Then the .foreach_item macro loops on each message
symbol, and calls on the other templates to format and output the message information.
28
Value
Name
File name
Encoding
ANSI
Use package
hierarchy as
file path
[unselected]
29
6. Click Apply to save your changes, and then OK to close the resource editor.
7. Click OK to close the List of Extensions.
For detailed information about creating generated files, see Generated Files (Profile) on
page 86.
30
Message name
Sequence
number
Ask value to db
Return value
5. Select Tools > Check Model to display the Check Model Parameters dialog box, in which
the custom checks we have created appear in the Instance Link category:
31
32
Metaclasses (Profile)
Metaclasses are defined in the PowerDesigner metamodel and provide the basis for your
extensions. You add a metaclass to the Profile category when you want to extend it in some
way by modifying its behavior, adding new properties, changing its property sheet or symbol,
or even excluding it from your models.
You can either make extensions to an existing type of object or create an entirely new kind of
modeling object by adding the ExtendedObject, ExtendedSubObject or
ExtendedLink metaclass (see Extended Objects, Sub-Objects, and Links (Profile) on page
36).
In the following example, the FederationController is an entirely new type of object
created by adding the ExtendedObject metaclass and defining a stereotype on it. Various
specializations of the Table metaclass are defined through criteria and stereotypes:
Extensions are inherited, so that any extensions made to a metaclass
are available to its stereotyped children, and those that are subject to
criteria. The various extended attributes defined under the table metaclass will be available to table instances according to the following
rules:
ReplicationPath - Tables for which both the SecureTable and Replicated criteria evaluate to true.
ExternalLogin - Tables bearing either the FederatedTable or PriorityTable stereotype.
Availability - Tables bearing the PriorityTable
stereotype.
33
34
Description
Name
[read-only] Specifies the name of the metaclass. Click the button to the right
of this field to open the Metamodel Objects Help for the metaclass.
Parent
[read-only] Specifies the parent of the metaclass. Click the button to the right
of this field to go to the parent. If the parent is not present in the profile, a
message invites you to add it.
Code naming
convention
Features Guide > Modeling with PowerDesigner > Objects > Naming Conventions.
35
Description
Illegal characters [concrete metaclasses in target files] Specifies a list of illegal characters that
may not be used in code generation for the metaclass. The list must be placed
between double quotes, for example:
"/!=<>""'()"
When working with an OOM, this object-specific list overrides any values
specified in the IllegalChar property for the object language (see Settings Category: Object Language on page 110).
Enable selection Specifies that instances of the metaclass will appear in the Selection tab of the
in file generation extended generation dialog box.
Exclude from
model
[concrete metaclasses only] Prevents the creation of instances of the metaclass and removes all references to the metaclass from the menus, Toolbox,
property sheets and so on, to simplify the interface. For example, if you do not
use business rules, select this check box for the BusinessRule metaclass
to hide them in your models.
When several resource files are attached to a model, the metaclass is excluded
if at least one file excludes it and the others do not explicitly enable it. For
models that already have instances of this metaclass, the objects will be
preserved but it will not be possible to create new ones.
Comment
Documents the reason for the presence of the metaclass in this profile.
Extended objects define new types of objects that can be created anywhere.
Extended sub-objects define new types of child objects that can only be created in the
property sheet of their parent via an extended composition (see Extended Collections and
Compositions (Profile) on page 49).
Extended links define new types of links between objects.
1. Right-click the Profile category, select Add Metaclasses, and click the PdCommon subtab in the dialog to display the list of objects common to all models.
2. Select one or more of ExtendedLink, ExtendedSubObject, and
ExtendedObject and click OK to add them to your profile.
Note: To make the tools for creating extended objects and extended links available in the
Toolbox of models other than the free model, you must add them via the customization
dialog available at Tools > Customize Menus and Tools.
36
Stereotypes (Profile)
Stereotypes subclassify metaclasses so that extensions are applied to objects only if they bear
the stereotype. Stereotypes can be promoted to the status of metaclasses with a specific list,
Browser category and custom symbol and Toolbox tool.
Note: You can define more than one stereotype for a given metaclass, but you can only apply a
single stereotype to each instance. Like other extensions, stereotypes support inheritance, so
extensions to a parent stereotype are inherited by child stereotypes.
1. Right-click a metaclass, criterion, or stereotype, and select New > Stereotype.
2. Enter the following properties as appropriate:
Property
Description
Name
Specifies the internal name of the stereotype, which is used for scripting.
Label
Specifies the display name of the stereotype, which will appear in the PowerDesigner interface.
Parent
Specifies a parent stereotype of the stereotype. You can select a stereotype defined
in the same metaclass or in a parent metaclass. Click the Properties button to go to
the parent stereotype in the tree and display its properties.
Abstract
Specifies that the stereotype cannot be applied to metaclass instances. The stereotype will not appear in the stereotype list in the object property sheet, and can
only be used as a parent of other child stereotypes. Disables the Use as metaclass
property.
Use as metaclass
Promotes the stereotype to the same status as standard PowerDesigner metaclasses, to give it its own list of objects, Browser category, and its own tab in
multi-pane selection boxes such as those used for generation (see Creating New
Metaclasses with Stereotypes on page 39).
No Symbol
37
Description
Icon
Specifies an icon for stereotyped instances of the metaclass. Click the tools to the
right of this field in order to browse for .cur or .ico files.
Note: The icon is used to identify objects in the Browser and elsewhere in the
interface, but not as a diagram symbol. To specify a custom diagram symbol, see
Custom Symbols (Profile) on page 71.
[available for objects supporting symbols] Specifies a Toolbox tool to enable you
to create objects in a diagram. If you do not select this option, users are only able to
create objects bearing the stereotype from the Browser or Model menu. Custom
tools appear in a separate Toolbox group named after the resource file in which
they are defined.
Note: If you have not specified an icon, the tool will use a hammer icon by default.
Plural label
[available when Use as metaclass is selected] Specifies the plural form of the
display name that will appear in the PowerDesigner interface.
Default
name
Comment
38
39
Criteria (Profile)
Criteria subclassify metaclasses so that extensions are applied to objects only if they satisfy
conditions. You can test an object instance against multiple criteria, and for sub-criteria, its
condition and any conditions specified by its parents must be met for its extensions to be
applied to the instance.
1. Right-click a metaclass and select New > Criterion.
2. Enter the following properties as appropriate:
Property
Description
Name
Condition
Specifies the condition which instances must meet in order to access the criterion
extensions. You can use any expressions valid for the PowerDesigner GTL .if
macro (see .if Macro on page 275). You can reference any extended attributes
defined at the metaclass level in the condition, but not those defined under the
criterion itself.
For example, in a PDM, you can customize the symbols of fact tables by creating a
criterion that will test the type of the table using the following condition:
(%DimensionalType% == "1")
40
Specifies the parent criterion of the criterion. To move the criterion to under
another parent, select the parent in the list. Click the Properties tool to open the
parent and view its properties.
Description
Comment
41
Description
Name
Specifies the internal name of the attribute, which can be used for scripting.
Label
Specifies the display name of the attribute, which will appear in the PowerDesigner interface.
Comment
Data type
Specifies the form of the data to be held by the extended attribute. You can choose
from:
Boolean - TRUE or False.
Color - xxx xxx xxx where x is an integer between 0-255.
Date or Time - your local format as specified in your Windows regional
settings
File or Path - cannot contain /// or any of the following characters: ?"<>|.
Integer or Float - the appropriate local format.
Hex - a hexadecimal.
Font - font name,font type,font size.
Font Name or Font Style - a 1-50 character string.
Font Size - an integer between 1-400.
Object - an object of the correct type and, if appropriate, with the correct
stereotype. When selecting this type you must specify an Object type and, if
appropriate, an Object stereotype, and you can also specify an Inverse
collection name (see Linking Objects Through Extended Attributes on page
49).
Password - no restrictions.
String (single line) or Text (multi-line) - no restrictions.
Select the Validate check box to the right of the list to enforce validation of the
values entered for the attribute.
To create your own data type, click the Create Extended Attribute Type tool to
the right of the field (see Creating an Extended Attribute Type on page 46).
42
Description
Computed
Specifies that the extended attribute is calculated from other values using
VBScript on the Get Method Script, Set Method Script, and Global Script
tabs. When you select this checkbox, you must choose between:
Read/Write (Get+Set methods)
Read only (Get method)
In the following example script, the FileGroup computed extended attribute
gets its value from and sets the value of the filegroup physical option of the
object:
Function %Get%(obj)
%Get% = obj.GetPhysicalOptionValue("on/<filegroup>")
End Function
Sub %Set%(obj, value)
obj.SetPhysicalOptionValue "on/<filegroup>", value
End Sub
Default value
[if not computed] Specifies a default value for the attribute. You can specify
the value in any of the following ways:
Enter the value directly in the list.
[predefined data types] Click the Ellipsis button to open a dialog listing
possible values. For example, if the data type is set to Color, the Ellipsis
button opens a palette window.
[user-defined data types] Select a value from the list.
Template
[if not computed] Specifies that the value of the attribute is to be evaluated as a
GTL template at generation time. For example, if the value of the attribute is set
to %Code%, it will be generated as the value of the code attribute of the relevant
object.
By default (when this checkbox is not selected), the attribute is evaluated literally, and a value of %Code% will be generated as the string %Code%.
43
Description
List of values
Specifies a list of possible values for the attribute in one of the following ways:
Enter a static list of semi-colon-delimited values directly in the field.
Use the tools to the right of the list to create or select a GTL template to
generate the list dynamically.
If the attribute type is Object, and you do not want to filter the list of
available objects in any way, you can leave this field blank.
To perform a simple filter of the list of objects, use the .collection
macro (see .object and .collection Macros on page 278). In the following
example, only tables with the Generated attribute set to true will be
available for selection:
.collection(Model.Tables, %Generated%==true)
For more complex filtering, use the foreach_item macro (see .foreach_item Macro on page 271):
.foreach_item (Model.Tables)
.if %Generated%
.// (or more complex criteria)
%ObjectID%
.endif
.next (\n)
If the attribute is based on an extended attribute type (see Creating an Extended
Attribute Type on page 46), this field is unavailable since the values of the
extended attribute type will be used.
Complete
44
Specifies that all possible values for the attribute are defined in the List of values,
and that the user may not enter any other value.
Description
Edit method
[if not Complete] Specifies a method to override the default action associated
with the tool to the right of the field.
This method is often used to apply a filter defined in the List of values field in the
object picker. In the following example, only tables with the Generated
attribute set to true will be available for selection:
Sub %Method%(obj)
Dim Mdl
Set Mdl = obj.Model
Dim Sel
Set Sel = Mdl.CreateSelection
If not (Sel is nothing) Then
Dim table
For Each table in Mdl.Tables
if table.generated then
Sel.Objects.Add table
end if
Next
selObj
Sel.Delete
End If
End Sub
Icon Set
Text format
[for Text data types only] Specifies the language contained within the text
attribute. If you select any value other than plain Text, then an editor toolbar
and (where appropriate) syntax coloring are provided in the associated form
fields.
Object type
[for Object data types only] Specifies the type of the object that the attribute
contains (for example, User, Table, Class).
Object stereotype
[for Object data types only] Specifies the stereotype that objects of this type
must bear to be selectable.
45
Description
[for Object data types only, if not computed] Specifies the name under
which the links to the object will be listed on the Dependencies tab of the target
object.
An extended collection with the same name as the extended attribute, which
handles these links, is automatically created for all non-computed extended
attributes of the Object type, and is deleted when you delete the extended attribute, change its type, or select the Computed checkbox.
Physical option
[for [Physical Option] data types only] Specifies the physical option with which
the attribute is associated. Click the ellipsis to the right of this field to select a
physical option. For more information, see Adding DBMS Physical Options to
Your Forms on page 209.
46
47
Note: By default, the Filter operator field is set to =, and each icon matches exactly one
possible value. To have a single icon match multiple values, use the Between or another
operator together with a suitable Filter value. For example, in an icon set paired with a
progress attribute for which the user can enter any value between 0 and 100% progress,
you could use three icons:
Not Started - = 0
In Progress - Between 1,99
Completed - = 100
6. If appropriate, add the attribute to a form (see Forms (Profile) on page 56), to enable
users to modify its value.
7. Click OK to save your changes and return to the model.
8. To enable the display of the icon on your object symbol, select Tools > Display
Preferences, select your object type, and click the Advanced button to add your attribute
to the symbol. For detailed information about working with display preferences, see Core
Features Guide > Modeling with PowerDesigner > Diagrams, Matrices, and Symbols >
Display Preferences.
Your attribute is now displayed on object symbols. In the following example, the
Employee entity is In Progress, while the Customer entity is Completed:
48
49
Description
Name
Label
Specifies the display name of the collection, which will appear as the name of the
tab associated with the collection in the parent object property sheet.
Comment
Inverse
Name
[extended collection only] Specifies the name to appear in the Dependencies tab
of the target metaclass. If you do not enter a value, an inverse name is automatically generated.
Target Type
Target Stereotype
List Columns
Specifies the property columns that will be displayed by default in the parent
object property sheet tab associated with the collection. Click the Customize
Default Columns tool to the right of this field to add or remove columns.
50
You can view the tab associated with the collection by opening the property sheet of a
metaclass instance. The tab contains an Add Objects (and, if the metaclass belongs to the
same type of model, Create an Object) tool, to populate the collection.
Note: When you open a model containing extended collections or compositions and
associate it with a resource file that does not support them, the collections are still visible in
the different property sheets in order to let you delete objects in the collections no longer
supported.
51
Description
Name
Label
Specifies the display name of the collection, which will appear as the name of
the tab associated with the collection in the parent object property sheet.
Comment
Target Type
Specifies the metaclass whose instances will appear in the collection. The list
displays only metaclasses that can be directly instantiated in the current model
or package, such as classes or tables, and not sub-objects such as class attributes or table columns.
Click the Select a Metaclass tool to the right of this field to choose a metaclass
from another type of model.
Target Stereotype
[optional] Specifies a stereotype to filter the target type. You can select an
existing stereotype from the list or enter a new one.
List Columns
3. Click the Calculated Collection Script tab and enter a script that will calculate which
objects will form the collection.
The following script recreates the list on the Outgoing References sub-tab on a table's
Dependencies tab:
Function %Collection%(obj, coll) ' Required
dim r
For each r in obj.outreferences
coll.Add r
' Populates collection
Next
%Collection% = True
' Required
End Function
' Required
Note: You can reuse functions on the Global Script tab (see Global Script (Profile) on
page 106) but you should be aware that if you declare global variables they will not be
reinitialized each time the collection is calculated, and will keep their value until you
modify the resource file, or the PowerDesigner session ends. This may cause errors,
52
5. To view the collection, open the property sheet of a metaclass instance to the
Dependencies tab and select the appropriate sub-tab.
6. [optional] Add the collection to your model reports. Calculated collections are
automatically available in the new Report Editor as lists under the appropriate metaclass
book. You can add calculated collections to a legacy report, by changing the collection of
the appropriate metaclass book or list (see Core Features Guide > Storing, Sharing and
Reporting on Models > Reports > The Legacy Report Editor > Modifying the Collection of
an Item).
53
1. Right-click the Profile category and select Add Dependency Matrix to add the
DependencyMatrix metaclass to the profile and create a stereotype under it, in which
you will define the matrix properties.
2. On the General tab, enter a name for the matrix (for example Table Owners
Matrix) along with a label and plural label for use in the PowerDesigner interface, as
well as a default name for the matrices that users will create based on this definition.
3. Click the Definition tab to specify the rows and columns of your matrix and how they are
associated using the following properties.
Property
Description
Rows
Specifies the object type with which to populate your matrix rows.
Columns
Specifies the object type with which to populate your matrix columns. Click the
Select Metaclass button to the right of the list to select a metaclass from another
model type.
Matrix Cells
Specifies how the rows and columns of your matrix will be associated. You must
specify a Dependency from the list, which includes all the collections and links
available to the object.
Click the Create button to the right of the list to create a new extended collection
(see Extended Collections and Compositions (Profile) on page 49) connecting
your objects, or the Advanced button to specify a complex dependency path (see
Specifying Advanced Dependencies on page 55).
For certain dependencies, the Object type on which the dependency is based will
be displayed, and you can select an Object attribute to display in the matrix cells
along with the No value symbol, which is displayed if that attribute is not set in
any particular instance.
54
Modeling with PowerDesigner > Diagrams, Matrices, and Symbols > Dependency
Matrices.
55
Description
Name
Specifies a name for the dependency path. By default, this field is populated with
the origin and destination object types.
Dependency
Specifies the dependency for this step in the path. The list is populated with all the
possible dependencies for the previous object type.
Object Type
Specifies the specific object type that is linked to the previous object type by the
selected dependency. This field is autopopulated if only one object type is available
through the selected dependency.
In the following example, a path is identified between business functions and roles, by passing
from the business function through the processes it contains, to the role linked to it by a role
association:
Forms (Profile)
Forms present standard and extended attributes and collections as property sheet tabs or can be
used to create dialog boxes launched from menus or property sheet buttons.
Note: Unless you add them to a form, extended attributes are listed alphabetically on the
Extended Attributes tab of the object's property sheet. By creating your own form, you can
make these attributes more visible and easy to use, by organizing them logically, grouping
related ones, and emphasizing those that are most important. If you associate all of your
extended attributes with a form, the Extended Attributes tab is not displayed.
1. Right-click a metaclass, stereotype or criterion and select New > Form to create an empty
form.
56
Description
Name
Specifies the internal name of the form, which can be used for scripting.
Label
Specifies the display name of the form, which will display in the tab of the property
tab or in the title bar of the dialog box.
Comment
57
Description
Help file
Enables the display of a Help button and specifies an action that will be performed
when the button is clicked or F1 is pressed when in the context of the form.
The action can be the display of a help file (.hlp, .chm or .html), and can specify a
specific topic. For instance:
C:\PD1500\pddoc15.chm 26204
If no help file extension is found, the string will be treated as a shell command to
execute. For instance, you could instruct PowerDesigner to open a simple text file:
notepad.exe C:\Temp\Readme.txt
Type
Specifies the kind of form. You can choose from the following:
Dialog Box creates a dialog box that can be launched from a menu or via a form
button
Property Tab creates a new tab in the property sheet of the metaclass, stereotype
or criterion
Replace <standard> Tab replaces a standard tab in the property sheet of the
metaclass, stereotype or criterion. If your form is empty, it will be filled with the
standard controls from the tab that you are replacing.
Add to fa- [property tabs only] Specifies that the tab is displayed by default in the object propvorite tabs erty sheet.
3. Insert controls as necessary in your form using the toolbar on the Form tab (see Adding
Extended Attributes and Other Controls to Your Form on page 58).
4. Click the Preview button to review the layout of your form and, when satisfied, click
Apply to save your changes.
58
Description
Add Attribute / Collection opens a selection box in which you select standard or
extended attributes or collections belonging to the metaclass to insert into the form. If you
do not enter a label, the attribute or collection name is used as its form label. If you have
entered a comment, it is displayed as a tooltip.
The type of control associated with an attribute depends on its type: booleans are associated with check boxes, lists with combo boxes, text fields with multi-line edit boxes,
and so on. Collections are displayed as standard grids with all the appropriate tools.
Add Group Box - inserts a group box, intended to contain other controls within a named
box.
Add Tab Window - inserts a sub-tab layout, in which each child control appears, by
default, in its own sub-tab. To place multiple controls on a single sub-tab, use a horizontal
or vertical layout.
Add Horizontal / Vertical Layout - inserts a horizontal or vertical layout. To arrange
controls to display side by side, drag them onto a horizontal layout in the list. To arrange
attributes to display one under the other, drag them onto a vertical layout in the list.
Vertical and horizontal layouts are often used together to provide columns of controls.
Include Another Form - inserts a form defined on this or another metaclass in the
present form (see Example: Including a Form in a Form on page 65).
Add Method Push Button - opens a selection box in which you select one or more
methods belonging to the metaclass to associate with the form via buttons. Clicking the
button invokes the method. If you do not enter a label, the method name is used as the
button label. If you have entered a comment, it is displayed as a tooltip.
Add Edit / Multi-Line Edit Field [dialog boxes only] inserts an edit or multi-line edit
field.
Add Combo Box / List Box / Check Box [dialog boxes only] - inserts a combo box, list
box, or check box.
Add Text / Separator Line / Spacer - inserts the appropriate decorative control. The
separator line is vertical when its parent control is a vertical layout.
Delete deletes the currently selected control.
Definition
Name
Internal name of the control. This name must be unique within the form. The name
can be used in scripts to get and set dialog box control values (see Example: Opening
a Dialog Box from a Menu on page 83).
59
Definition
Label
Specifies a label for the control on the form. If this field is left blank, the name of the
control is used. If you enter a space, then no label is displayed. You can insert line
breaks with \n.
To create keyboard shortcuts to navigate among controls, prefix the letter that will
serve as the shortcut with an ampersand. If you do not specify a shortcut key,
PowerDesigner will choose one by default. To display an ampersand in a label, you
must escape it with a second ampersand (for example: &Johnson && Son will
display as Johnson & Son.
Attribute
[included forms] Specifies the object on which the form to be included is defined.
The list is populated with all attributes of type object and the following objects:
Form name
[included forms] Specifies the name of the form that will be included. You can:
Indentation
60
[container controls] Specifies the space in pixels between the left margin of the
container (form, group box, or horizontal or vertical layout) and the beginning of the
labels of its child controls.
Definition
Label space
[container controls] Specifies the space in pixels reserved for displaying the labels of
child controls between the indentation of the container and the control fields.
To align controls with the controls in a previous container, enter a negative value. For
example, if you have two group boxes, and want all controls in both to be aligned
identically, set an appropriate indentation in the first group box and set the indentation of the second group box to -1.
If a child control label is larger than the specified value, the label space property is
ignored; to display this label, you need to type a number of pixels greater than 50.
Show control
as label
[group boxes] Use the first control contained within the group box as its label.
Show Hidden
Attribute
[extended attributes] Displays controls that are not valid for a particular form
(because they do not bear the relevant stereotype, or do not meet the criteria) as
greyed. If this option is not set, irrelevant options are hidden.
Value
[dialog box entry fields] Specifies a default value for the control. For extended
attributes, default values must be specified in the attribute's properties (see Extended
Attributes (Profile) on page 41).
List of Values
[combo and list boxes] Specifies a list of possible values for the control. For extended attributes, lists of values must be specified in the attribute's properties (see
Extended Attributes (Profile) on page 41).
Exclusive
[combo boxes] Specifies that only the values defined in the List of values can be
entered in the combo box.
61
Definition
Minimum Size Specifies the minimum width (in characters) to which the control may be reduced
(chars)
when the window is resized.
Minimum
Line Number
Specifies the minimum number of lines to which a multiline control may be reduced
when the window is resized.
Horizontal /
Specifies that the control may be resized horizontally or, for multiline controls,
Vertical Resize vertically, when the property sheet or dialog is resized.
Read-Only
[included forms and dialog box entry fields] Specifies that the control is read-only,
and will be greyed in the form.
Left Text
Display
[booleans and methods] Specifies the form in which the boolean options or method
button are displayed.
For booleans, you can choose between a check box or vertical or horizontal radio
buttons, while for methods, you can choose from a range of standard icons or Text,
which prints the text specified in the Label field on the button.
Width/ Height
62
2. Right-click the Person metaclass and select New > Form, enter Personal Details
in the Name field, select Property Tab in the Type list, and click the Add Attribute
tool to select all the new extended attributes for inclusion in the form:
3. Click OK to add the attributes to the form, and arrange them in a group box, using
horizontal layouts to align them neatly. Here, I'm using the Label field to overide the
default name of the attribute in the form for brevity:
63
4. Click OK to save your changes and return to the model. When you next open the property
sheet of a person, a new Personal Details tab is available containing the extended
attributes:
64
65
3. Create a form under the Person metaclass, select Replace General tab from the
Type list, and change the name to Contact Details.
4. Delete unwanted attributes from the list, and arrange the remaining attributes you want to
display, including the Site attribute (which is of type Object, and which will enable us
to pull in the appropriate properties from the associated site form) using horizontal and
vertical layouts.
5. Click the Include Another Form tool, select Site in the Attribute field, and enter Site
Address in the Form name field. Select the Read-Only check box to prevent editing of
the included form from the person's property sheet:
66
6. Click OK to save the extensions, and return to your model. When you next open the
property sheet of a person, the General tab is replaced by the custom Contact Details tab,
and when the person is assigned to a site, the site's address details are displayed as readonly in the lower part of the form:
67
68
2. Right-click the Person metaclass and select New > Method. Enter the name
ShowPersonalDetails, and then click the Method Script tab and enter the
following script:
Sub %Method%(obj)
' Show custom dialog for advanced extended attributes
Dim dlg
Set dlg = obj.CreateCustomDialog("%CurrentTargetCode%.Personal
Details")
If not dlg is Nothing Then
dlg.ShowDialog()
End If
End Sub
3. Select the Contact Details form, and click the Add Method Push Button tool,
select the ShowPersonalDetails method, and then click OK to add it to the form.
Here, I use a horizontal layout and spacer to align the button with the right edge of the
form:
69
4. Enter Personal... in the Label field, and then click OK to save your changes and
return to the model. Now when you open the property sheet of a person, the Contact
Details tab contains a Personal... button which opens the Personal Information dialog:
70
2. Specify a default Width and Height for the symbol and then click the Modify button to
open the Symbol Format dialog, and set appropriate properties on the various tabs.
Note: If you customize the line style and arrows of a link symbol (such as a PDM
reference), your styles will override those selected in the Display Preferences dialog, and
may cause confusion and inconsistency in the model. To ensure coherence in a model
governed by a notation, select Notation for the Style and Arrows properties on the Line
Style tab.
For more information on the Symbol Format dialog (including the custom symbol options
that let you control the default format options for the symbol, and whether users can edit
them, on a per-tab basis) see Core Features Guide > Modeling with PowerDesigner >
Diagrams, Matrices, and Symbols > Symbols > Symbol Format Properties.
3. Click OK to return to the resource editor and view your changes in the Preview field.
71
Description
Name
Specifies the name of the custom check, which is displayed under the
selected object category in the Check Model Parameters dialog. This
name is also used (concatenated) in the check function name to uniquely
identify it.
Comment
Help Message
Specifies text to display in the message box that opens when the user
right-clicks the check and selects Help.
Output message
Default severity
Specifies that the check is selected by default in the Check Model Parameters dialog.
Enable automatic cor- Specifies that an autofix is available for the check (see Example: PDM
rection
Autofix on page 74).
Execute the automatic Specifies that the autofix is executed by default.
correction by default
3. Click the Check Script tab and enter your script (see Example: PDM Custom Check on
page 73. You can access shared library functions and static attributes defined for reuse in
the resource file from the Global Script tab (see Global Script (Profile) on page 106).
72
4. If you want to define an autofix, click the Autofix Script tab and enter your script (see
Example: PDM Autofix on page 74.
5. Click Apply to save your changes.
All custom checks defined in any resource files attached to the model are merged and all
the functions for all the custom checks are appended to build one single script. You custom
checks are displayed in the Check Model Parameters dialog box alongside the standard
model checks. If there are errors in your custom check scripts, the user will be prompted
with the following options:
Ignore- Skip the problematic script and continue with the other checks.
Ignore All - Skip this and any future scripts with problems and continue with the other
checks.
Abort - Stop the model checking.
Debug - Stop the model checking and open the Resource Editor on the script line with
the problem.
73
At run-time the variable %Check% is replaced by concatenating the names of the resource file,
metaclass, any stereotypes or criteria, and the name of the check itself from the General tab,
with any spaces replaced by an underscore. The parameter obj contains the object being
checked.
We begin by defining a certain number of variables after the default function definition:
Dim
Dim
Dim
Dim
Next, we enter the function body, which starts by setting the %Check% to true (meaning that
the object passes the test) and then iterates over each of the columns associated with the index
and tests their datatype. If a column has a varchar longer than 255, the script outputs a message
and sets the check to false (the object fails the test:
%Check%= True
if obj.type = "LF" or obj.type = "HG" or obj.type = "CMP" or obj.type
="HNG" then
for each c in obj.indexcolumns
set col = c.column
position = InStr(col.datatype,"(")
if position <> 0 then
DT_col = left(col.datatype, position -1)
else
DT_col = col.datatype
end if
if ucase(DT_col) = "VARCHAR" and col.length > 255 then
output "Table " & col.parent.name & " Column " & col.name & " :
Data type is not compatible with Index " & obj.name & " type " &
obj.type
%Check% = False
end if
For more information about using VBScript in PowerDesigner, see Chapter 7, Scripting
PowerDesigner on page 305.
74
At run-time the variable %Fix% is replaced by the name of the fix. The parameter obj
contains the object being checked and outmsg, the message to be output.
We begin by defining a certain number of variables after the default function definition:
Dim
Dim
Dim
Dim
Next, we enter the function body, which starts by setting the %Fix% to false (meaning that it
does nothing) and then iterates over each of the columns associated with the index and tests
their datatype. If a column has a varchar longer than 255, the script outputs a message, deletes
the column from the collection of columns associated with the index, and sets the fix to true (it
has made a correction):
%Fix% = False
If obj.type = "LF" or obj.type = "HG" or obj.type = "CMP" or obj.type
="HNG" Then
For Each c In obj.IndexColumns
Set col = c.column
position = InStr(col.datatype,"(")
If position <> 0 Then
DT_col = Left(col.datatype, position -1)
Else
DT_col = col.datatype
End If
If (Ucase(DT_col) = "VARCHAR") And (col.length > 255) Then
outmsg = "Automatic correction has removed column " & col.Name & "
from index."
c.Delete
%Fix% = True
End If
Next
End If
75
76
Description
CanCreate
77
Description
Initialize
78
Description
Validate
CanLinkKind
[link objects] Validates the kind and stereotype of the objects that can be
linked together as the source and destination extremities when you create a
link with a Toolbox tool or modify link ends in a property sheet. The
sourceStereotype and destinationStereotype parameters are optional.
In this example, the source of the extended link must be a start object:
Function %CanLinkKind%(sourceKind, sourceStereotype,
destinationKind, destinationStereotype)
if sourceKind = cls_Start Then
%CanLinkKind% = True
end if
End Function
OnModelOpen, On- [models] Run immediately after a model is opened, saved, or closed.
ModelSave, and
OnModelClose
OnLanguageChangeRequest, OnLanguageChanging,
and OnLanguageChanged
OnNewFromTemplate
79
Description
BeforeDatabase[PDM models] Run immediately before or after generating or reverseGenerate, AfterDa- engineering a database (see Adding Scripts Before or After Generation and
tabaseGenerate, Be- Reverse Engineering on page 133).
foreDatabaseReverseEngineer, and AfterDatabaseReverseEngineer
GetEstimatedSize
[PDM only] Runs when the Estimate Database Size mechanic is called (see
Modifying the Estimate Database Size Mechanism on page 201).
Methods (Profile)
Methods are written in VBScript and perform actions on objects when they are invoked by
other extensions, such as menu items or form buttons.
1. Right-click a metaclass, stereotype, or criterion and select New > Method.
80
Description
Name
Comment
3. Click the Method Script tab, and enter the VBscript. If appropriate, you can reuse
functions on the Global Script tab.
For more information on defining a script and using the Global Script tab, see Example:
PDM Custom Check on page 73 and Global Script (Profile) on page 106.
The following example, created under the Class metaclass, converts classes into
interfaces by copying basic class properties and operations, deleting the class (to avoid
namespace problems), and creating the new interface.
Sub %Mthd%(obj)
' Convert class to interface
' Copy class basic properties
Dim Folder, Intf, ClassName, ClassCode
Set Folder = obj.Parent
Set Intf = Folder.Interfaces.CreateNew
ClassName = obj.Name
ClassCode = obj.Code
Intf.Comment = obj.Comment
' Copy class operations
Dim Op
For Each Op In obj.Operations
' ...
Output Op.Name
Next
' Destroy class
obj.Delete
' Rename interface to saved name
Intf.Name = ClassName
Intf.Code = ClassCode
End Sub
Note: This script does not deal with other class properties, or with interface display, but a
method can be used to launch a custom dialog box to ask for end-user input before
performing its action (see Example: Opening a Dialog Box from a Menu on page 83).
4. Click Apply to save your changes.
81
Menus (Profile)
Menus specify commands to appear in the standard PowerDesigner File, Tools, and Help
menus or in contextual menus.
1. Right-click a metaclass, stereotype, or criterion and select New > Menu.
2. Enter the following properties as appropriate:
Property
Description
Name
Specifies the internal name of the menu. This name will not appear in the menu
Comment
Location
[model and diagram only] Specifies where the menu will be displayed. You can
choose between:
File > Export menu
Help menu
Object Contextual Menu
Tools menu
Menus created on other metaclasses are only available on the contextual menu,
and do not display a Location field.
3. Use the tools on the Menu sub-tab to create the items in your menu:
Tool
Function
Add Command - Opens a selection dialog listing methods (see Methods (Profile) on
page 80) and transformations (see Transformations (Profile) on page 93) defined in
the current metaclass and its parents to add to the menu as commands. Select one or
more and click OK.
The items are added to your menu in the format:
MenuEntry (Method/TransformationName)
You can modify the MenuEntry (and define a shortcut key by adding an ampersand
before the shortkey letter) but you must not edit the Method/TransformationName.
Note: If you modify the name of a method or transformation, you must update any
commands using the method or transformation by hand, because the name is not automatically synchronized. You can use the Replace in Items tool to locate and update
these commands.
Add Separator -Creates a menu separator under the selected item.
Add Submenu - Creates a submenu under the selected item.
Delete - Deletes the selected item.
82
4. [optional] Click the XML sub-tab to review the XML generated from the Menu sub-tab.
5. Click Apply to save your changes.
83
5. Right-click the Table metaclass and select New > Menu. Enter Export in the Name
field, and then click the Add Command tool and select the Export method:
6. Click OK to save your changes and return to your model. When you next right-click a table
in a diagram or the browser, the Export command is available in the contextual menu.
84
Templates (Profile)
GTL templates extract text from PowerDesigner property values for use in generated files or
other contexts.
1. Right-click a metaclass, a stereotype, or a criterion (or the Shared category, if the
template applies to all metaclasses) and select New > Template to create a template.
2. Enter a name for the template. You should not use spaces in the name and, by convention,
templates are named in headless camelcase (for example myTemplate).
3. [optional] Enter a comment to explain the use of the template.
4. Enter GTL code (see Chapter 5, Customizing Generation with GTL on page 245) in the
text box.
In this example, myTemplate is defined on the Class metaclass, and will generate the
name of the class followed by a list of its attributes:
85
Description
Name
Specifies a name for the generated file item in the resource editor.
If an extension attached to the model contains a generated file name identical to
one defined in the main resource file, then only the extension generated file will
be generated.
File Name
Specifies the name of the file that will be generated. This field can contain GTL
variables. For example, to generate an XML file with the code of the object for
its name, you would enter %code%.xml.
If you leave this field empty, then no file will be generated, but you can view the
code produced in the object's Preview tab.
If this field contains a recognized extension, the code is displayed with the
corresponding language editor and syntactic coloring.
Type
Specifies the type of file to provide appropriate syntax coloring in the Preview
window.
Encoding
Specifies the encoding format for the file. Click the ellipsis tool to the right of
the field to choose an alternate encoding from the Text Output Encoding Format dialog, where you can specify the following options:
Encoding - Encoding format of the generated file
Abort on character loss - Specifies to stop generation if characters cannot
be identified and are to be lost in current encoding
Comment
Use package hi- Specifies that the package hierarchy should be used to generate a hierarchy of
erarchy as file
file directories.
path
3. Enter GTL code (see Chapter 5, Customizing Generation with GTL on page 245) or the
name of a template to populate the file in the text zone.
In the following example, a generated file is defined for OOM classes. A file will be
generated for each class in the model with a name derived from the class %Name%, and
86
87
88
Note: If you position your cursor between the percent signs surrounding this or any other
template name and press F12, you will either jump directly to the referenced template or, if
several templates share the same name, to a Results dialog in which you select the template to
navigate to.
The referenced template, source, contains GTL code, including references to further
templates called %isSourceGenerated%, %sourceHeader%, %package%, and
%imports%:
89
90
For more information about methods, see Methods (Profile) on page 80.
b. Create a menu in Profile\Model and select the Tools menu in the Location list
(see Menus (Profile) on page 82).
c. Add the method to the menu using the Add Command tool:
91
d. Select the command specified (for example, Tools > My Generation) to open a
custom Generation dialog, which does not have a Targets tab:
92
Transformations (Profile)
Transformations define sets of actions to modify objects either before or after a model
generation or on request. Transformations are commonly grouped together in transformation
profiles.
Transformations can be used to:
Implement Model Driven Architecture (MDA), which uses UML modeling to describe an
application at different levels of detail. PowerDesigner allows you to create an initial
platform-independent model (PIM) (modeling the basic business logic and functionality)
and refine it progressively in different models containing increasing levels of
implementation and technology-dependent information through to a platform-specific
model (PSM). You can define transformations that will generate a more refined version of
a model, based on the desired target platform, and changes made to the PIM can be
cascaded down to the generated models.
Apply design patterns to your model objects.
Modify objects for a special purpose. For example, you can create a transformation in an
OOM that converts <<control>> classes into components.
93
Modify objects in a reversible way for round-trip engineering. For example, if you
generate a PDM from an OOM in order to create O/R mappings, and the source OOM
contains components, you can pre-transform components into classes for easy mapping to
PDM tables. When you update the source OOM from the generated PDM, you can use a
post-transformation to recreate the components from the classes.
94
4. [optional] Review the Global Script tab (see Global Script (Profile) on page 106), which
provides access to definitions shared by all VBscript functions defined in the profile, and
the Dependencies tab, which lists the transformation profiles in which the transformation
is used.
Description
Name / Com- Specify the name of the transformation profile and provide an explanation of what
ment
it is intended to do.
Model Type / [optional] Specify the type of model with which the transformation profile can be
Family / Sub- used during generation and (if the type supports a language definition file) the
family
family and subfamily. If one or more of these fields is completed, the profile will
only be displayed if the model to be generated conforms to them. For example, if
you define the transformation in a PDM or PDM extension and specify Object-Oriented Model and Java, then the profile will only be available
when you select to generate the PDM into a Java OOM.
4. Click the Pre-generation tab and click the Add Transformations tool to add
transformations to perform prior to generation.
These transformations are executed before generation on the objects in your source model.
If objects are created by these transformations then they are automatically added to the list
of objects to be generated. Any changes to existing objects or new objects created by these
transformations are reversed after generation, so that your model returns to its previous
state.
5. Click the Post-generation tab and click the Add Transformations tool to add
transformations to perform after generation. Transformations added on this tab are also
95
If the source object is transformed into a single object, the transformation is used as an
internal identifier of the target object.
If the source object is transformed into several objects, you can define a specific tag to
identify the result of transformation. You should use only alphanumeric characters, and we
recommend that you use a "stable" value such as a stereotype, which will not be modified
during repetitive generations.
CopyObject(source [,tag])
Duplicates an existing object, sets a source for the duplicated object, and returns a copy of
the new object.
Sets the source object of a generated object. It is recommended to always set the source
object to keep track of the origin of a generated object.
GetSource(target [,tag])
GetTarget(source [,tag])
96
Description
Name
Specifies the name of the import, which will be used as the name of the import
command under File > Import.
First diagram
Specifies the first diagram that should be initialized in the model created from the
imported file.
Create default
symbols
File extension
Specifies the file extension that identifies XML documents that conform to the
schema.
Comment
4. Click the Schema tab and click the Import tool to copy the schema, with any imports and
includes resolved, to the extension file for mapping.
Warning! If the selected schema is too permissive and allows for too many possible object
hierarchies it may not be possible to display it fully in the Mapping Editor. If you have an
example XML data file to import, you can import this in place of the schema by clicking
the Import from Sample tool and PowerDesigner will deduce a partial schema from it.
Note that while a schema obtained in this way may successfully import the sample data
file, other documents based on the same schema may not be complete if they contain other
types of objects (or attributes or collections) that, though valid for the schema, were not in
the first document.
You can click the View as Model tool to open the schema as an XML schema model.
5. [optional] Click the Extensions tab and select extension files containing extensions to the
standard PowerDesigner metamodel to provide additional metaclasses (see Extended
Objects, Sub-Objects, and Links (Profile) on page 36), attributes (see Extended Attributes
97
6.
7.
8.
9.
(Profile) on page 41), and collections (see Extended Collections and Compositions
(Profile) on page 49) to map your XML schema to.
Attaching extension files in this way allow you to reuse previously defined extensions in
your imports or to share extensions between imports. You can also define extensions under
the Profile category in the resource file containing the XML import definition, or create
them dynamically when creating your import mappings.
[optional] Click the Initialization tab and enter VBScript to run at model creation time
before the importing of any objects. You can access shared library functions and static
attributes defined for reuse in the resource file from the Global Script tab (see Global
Script (Profile) on page 106).
[optional] Click the Post-Process tab and enter VBScript to run after all the objects have
been imported.
Click the General tab and click the Mappings button to define mappings from the
metaclasses identified in your XML schema to those in the PowerDesigner metamodel in
the Mapping Editor (see XML Import Mappings on page 98).
Click Apply to save your changes.
By default, the Mapping Editor lists the standard attributes and collections of metaclasses,
which are normally displayed in object property sheets. To display all available properties,
98
PowerDesigner identifies sub-object metaclasses in the schema that are limited to a single
instance and displays a 1 overlay on their icons. Attributes under such metaclasses are
treated as belonging to the parent metaclass and can be mapped to attributes under the
PowerDesigner object with which the parent is mapped:
Note: If no suitable attribute exists, to create and map to a new extended attribute, drag and
drop the external attribute onto the PowerDesigner metaclass to which its parent is
mapped.
3. Drag and drop external sub-object metaclasses (compositions) under the metaclass to
PowerDesigner compositions to create mappings between them:
99
b) Open the metaclass that the object reference points to, select its identifying attribute,
right-click it, and select Declare as Unique Identifier. A key overlay is added to the
attribute icon:
c) The object reference attribute can now be mapped to a PowerDesigner attribute of type
object (which also bears a rounded arrow overlay):
100
The tabs available on a particular mapping property sheet depend on the objects being
mapped. The General tab contains the following properties:
Property
Description
Source object
Target object
Specifies the metamodel object being mapped from the source object. This object is
the parent of the mapping itself.
101
Description
Transformation script
[metaattribute mappings] Specifies a script to set the value of the attribute. In the
following example, from an XML import, the notnullable attribute is imported
to the Mandatory attribute and, because the sense of the attributes is reversed, the
boolean value imported is set to the opposite of the source value:
Sub %Set%(obj, sourceValue)
obj.SetAttribute "Mandatory", not sourceValue
End Sub
In the following example, from an object generation, the NumberID attribute is
generated to the Comment attribute and a text string is prepended to make clear the
origin of the value:
Function %AdjustValue%(sourceValue, sourceObject, targetObject)
Dim targetValue
targetValue = "The original process NumberID is "
+cstr(sourceValue)
%AdjustValue% = targetValue
End Function
Attribute Mappings - Lists the mappings of attributes under the metaclass. Select a
mapping and click the Properties tool to open its property sheet. To control the order in
which attributes are created, in order to respect dependencies between them, use the
arrows at the bottom of the list.
Collection Mappings - Lists the mappings of collections under the metaclass.
Post-Process - Specifies a script to modify the metaclass after creation and execution of
mappings. In the following example, the value of the Code attribute is copied to the Name
attribute:
Sub %PostProcess%(obj)
' Copy code into name
obj.Name = obj.Code
End Sub
102
Description
Parent
Parent collec- [sub-objects/compositions] Specifies the name of the composition collection that
tion
contains the sub-objects under the parent object.
Name
Specifies the name of the metaclass in the PowerDesigner metamodel or XML schema.
Data type
Identifier
[metaattributes] Specifies that the attribute is used to identify the metaclass for referencing by another metaclass.
Reference /
Reference
path
Singleton
[metaclasses] Specifies that only one instance of the metaclass is possible under each
parent object.
Comment
Attributes - Lists the metaattributes belonging to the metaclass. Select an attribute in the
list and click the Properties tool to open its property sheet.
Collections - Lists the metacollections belonging to the metaclass. Select a collection in
the list and click the Properties tool to open its property sheet.
> Linking and Synchronizing Models > Generating Models and Model Objects > Generating
Model Objects > Defining Advanced Object Generations.
1. [if the Object Generations category is not present] Right-click the root node, select
Add Items, select Object Generations, and click OK to create this folder.
2. Right click the Object Generations folder, and select New to create an object
generation.
103
Description
Target model Specifies the type of model that will be created or updated by the generation.
type
Menu command name
Specifies the name of the command that will appear in the interface under Tools >
Generate Objects. This field is initialized when you select a target model type.
Comment
4. [optional] Click the Source Extensions and/or Target Extensions tab and select
extension files containing extended attributes, collections, or metaclasses to reference in
your mappings.
Attaching extension files in this way allow you to reuse previously defined extensions in
your generations or to share extensions between generations. You can also define
extensions as appropriate under the Profile category in the resource file containing the
generation definition.
5. Click the Mappings button to define mappings from your source to target metaclasses in
the Mapping Editor (see Model-to-Model Generation Mappings on page 104).
6. Click Apply to save your changes.
104
Note: By default, the Mapping Editor lists the standard attributes and collections of
metaclasses, which are displayed, by default, in object property sheets. To display all
available properties, click the Filter Properties tool, and select Show All
Properties. You can also filter the tree by using the Filter Mappings and Filter
Objects tools.
2. Drag and drop additional source attributes under the metaclass to target attributes with
compatible data types to map them. Attributes are contained in a folder under the
metaclass and represent individual properties such as Name, Size, DimensionalType,
containing boolean, textual, numeric, or object ID values:
3. Drag and drop source sub-object metaclasses (compositions) under the metaclass to target
compositions to create mappings between them:
Any attributes under the source sub-object metaclass are automatically mapped to target
attributes with which they share a name. Map other sub-object attributes as necessary.
Note: In certain circumstances, it may be appropriate to map a source sub-object metaclass
to a target object metaclass, and so such mappings are also permitted.
4. Drag and drop source collections (aggregations) under the metaclass to target collections
to create mappings between them:
5. [optional] Select a metaclass and enter an initialization or post-processing script to modify
the objects at or after creation (see Metamodel Mapping Properties on page 101).
6. [optional] Click the target model (root node) to display the global list of mappings in the
Mappings pane at the bottom of the dialog and use the arrows at the bottom of the list to
change the order in which objects are generated to ensure that dependencies are respected.
Note: To control the order in which attributes, compositions, and aggregations are
generated, select the target metaclass to display its mappings in the Mappings pane, and
use the arrows at the bottom of the lists on the Attribute Mappings, Collection
Mappings, and Sub-Object Mappings sub-tabs.
7. Click Apply to save your changes.
105
The script for the check (see Example: PDM Custom Check on page 73 can be rewritten to call
the function as follows:
Function %Check%(obj)
Dim c 'temporary index column
Dim col 'temporary column
Dim position
%Check%= True
If obj.type = "LF" or obj.type = "HG" or obj.type = "CMP" or obj.type
="HNG" then
For Each c In obj.IndexColumns
Set col = c.column
If (DataTypeBase(col.datatype) = "VARCHAR") And (col.length > 255)
Then
Output "Table " & col.parent.name & " Column " & col.name & " :
Data type is not compatible with Index " & obj.name & " type " &
obj.type
%Check% = False
End If
Next
End If
End Function
Note: Variables defined on the Global Script tab are reinitialized each time they are
referenced in another script.
106
CHAPTER 3
Language definition files provide PowerDesigner with the information necessary to model,
reverse-engineer, and generate for a particular object-oriented, business process, or XML
language. PowerDesigner provides definition files for many popular languages. You select a
language when you create an OOM, BPM, or XSM.
Language definition files have an .xol, .xpl, or .xsl extension and are located in
install_dir/Resource Files. To view the list of languages, select Tools >
Resources > Object Languages > , Process Languages, or XML Languages. For
information about the tools available in resource file lists, see Chapter 1, PowerDesigner
Resource Files on page 1.
Note: The PDM uses a different form of definition file (see Chapter 4, DBMS Definition Files
on page 119), and other model types do not have definition files but can be extended with
extension files (see Chapter 2, Extension Files on page 11).
All target languages have the same basic category structure, but the detail and values of entries
differs for each language:
Settings - contains data types, constants, namings, and events categories used to customize
and manage generation features. The types of items in this category differ depending on
the type of resource file.
Generation - contains generation commands, options, and task.
Profile - contains extensions on metaclasses.
107
Description
Name / Code
File Name
[read-only] Specifies the path to the language definition file. If the target language
has been copied to your model, this field is empty.
Version
[read-only] Specifies the repository version if the resource is shared via the repository.
Family / Subfamily
Specifies the family and subfamily of the language, which may enable certain
non-default features in the model. For example, object languages of the Java,
XML, IDL and SAP Sybase PowerBuilder families support reverse engineering.
Enable Trace
Mode
Lets you preview the templates used during generation (see Templates (Profile) on
page 85). Before starting the generation, click the Preview page of the relevant
object, and click the Refresh tool to display the templates.
When you double-click on a trace line from the Preview page, the Resource Editor
opens to the corresponding template definition.
Comment
108
Implementation [executable BPM only] Gathers options that influence the process
implementation possibilities. The following constants are defined by default:
LoopTypeList - This list defines the type of loop supported by the language. The value
must be an integer
OperationTypeList - This list defines the type of operation supported by the language.
An unsupported operation type cannot be associated with a process. The value must be
an integer
EnableEmissionCorrelation - enables the definition of a correlation for an emitted
message
EnableProcessReuse - allows a process to be implemented by another process
AutomaticInvokeMode - indicates if the action type of a process implemented by an
operation can be automatically deducted from the operation type. You can specify:
0 (default) - the action type cannot be deduced and must be specified
1 - the language enforces a Request-Response and a One-Way operation to be
received by the process and a Solicit-Response and a Notification operation to be
invoked by the process
2 the language ensures that a Solicit-Response and a Notification operation are
always received by the process while Request-Response and One-Way operations
are always invoked by the process
109
DataHandling - [executable BPM only] Gathers options for managing data in the
language. The following constant values are defined by default:
EnableMessageOnFlow - indicates if a message format can be associated to a flow or
not. The default value is Yes
EnableMessageVariable - enables a variable object to store the whole content of a
message format. In this case, the message format objects will appear in the data type
combo box of the variable
Choreography - Gathers objects that allow the design of the graph of activities (start, end,
decision, synchronization, transition...) Contains the following constant values defined by
default:
EnableMultipleStarts - When set to No, ensures that no more than one start is defined
under a composite process
EnableTopLevelChoreography - When set to No, ensures that no flow or choreography
object (start, end, decision...) is defined directly under the model or a package. These
objects can be defined only under a composite process
110
Data Types - Tables for mapping internal data types with object language data types. The
following data types values are defined by default:
BasicDataTypes lists the most commonly-used data types. The Value column
indicates the conceptual data type used for CDM and PDM model generations.
ConceptualDataTypes lists internal PowerDesigner data types. The Value column
indicates the object language data type used for CDM and PDM model generations.
AdditionalDataTypes lists additional data types added to data type lists. Can be used
to add or change data types of your own. The Value column indicates the conceptual
data type used for CDM and PDM model generations.
DefaultDataType specifies the default data type.
Constants - contains mapping between the following constants and their default values:
Null, True, False, Void, Bool.
Namings - contains parameters that influence what will be included in the files that you
generate from an OOM:
GetterName - Name and value for getter operations
GetterCode - Code and value for getter operations
SetterName - Name and value for setter operations
SetterCode - Code and value for setter operations
IllegalChar - lists illegal characters for the object language. This list populates the
Invalid characters field in Tools > Model Options > Naming Convention. For
example, "/!=<>""'()"
Events - defines standard events on operations. This category may contain default existing
events such as constructors and destructors, depending on the object language. An event is
linked to an operation, and the contents of the Events category is displayed in the Event list
111
ConceptualDataTypes - The Value column indicates the XML language data type used for
model generations. Conceptual data types are the internal data types of PowerDesigner,
and cannot be modified.
XsmDataTypes- Data types for generations from the XML model.
Generation Category
The Generation category contains categories and entries to define and activate a generation
process.
The following sub-categories are available:
Commands - contains generation commands, which can be executed at the end of the
generation process, after the generation of all files. Commands are written in GTL (see
Chapter 5, Customizing Generation with GTL on page 245), and must be included within
tasks to be evoked.
Options contains options, available on the Options tab of the Generation dialog, the
values of which can be tested by generation templates or commands. You can create
options that take boolean, string, or list values. The value of an option may be accessed in a
template using the following syntax:
%GenOptions.option%
112
3. Click OK to save your changes and return to the model. Then select Language >
Generate Java code to open the Generation dialog, and click the Options tab. The new
option is listed on the tab under its comment (or its name, if no comment has been
provided):
113
Note: For detailed information about creating and modifying generation templates, see
Chapter 5, Customizing Generation with GTL on page 245.
114
4. Right-click the Tasks category and select New. Name the task Execute, click the Add
Commands tool, select DoCommand from the list, and then click OK to add it to the new
task:
115
5. Click OK to save your changes and return to the model. Then select Language >
Generate Java code to open the Generation dialog, and click the Tasks tab. The new task
is listed on the tab under its comment (or its name, if no comment has been provided):
116
117
118
CHAPTER 4
DBMS definition file provide PowerDesigner with the information necessary to model,
reverse-engineer, and generate for a particular DBMS. PowerDesigner provides definition
files for most popular DBMSs. You select a DBMS when you create a PDM.
DBMS definition files have an .xdb extension and are located in install_dir/
Resource Files/DBMS. To view the list of DBMSs, select Tools > Resources > DBMS.
For information about the tools available in resource file lists, see Chapter 1, PowerDesigner
Resource Files on page 1.
You can consult or modify the DBMS definition file attached to your PDM in the Resource
Editor by selecting Database > Edit current DBMS. When you select a category or an item in
the left-hand pane, the name, value, and related comment appear in the right side of the dialog
box.
Warning! The resource files provided with PowerDesigner inside the Program Files
folder cannot be modified directly. To create a copy for editing, use the New tool on the
resource file list, and save it in another location. To include resource files from different
locations for use in your models, use the Path tool on the resource file list.
Each DBMS file has the following structure:
General - contains general information about the database, without any categories (see
General Category (DBMS) on page 134). All items defined in the General category apply
to all database objects.
Script - used for generation and reverse engineering. Contains the following subcategories:
SQL - contains the following sub-categories, each of which contains items whose
values define general syntax for the database:
Syntax - general parameters for SQL syntax (see Syntax Category (DBMS) on
page 135)
Format - parameters for allowed characters (see Format Category (DBMS) on page
136)
File - header, footer and usage text items used during generation (see File Category
(DBMS) on page 137)
Keywords - the list of SQL reserved words and functions (see Keywords Category
(DBMS) on page 139)
Objects - contains commands to create, delete or modify all the objects in the database.
Also includes commands that define object behavior, defaults, necessary SQL queries,
reverse engineering options, and so on (see Script/Objects Category (DBMS) on page
141).
119
Data Type - contains the list of valid data types for the specified DBMS and the
corresponding types in PowerDesigner (see Script/Data Type Category (DBMS) on
page 196).
Customize - Retrieves information from PowerDesigner Version 6 DBMS definition
files. It is not used in later versions.
ODBC - present only if the DBMS does not support standard statements for generation. In
this case the ODBC category contains additional items necessary for live database
connection generation .
Transformation Profiles contains group of transformations used during model
generation when you need to apply changes to objects in the source or target models (see
Transformations (Profile) on page 93).
Profile - allows you to define extended attribute types and extended attributes for database
objects (see Profile Category (DBMS) on page 199).
The following properties are available on the root of a DBMS definition file:
Property
Description
Name / Code
File Name
Family
Used to classify a DBMS, and to establish a link between different database resource
files. For example, SAP Sybase SQL Anywhere, and SAP Sybase Adaptive
Server Enterprise belong to the SQL Server family.
Triggers are retained when you change target within the same family.
Merge interface allows to merge models from the same family.
Comment
120
Script Generation
PowerDesigner can generate a SQL script from a PDM to create or modify a database. The
statements that control script generation are available in the Script/Objects category.
When generating a SQL script, PowerDesigner takes each object to be created in turn, and
applies the appropriate Create or other statement to create or modify the object:
For example, in Sybase ASE 15.7, the Create statement in the Table category is the
following:
create table [%QUALIFIER%]%TABLE%
(
%TABLDEFN%
)
[%OPTIONS%]
This statement contains the parameters for creating the table together with its owner and
physical options using variables (see Variables for Tables and Views on page 215) that extract
the necessary information from the object's properties. The %TABLDEFN% variable collects
121
This item generates the statement for creating the number of table partitions specified in
%ExtTablePartition%.
Example - Adding a BeforeCreate Statement
The extension statement BeforeCreate is defined in the User category to create the login
of a user before the user Create statement is executed:
sp_addlogin %Name% %Password%
go
122
For example, you can verify that the value of the extended attribute ExtTablePartition
has been modified using the following GTL syntax:
.if (%OLDOBJECT.ExtTablePartition% != %NEWOBJECT.ExtTablePartition%)
If the extended attribute value was changed, an extended statement will be generated to update
the database. In the Sybase ASE syntax, the ModifyPartition extended statement is the
123
This statement contains the parameters for creating the table together with its owner and
physical options using variables (see Variables for Tables and Views on page 215) that extract
the necessary information from the object's properties.
If you are using the extension mechanism for script generation, you have to declare statements
in the list item ReversedStatements (one statement per line) for them to be properly
reversed.
For example, the extension statement AfterCreate uses CreatePartition, which
must be declared in ReversedStatements to be properly reverse engineered:
124
125
Note: You can also create your own queries (see Creating Queries to Retrieve Additional
Attributes on page 128).
Each type of query has the same basic structure comprised of a comma-separated list of
PowerDesigner variables enclosed in curly braces { } followed by a select statement to extract
values to populate these variables. The values of the returned records are stored in these
variables, which are then committed as object attribute values.
For example, the SqlListQuery in the View category of Oracle 11g R1 extracts values for
eight variables:
{OWNER, VIEW, VIEWSTYLE, ExtObjViewType,
ExtObjOIDList, ExtObjSuperView, XMLSCHEMA EX, XMLELEMENT EX}
select
v.owner,
v.view_name,
decode (v.view_type, 'XMLTYPE', 'XML', 'View'),
v.view_type,
v.oid_text,
v.superview_name,
decode (v.view_type, 'XMLTYPE', '%SqlXMLView.'||v.owner||
v.view_name||'1%', ''),
decode (v.view_type, 'XMLTYPE', '%SqlXMLView.'||v.owner||
v.view_name||'2%', '')
from sys.all_views v
[where v.owner = %.q:SCHEMA%]
126
Name of variable - [required] can be any standard PDM variable (see PDM Variables and
Macros on page 211), metamodel public name (see Navigating in the Metamodel on page
344) or the name of an extended attribute defined under the metaclass in the Profile (see
Profile Category (DBMS) on page 199).
ID - [optional] the variable is part of the identifier.
... - [optional] the variable must be concatenated for all the lines returned by the SQL
query that have the same values for the ID columns. The ID and ... (ellipsis) keywords
are mutually exclusive.
Value pairs - [optional] lists conversions between retrieved values and PowerDesigner
values in the following format (where * means all other values):
(value1 = PDvalue1, value2 = PDvalue2, * = PDvalue3)
In the resulting lines returned by the SQL script, the values of the fourth field are concatenated
in the COLUMNS field as long as these ID values are identical.
SQL Result set
Table1,1,null,'col1,'
Table1,1,null,'col2,'
Table1,1,null,'col3,'
Table2,1,null,'col4,'
In PowerDesigner memory
Table1,1,null,'col1,col2,col3'
Table2,1,null,'col4'
In the example, COLUMNS will contain the list of columns separated by commas, and
PowerDesigner will process the contents to remove the last comma.
Example: Converting Value Pairs
In this example, when the SQL query returns the value 25 or 26, it is replaced by JAVA in the
TYPE variable:
{ADT, OWNER, TYPE(25=JAVA , 26=JAVA)}
SELECT t.type_name, u.user_name, t.domain_id
FROM sysusertype t, sysuserperms u
WHERE [u.user_name = '%SCHEMA%' AND]
(domain_id = 25 OR domain_id = 26) AND
t.creator = u.user_id
127
This query retrieves view columns, and is enabled by adding it to ReversedQueries in the
View category.
Note: Subqueries that are called with the EX keyword from within SqlAttrQuery or other
queries (see Calling Sub-Queries with the EX Keyword on page 128) do not need to be added
to ReversedQueries.
Calling Sub-Queries with the EX Keyword
DBMS system tables may store information to be reversed in columns with LONG, BLOB,
TEXT and other incompatible data types, which PowerDesigner cannot directly concatenate
into strings.
You can bypass this limitation by using the EX keyword and creating user-defined queries and
variables in the existing reverse engineering queries with the syntax:
%UserDefinedQueryName.UserDefinedVariableName%
128
Variable 2
Variable 3
Variable 4
Variable 5
Variable 6
129
Physical options
FragDbsp n
FragExpr n
FragSprt n
Only the translation rules defined between brackets will be used during string concatenation:
"FragSprt0", which contains 0 (f.evalpos), will be replaced by " ", and "FragSprt1", which
contains 1, will be replaced by ","
SqlFragQuery generates a numbered resultset containing as many pairs of user-defined
variable name (without %) and variable value as needed, if there are many variables to
evaluate.
130
131
You can add a qualifier section when you customize your DBMS. This section must contain
the following items:
enable: YES/NO
SqlListQuery (script) : this item contains the SQL query that is executed to retrieve the
qualifier list. You should not add a Header to this query
SqlListQuery
present?
Result
Yes
Yes
No
Only the default (All qualifiers) is selected. You can also type
the name of a qualifier
No
No
132
Example
In Adaptive Server Anywhere 7, a typical qualifier query is:
.Qualifier.SqlListQuery :
select dbspace_name from sysfile
Create
Drop
AlterStatementList
SqlAttrQuery
SqlListQuery
5. Click OK to add these script items to your object, and enter the appropriate SQL
statements and queries. You will need to enter values for each of these items. For guidance
on syntax, see Common Object Items on page 143.
6. [optional] To control the order in which this and other objects will be generated, use the
Generation Order item (see Script/Objects Category (DBMS) on page 141).
133
BeforeDatabaseGenerate
AfterDatabaseGenerate
BeforeDatabaseReverseEngineer
AfterDatabaseReverseEngineer
Description
EnableCheck
Specifies whether the generation of check parameters is authorized. The following settings are available. If this item is set to No, no variables linked to
check parameters will be evaluated during generation and reverse-engineering.
EnableConstName
Specifies whether constraint names are supported by the DBMS. If this item is
set to Yes, table and column constraint names are generated in addition to the
constraints themselves.
EnableIntegrity
Specifies whether integrity constraints are supported by the DBMS. If this item
is set to Yes, primary, alternate, and foreign key check boxes are available for
database generation and modification
EnableMultiCheck
Specifies whether the generation of multiple check parameters for tables and
columns is supported by the DBMS. If this item is set to Yes, multiple check
parameters are generated, with the first constraint concatenating all the validation business rules, and additional constraints generated for each constraint
business rules attached to the object. If this item is set to No, all business rules
(validation and constraint) are concatenated into a single constraint expression.
SchemaStereotype
SqlSupport
Specifies whether SQL syntax is supported by the DBMS. If this item is set to
134
Description
UniqConstName
Specifies whether unique constraint names for objects are required by the
DBMS. If this item is set to Yes, all constraint names (including index names)
must be unique in the database. Otherwise constraint names must be unique
only at the object level.
UserStereotype
Description
BlockComment
BlockTerminator
Specifies the end of block character, which is used to end expressions for
triggers and stored procedures.
Delimiter
IdentifierDelimiter
Specifies the identifier delimiter character. When the beginning and end delimiters are different, they must be separated by a space character.
LineComment
Quote
SqlContinue
135
Description
Terminator
Specifies the end of statement character, which is used to terminate create table,
view, index, or the open/close database, and other statements.
If empty, BlockTerminator is used instead.
UseBlockTerm
Description
AddQuote
Specifies that object codes are systematically enquoted during the generation.
The following settings are available:
CaseSensitivityUsingQuote
Specifies if the case sensitivity for identifiers is managed using double quotes.
Enable this option if the DBMS you are using needs double quotes to preserve
the case of object codes.
DateTimeFormat /
OdbcDateTimeFormat / DateFormat /
OdbcDateFormat /
TimeFormat /
OdbcTimeFormat
Specify the format for generating date and time test data to a script or live
database connection.
For example, you can define the following value for the DateTimeFor-
136
Description
EnableOwnerPrefix / EnableDtbsPrefix
Specifies that object codes can be prefixed by the object owner (%OWNER%),
the database name (%DBPREFIX%), or both (%QUALIFIER%). The following settings are available:
Yes enables the Owner Prefix and/or Database Prefix options in the
Database Generation dialog to require one or both prefixes for objects.
No - The Owner Prefix and Database Prefix options are unavailable
LowerCaseOnly /
UpperCaseOnly
Note: These items are mutually exclusive. If both are enabled, the script is
generated in lowercase.
MaxScriptLen
Description
AlterHeader
AlterFooter
137
Description
EnableMultiFile
Specifies that multiple scripts are allowed. The following settings are available:
Yes enables the One File Only check box in the Generate database,
Generate Triggers and Procedures, and Modify Database parameters windows. If you deselect this option, a separate script is created for each table
(named after the table, and with the extension defined in the TableExt
item), and a global script summarizes all the single table script items.
The One File Only check box is unavailable, and a single script includes all
the statements.
The file name of the global script is customizable in the File Name field of the
generation or modification windows and has the extension specified in the
ScriptExt item.
The default name for the global script is CREBAS for database generation,
CRETRG for triggers and stored procedures generation, and ALTER for database modification.
Footer
Header
ScriptExt
Specifies the default script extension when you generate a database or modify a
database for the first time.
Example:
sql
StartCommand
Specifies the statement for executing a script. Used inside the header file of a
multi-file generation to call all the other generated files from the header file.
Example (Sybase ASE 11):
isql %NAMESCRIPT%
Corresponds to the %STARTCMD% variable (see PDM Variables and Macros
on page 211).
TableExt
Specifies the extension of the scripts used to generate each table when the
EnableMultiFile item is enabled and the "One File Only" check box is not
selected in the Generate or Modify windows.
Example:
sql
138
TrgFooter
TrgHeader
TrgUsage1
[when using a single script] Specifies text to display in the Output window at
the end of trigger and procedure generation.
Description
TrgUsage2
[when using multiple scripts] Specifies text to display in the Output window at
the end of trigger and procedure generation.
TriggerExt
Specifies the main script extension when you generate triggers and stored
procedures for the first time.
Example:
trg
Usage1
[when using a single script] Specifies text to display in the Output window at
the end of database generation.
Usage2
[when using multiple scripts] Specifies text to display in the Output window at
the end of database generation.
Description
CharFunc
Commit
ConvertAnyToString
ConvertFunc
Specifies a list of SQL functions to use when converting values between hex
and integer and handling strings.
Example:
convert()
hextoint()
inttohex() etc
139
Description
DateFunc
GroupFunc
ListOperators
Specifies a list of SQL operators to use when comparing values, boolean, and
various semantic operators.
Example:
=
!=
not like etc
NumberFunc
OtherFunc
Reserved Default
140
Description
ReservedWord
StringConcatenationOperator
MaxConstLen - Specifies the maximum constraint name length supported by the target
database for tables, columns, primary and foreign keys. This value is used during model
checking and returns an error if the code exceeds the defined value. The constraint name is
also truncated at generation time.
Note: PowerDesigner has a maximum length of 254 characters for constraint names. If
your database supports longer constraint names, you must define the constraint names to
fit in 254 characters or less.
EnableOption - Specifies that physical options are supported by the target DBMS for the
model, tables, indexes, alternate keys, and other objects and enables the display of the
Options tab in object property sheets. For more information, see Physical Options
(DBMS) on page 206.
GenerationOrder - Specifies the generation order of database objects. Drag and drop
entries in the Ordered List tab to adjust the order in which objects will be created.
141
Note: If an object does not appear on the list, it will still be generated, but after the listed
objects. You can add and remove items using the tools on the tab. Sub-objects, such as
Sequence::Permissions, can be placed directly below their parent object in the list
(where they will be indented to demonstrate their parentage) or separately, in which case
they will be displayed without indentation. Extended objects (see Defining Generation and
Reverse-Engineering of New Metaclasses on page 133) cannot be added to this list, and are
generated after all other objects.
142
Description
Add
Specifies the statement required to add the object inside the creation statement of another object.
Example (adding a column):
%20:COLUMN% %30:DATATYPE% [default %DEFAULT%]
[%IDENTITY%?identity:[%NULL%][%NOTNULL%]]
[[constraint %CONSTNAME%] check (%CONSTRAINT%)]
Alter
AlterDBIgnored
AlterStatementList
BeforeCreate/ AfterSpecify extended statements executed before or after the main Create, Drop
Create / BeforeDrop / or Modify statements (see Script Generation on page 121).
AfterDrop / BeforeModify / AfterModify
ConstName
Specifies a constraint name template for the object. The template controls
how the name of the object will be generated.
The template applies to all the objects of this type for which you have not
defined an individual constraint name. The constraint name that will be
applied to an object is displayed in its property sheet.
Examples (ASE 15):
Create
Table: CKT_%.U26:TABLE%
Column: CKC_%.U17:COLUMN%_%.U8:TABLE%
Primary Key: PK_%.U27:TABLE%
[generation and reverse] Specifies the statement required to create the object.
Example:
create table %TABLE%
143
Description
DefOptions
Specifies default values for physical options (see Physical Options (DBMS)
on page 206) that will be applied to all objects. These values must respect
SQL syntax.
Example:
in default_tablespace
Drop
Enable
EnableOwner
Enables the definition of owners for the object. The object owner can differ
from the owner of the parent table. The following settings are available:
Note that, in the case of index owners, you must ensure that the Create
statement takes into account the table and index owner. For example, in
Oracle 9i, the Create statement of an index is the following:
create [%UNIQUE%?%UNIQUE% :[%INDEXTYPE% ]]index
[%QUALIFIER%]%INDEX% on [%CLUSTER%?cluster C_%TABLE%:[%TABLQUALIFIER%]%TABLE% (
%CIDXLIST%
)]
[%OPTIONS%]
Where %QUALIFIER% refers to the current object (index) and %TABLQUALIFIER% refers to the parent table of the index.
144
EnableSynonym
Footer / Header
Specify the object footer and header. The contents are inserted directly after
or before each create object statement.
MaxConstLen
Specifies the maximum constraint name length supported for the object in
the target database, where this value differs from the default specified in
MaxConstLen (see .Script/Objects Category (DBMS) on page 141).
Description
MaxLen
Specifies the maximum code length for an object. This value is used when
checking the model and produces an error if the code exceeds the defined
value. The object code is also truncated at generation time.
Modifiable Attributes
Specifies a list of extended attributes that will be taken into account in the
merge dialog during database synchronization (see Script Generation on
page 121).
Example (ASE 12.5):
ExtTablePartition
Options
Permission
Specifies a list of available permissions for the object. The first column is
the SQL name of permission (SELECT for example), and the second column is the shortname that is displayed in the title of grid columns.
Example (table permissions in ASE 15):
SELECT / Sel
INSER / Ins
DELETE / Del
UPDATE / Upd
REFERENCES / Ref
Reversed Queries
Specifies a list of additional attribute queries to be called during live database reverse engineering (see Live Database Reverse Engineering on page
125).
Reversed Statements
SqlAttrQuery
145
Description
SqlListQuery
Specifies a SQL query for listing objects in the reverse engineering dialog.
The query is executed to fill header variables and create objects in memory.
Example (Dimension in Oracle 10g):
{ OWNER, DIMENSION }
select d.owner, d.dimension_name
from sys.all_dimensions d
where 1=1
[ and d.dimension_name=%.q:DIMENSION%]
[ and d.owner=%.q:SCHEMA%]
order by d.owner, d.dimension_name
SqlOptsQuery
SqlPermQuery
Default Variable
In a column, if the type of the default variable is text or string, the query must retrieve the value
of the default variable between quotes. Most DBMS automatically add these quotes to the
value of the default variable. If the DBMS you are using does not add quotes automatically,
you have to specify it in the different queries using the default variable.
For example, in IBM DB2 UDB 8 for OS/390, the following line has been added in
SqlListQuery in order to add quotes to the value of the default variable:
146
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
AddTableCheck
Specifies a statement for customizing the script to modify the table constraints
within an alter table statement.
Example (SQL Anywhere 10):
alter table [%QUALIFIER%]%TABLE%
add [constraint %CONSTNAME% ]check (%.A:CONSTRAINT%)
AllowedADT
Specifies a list of abstract data types on which a table can be based. This list
populates the Based On field of the table property sheet.
You can assign an abstract data type to a table, the table will use the properties
of the type and the type attributes become table columns.
Example (Oracle 10g):
OBJECT
147
Description
AlterTable Footer
AlterTable Header
DefineTable Check
DropTable Check
InsertIdentityOff
InsertIdentityOn
148
Description
Rename
SqlChckQuery
149
Description
SqlListRefr Tables
SqlListSchema
SqlStatistics
Specifies a SQL query to reverse engineer column and table statistics. See
SqlStatistics in Column on page 151.
SqlXMLTable
TableComment
150
Description
TypeList
Specifies a list of types (for example, DBMS: relational, object, XML) for
tables. This list populates the Type list of the table property sheet.
The XML type is to be used with the SqlListSchema item.
UniqConstraint
Name
Specifies whether the same name for index and constraint name may be used
in the same table. The following settings are available:
Yes The table constraint and index names must be different, and this will
be tested during model checking
No - The table constraint and index names can be identical
Description
[Common items]
Add
AfterCreate, AfterDrop, AfterModify
BeforeCreate, BeforeDrop, BeforeModify
ConstName
Create, Drop
Enable
Maxlen, MaxConstLen
ModifiableAttributes
Options, DefOptions
Permission
ReversedQueries, ReversedStatements
SqlAttrQuery, SqlListQuery, SqlOptsQuery, SqlPermQuery
For a description of each of these common items, see Common object items on
page 143.
AddColnCheck
Specifies a statement for customizing the script for modifying column constraints within an alter table statement.
Example (Oracle 10g):
alter table [%QUALIFIER%]%TABLE%
add [constraint %CONSTNAME%] check (%.A:CONSTRAINT
%)
151
Description
AlterTableAdd Default
AltEnableAdd
ColnChk
Specifies if a column check constraint, built from the check parameters of the
column, can or cannot be added in a table using an alter table statement. The following settings are available:
Yes - AddColnChck can be used to modify the column check constraint in an alter table statement.
No - PowerDesigner copies data to a temporary table before recreating the
table with the new constraints.
Bind
CheckNull
Column Comment
DefineColn Check
152
Description
DropColnChck
DropColnComp
DropDefault Constraint
EnableBindRule
Specifies whether business rules may be bound to columns for check parameters. The following settings are available:
Enable ComputedColn
153
Description
EnableDefault
Yes - The default value (if defined) is generated for columns. It can be
defined in the check parameters for each column. The %DEFAULT%
variable contains the default value. The Default Value check box for
columns must be selected in the Tables & Views tabs of the Database
Generation box
No - The default value can not be generated, and the Default Value check
box is unavailable.
154
Description
EnableIdentity
Yes - Enables the Identity check box in the column property sheet.
No - The Identity check box is not available.
When the Identity check box is selected, the Identity keyword is generated in
the script after the column data type. An identity column is never null, and so
the Mandatory check box is automatically selected. PowerDesigner ensures
that:
Note that, during generation, the %IDENTITY% variable contains the value
"identity" but you can easily change it, if needed, using the following syntax :
[%IDENTITY%?new identity keyword]
EnableNotNull
WithDflt
ModifyColn Chck
Yes - The With Default check box is enabled in the column property sheet.
When it is selected, a default value is assigned to a column when a Null
value is inserted.
No - The With Default check box is not available.
155
Description
ModifyColn Comp
ModifyColnDflt
ModifyColnNull
ModifyColumn
NullRequired
Specifies the mandatory status of a column. This item is used with the
NULLNOTNULL column variable, which can take the "null", "not null" or
empty values. For more information, see Working with Null values on page
158.
Rename
156
Description
SqlChckQuery
SqlStatistics
Unbind
157
TABLE_1
char(33) not null,
DOMN_MAND not null,
DOMN_NULL not null,
If NullRequired is set to True, "null" is generated. The NullRequired item should be used
in ASE for example, where nullability is a database option, and the "null" or "not null"
keywords are required.
In the following example, all "null" values are generated:
TABLE_1
char(33) null,
DOMN_NULL
null,
DOMN_MAND
null
158
,
,
null
Description
[Common items]
Add
AfterCreate, AfterDrop, AfterModify
BeforeCreate, BeforeDrop, BeforeModify
Create, Drop
Enable, EnableOwner
Header, Footer
Maxlen
ModifiableAttributes
Options, DefOptions
ReversedQueries
ReversedStatements
SqlAttrQuery, SqlListQuery, SqlOptsQuery
For a description of each of these common items, see Common object items on
page 143.
Note: For information about using variables in the SqlListQuery to reverseengineering function-based indexes, see Live Database Reverse Engineering
Function-based Index on page 131
AddColIndex
Specifies a statement for adding a column in the Create Index statement. This parameter defines each column in the column list of the Create
Index statement.
Example (ASE 15):
%COLUMN%[ %ASC%]
%COLUMN% is the code of the column defined in the column list of the
table. %ASC% is ASC (ascending order) or DESC (descending order) depending on the Sort radio button state for the index column.
AlterIgnoreOrder
Specifies that changes in the order of the collection should not provoke a
modify database order.
Cluster
159
Description
CreateBefore Key
Controls the generation order of keys and indexes. The following settings are
available:
DefIndexType
Enables the Sort property in Index property sheets, which allows sorting in
ascending or descending order. The following settings are available:
Yes The Sort property is enabled for indexes, with Ascending selected
by default. The variable %ASC% is calculated, and the ASC or DESC
keyword is generated when creating or modifying the database
No Index sorting is not supported.
Enables the creation of cluster indexes. The following settings are available:
EnableFunction
IndexComment
160
Description
IndexType
MandIndexType
Specifies whether the index type is mandatory for indexes. The following
settings are available:
MaxColIndex
SqlSysIndex Query
Specifies a SQL query used to list system indexes created by the database.
These indexes are excluded during reverse engineering.
Example (AS IQ 12.6):
{OWNER, TABLE, INDEX, INDEXTYPE}
select u.user_name, t.table_name, i.index_name,
i.index_type
from sysindex i, systable t, sysuserperms u
where t.table_id = i.table_id
and u.user_id = t.creator
and i.index_owner != 'USER'
[and u.user_name=%.q:OWNER%]
[and t.table_name=%.q:TABLE%]
union
select u.user_name, t.table_name, i.index_name,
i.index_type
from sysindex i, systable t, sysuserperms u
where t.table_id = i.table_id
and u.user_id = t.creator
and i.index_type = 'SA'
[and u.user_name=%.q:OWNER%]
[and t.table_name=%.q:TABLE%]
UniqName
Specifies whether index names must be unique within the global scope of the
database. The following settings are available:
Yes Index names must be unique within the global scope of the database.
No Index names must be unique per object
161
Description
[Common items]
The following common object items may be defined for primary keys:
Add
ConstName
Create, Drop
Enable
Options, DefOptions
ReversedQueries
For a description of each of these common items, see Common object items on
page 143.
EnableCluster
PkAutoIndex
PKeyComment
162
Yes - Automatically generates a primary key index with the primary key
statement. If you select the primary key check box under create index
when generating or modifying a database, the primary key check box of
the create table will automatically be cleared, and vice versa.
No - Primary key indexes are not automatically generated. Primary key
and create index check boxes can be selected at the same time.
Description
UseSpPrimKey
Description
[Common items]
Add
AfterCreate, AfterDrop, AfterModify
BeforeCreate, BeforeDrop, BeforeModify
ConstName
Create, Drop
Enable
MaxConstLen
ModifiableAttributes
Options, DefOptions
ReversedQueries, ReversedStatements
SqlAttrQuery, SqlListQuery, SqlOptsQuery
For a description of each of these common items, see Common object items on
page 143.
163
Description
AKeyComment
AllowNullable Coln
Specifies whether non-mandatory columns are permitted. The following settings are available:
AlterIgnoreOrder
Specifies that changes in the order of the collection should not provoke a
modify database order.
EnableCluster
SqlAkeyIndex
UniqConstAuto Index
164
Description
[Common items]
Add
AfterCreate, AfterDrop, AfterModify
BeforeCreate, BeforeDrop, BeforeModify
ConstName
Create, Drop
Enable
MaxConstLen
ModifiableAttributes
ReversedQueries, ReversedStatements
SqlAttrQuery, SqlListQuery
For a description of each of these common items, see Common object items on
page 143.
CheckOn Commit
Specifies that referential integrity testing is performed only after the COMMIT. Contains the keyword used to specify a reference with the CheckOnCommit option.
Example:
CHECK ON COMMIT
DclDelIntegrity
RESTRICT
CASCADE
SET NULL
SET DEFAULT
165
Description
DclUpdIntegrity
DefineJoin
RESTRICT
CASCADE
SET NULL
SET DEFAULT
EnableChange JoinOrder
Specifies whether, when a reference is linked to a key as shown in the Joins tab
of reference properties, the auto arrange join order check box and features are
available. The following settings are available:
EnableCluster
EnablefKey Name
Specifies the foreign key role allowed during database generation. The following settings are available:
166
Yes - The join order can be established automatically, using the Auto
arrange join order check box. Selecting this check box sorts the list according to the key column order. Clearing this check box allows manual
sorting of the join order with the move buttons.
No - The auto arrange join order property is unavailable.
Yes - The code of the reference is used as role for the foreign key.
No - The foreign key role is not allowed.
Description
FKAutoIndex
Yes - Automatically generates a foreign key index with the foreign key
statement. If you select the foreign key check box under create index when
generating or modifying a database, the foreign key check box of the
create table will automatically be cleared, and vice versa.
No Foreign key indexes are not automatically generated. Foreign key
and create index check boxes can be selected at the same time.
FKeyComment
SqlListChildren
Query
UseSpFornKey
167
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
EnableIndex
SqlListSchema
SqlXMLView
TypeList
Specifies a list of types (for example, DBMS: relational, object, XML) for
views. This list populates the Type list of the view property sheet.
The XML type is to be used with the SqlListSchema item.
168
Description
ViewCheck
Specifies whether the With Check Option check box in the view property
sheet is available. If the check box is selected and the ViewCheck parameter is not empty, the value of ViewCheck is generated at the end of the
view select statement and before the terminator.
Example (SQL Anywhere 10):
If ViewCheck is set to with check option, the generated script is:
create view TEST as
select CUSTOMER.CUSNUM, CUSTOMER.CUSNAME, CUSTOMER.CUSTEL
from CUSTOMER
with check option;
ViewComment
ViewStyle
Specifies a view usage. The value defined is displayed in the Usage list of the
view property sheet.
Example (Oracle 10g):
materialized view
169
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
Tablespace Comment
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
Storage Comment
170
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
BeforeCreate Database
Controls the order in which databases, tablespaces, and storages are generated. The following settings are available:
Yes [default] Create Tablespace and Create Storage statements are generated before the Create Database statement.
No - Create Tablespace and Create Storage statements are generated after
the Create Database statement
CloseDatabase
Specifies the command for closing the database. If this parameter is empty, the
Database/Close option on the Options tab of the Generate Database box is
unavailable.
EnableMany Databases
OpenDatabase
Specifies the command for opening the database. If this parameter is empty,
the Database/Open option on the Options tab of the Generate Database box is
unavailable.
Example (ASE 15):
use %DATABASE%
The %DATABASE% variable is the code of the database associated with the
generated model.
171
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
Bind
EnableBindRule
Specifies whether business rules may be bound to domains for check parameters. The following settings are available:
EnableCheck
172
Description
EnableDefault
Specifies whether default values are generated. The following settings are
available:
Yes - Default values defined for domains are generated. The default value
can be defined in the check parameters. The %DEFAULT% variable
contains the default value
No - Default values are not generated
SqlListDefault
Query
Specifies a SQL query to retrieve and list domain default values in the system
tables during reverse engineering.
UddtComment
Unbind
Description
[Common items]
The following common object items may be defined for abstract data types:
For a description of each of these common items, see Common object items on
page 143.
ADTComment
AllowedADT
Specifies a list of abstract data types which can be used as data types for
abstract data types.
Example (Oracle 10g):
OBJECT
TABLE
VARRAY
173
Description
Authorizations
CreateBody
EnableAdtOn Coln
Specifies whether abstract data types are enabled for columns. The following
settings are available:
EnableAdtOn Domn
Yes - Abstract Data Types are added to the list of column types provided
they have the valid type.
No - Abstract Data Types are not allowed for columns.
Specifies whether abstract data types are enabled for domains. The following
settings are available:
Yes - Abstract Data Types are added to the list of domain types provided
they have the valid type
No - Abstract Data Types are not allowed for domains
Enable Inheritance
Install
Specifies a statement for installing a Java class as an abstract data class (in
ASA, abstract data types are installed and removed rather than created and
deleted). This item is equivalent to a create statement.
Example (SQL Anywhere 10):
install JAVA UPDATE from file %.q:FILE%
JavaData
Remove
174
Description
[Common items]
The following common object items may be defined for abstract data type
attributes:
Add
AfterCreate, AfterDrop, AfterModify
BeforeCreate, BeforeDrop, BeforeModify
Create, Drop, Modify
ModifiableAttributes
ReversedQueries, ReversedStatements
SqlListQuery
For a description of each of these common items, see Common object items on
page 143.
AllowedADT
Specifies a list of abstract data types which can be used as data types for
abstract data type attributes.
Example (Oracle 10g):
OBJECT
TABLE
VARRAY
If you select the type OBJECT for an abstract data type, an Attributes tab
appears in the abstract data type property sheet, allowing you to specify the
attributes of the object data type.
175
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
UserComment
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
176
Description
ColnDefault Name
Specifies the name of a default for a column. This item is used with DBMSs
that do not support check parameters on columns. When a column has a
specific default value defined in its check parameters, a name is created for
this default value.
The corresponding variable is %DEFAULTNAME%.
Example (ASE 15):
D_%.19:COLUMN%_%.8:TABLE%
The EMPFUNC column of the EMPLOYEE table has a default value of
Technical Engineer. The D_EMPFUNC_EMPLOYEE column
default name is created:
create default D_EMPFUNC_EMPLOYEE
as 'Technical Engineer'
go
execute sp_bindefault D_EMPFUNC_EMPLOYEE, "EMPLOYEE.EMPFUNC"
go
ColnRuleName
Specifies the name of a rule for a column. This item is used with DBMSs that
do not support check parameters on columns. When a column has a specific
rule defined in its check parameters, a name is created for this rule.
The corresponding variable is %RULE%.
Example (ASE 15):
R_%.19:COLUMN%_%.8:TABLE%
The TEASPE column of the Team table has a list of values - Industry, Military,
Nuclear, Bank, Marketing - defined in its check parameters:
The R_TEASPE_TEAM rule name is created and associated with the TEASPE column:
create rule R_TEASPE_TEAM
as @TEASPE in ('Industry','Military','Nuclear','Bank','Marketing')
go
execute sp_bindrule R_TEASPE_TEAM, "TEAM.TEASPE"
go
MaxDefaultLen
Specifies the maximum length that the DBMS supports for the name of the
column Default name
RuleComment
177
Description
UddtDefault Name
Specifies the name of a default for a user-defined data type. This item is used
with DBMSs that do not support check parameters on user-defined data types.
When a user-defined data type has a specific default value defined in its check
parameters, a name is created for this default value.
The corresponding variable is %DEFAULTNAME%.
Example (ASE 15):
D_%.28:DOMAIN%
The FunctionList domain has a default value defined in its check
parameters: Technical Engineer. The following SQL script will
generate a default name for that default value:
create default D_FunctionList
as 'Technical Engineer'
go
UddtRuleName
Specifies the name of a rule for a user-defined data type. This item is used with
DBMSs that do not support check parameters on user-defined data types.
When a user-defined data type has a specific rule defined in its check parameters, a name is created for this rule.
The corresponding variable is %RULE%.
Example (ASE 15):
R_%.28:DOMAIN%
The Domain_speciality domain has to belong to a set of values. This
domain check has been defined in a validation rule. The SQL script will
generate the rule name following the template defined in the item UddtRuleName:
create rule R_Domain_speciality
as (@Domain_speciality in ('Industry','Military','Nuclear','Bank','Marketing'))
go
execute sp_bindrule R_Domain_speciality, T_Domain_speciality
go
178
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
CreateFunc
CustomFunc
Specifies the statement for creating a user-defined function, a form of procedure that returns a value to the calling environment for use in queries and
other SQL statements.
Example (SQL Anywhere 10):
create function [%QUALIFIER%]%FUNC% (<arg> <type>)
RETURNS <type>
begin
end
CustomProc
179
Description
DropFunc
EnableFunc
Function Comment
ImplementationType
MaxFuncLen
Procedure Comment
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
DefaultTrigger
Name
EnableMulti Trigger
180
Description
Event
Specifies a list of trigger event attributes to populate the Event list on the
Definition tab of Trigger property sheets.
Example:
Delete
Insert
Update
EventDelimiter
ImplementationType
Time
Specifies a list of trigger time attributes to populate the Time list on the
Definition tab of Trigger property sheets.
Example:
Before
After
Trigger Comment
UniqName
Specifies whether trigger names must be unique within the global scope of the
database. The following settings are available:
Yes Trigger names must be unique within the global scope of the database.
No Trigger names must be unique per object
181
Description
UseErrorMsg Table
Specifies a macro for accessing trigger error messages from a message table in
your database.
Enables the use of the User-defined radio button on the Error Messages tab of
the Trigger Rebuild dialog box (see Data Modeling > Building Data Models >
Triggers and Procedures > Generating Triggers and Procedures > Creating
User-Defined Error Messages).
If an error number in the trigger script corresponds to an error number in the
message table, the default error message of the .ERROR macro is replaced
your message.
Example (ASE 15):
begin
select @errno = %ERRNO%,
@errmsg = %MSGTXT%
from %MSGTAB%
where %MSGNO% = %ERRNO%
goto error
end
Where:
Specifies a macro for accessing trigger error messages from the trigger template definition.
Enables the use of the Standard radio button on the Error Messages tab of the
Trigger Rebuild dialog box.
The error number and message defined in the template definition are used.
Example (ASE 15):
begin
select @errno = %ERRNO%,
@errmsg = %MSGTXT%
goto error
end
See also UseErrorMsgTable.
ViewTime
182
Description
[Common items]
The following common object items may be defined for DBMS triggers:
For a description of each of these common items, see Common object items on
page 143.
EventDelimiter
Events_scope
Specifies a list of trigger event attributes to populate the Event list on the
Definition tab of Trigger property sheets for the selected scope, for example,
schema, database, server.
Scope
Specifies a list of available scopes for the DBMS trigger. Each scope must
have an associated Events_scope item.
Time
Specifies a list of trigger time attributes to populate the Time list on the
Definition tab of Trigger property sheets.
Example:
Before
After
Trigger Comment
183
Description
[Common items]
The following common object items may be defined for join indexes:
Add
AfterCreate, AfterDrop, AfterModify
BeforeCreate, BeforeDrop, BeforeModify
Create, Drop
Enable, EnableOwner
Header, Footer
Maxlen
ModifiableAttributes
Options, DefOptions
ReversedQueries, ReversedStatements
SqlAttrQuery, SqlListQuery, SqlOptsQuery
For a description of each of these common items, see Common object items on
page 143.
AddJoin
Specifies the SQL statement used to define joins for join indexes.
Example:
Table1.coln1 = Table2.coln2
EnableJidxColn
Enables support for attaching multiple columns to a join index. In Oracle 9i,
this is called a bitmap join index.
JoinIndex Comment
Description
[Common items]
Enable
ReversedQueries
SqlListQuery
For a description of each of these common items, see Common object items on
page 143.
184
Description
Label
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
Rename
Sequence Comment
185
Description
[Common items]
Create, Drop
Enable, EnableSynonym
Maxlen
ReversedQueries
SqlAttrQuery, SqlListQuery
For a description of each of these common items, see Common object items on
page 143.
EnableAlias
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
Bind
186
Group Comment
ObjectOwner
Description
SqlListChildren
Query
Unbind
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
Bind
187
Description
SqlListChildren
Query
Unbind
l,
s,
u,
r
Description
[Common items]
The following common object items may be defined for database packages:
For a description of each of these common items, see Common object items on
page 143.
Authorizations
188
Description
CreateBody
Specifies a template for defining the body of the database package. This
statement is used in the extension statement AfterCreate.
Example (Oracle 10g):
create [or replace ]package body [%QUALIFIER%]
%DBPACKAGE% [.O:[as][is]][%IsPragma% ? pragma serially_reusable]
%DBPACKAGEBODY%
[begin
%DBPACKAGEINIT%
]end[ %DBPACKAGE%];
DB Package Procedure
DB Package Variable
DB Package Type
DB Package Cursor
DB Package Exception
DB Package Pragma
Each contains many of the following items that define how database packages are modeled for
your DBMS.
Item
Description
[Common items]
The following common object items may be defined for database packages:
Add
ReversedQueries
For a description of each of these common items, see Common object items on
page 143.
DBProcedure Body
[database package procedures only] Specifies a template for defining the body
of the package procedure in the Definition tab of its property sheet.
Example (Oracle 10g):
begin
end
189
Description
ParameterTypes
[database package procedures and cursors only] Specifies the available types
for procedures or cursors.
Example (Oracle 10g: procedure):
in
in nocopy
in out
in out nocopy
out
out nocopy
Description
[Common items]
The following common object items may be defined for database packages:
Add
ReversedQueries
For a description of each of these common items, see Common object items on
page 143.
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
190
Description
GrantOption
RevokeInherited
RevokeOption
System
DATABASE
DEFAULT
PROCEDURE
TRIGGER
RULE
TABLE
VIEW
Description
[Common items]
Create, Drop
Enable
ReversedQueries
SqlListQuery
For a description of each of these common items, see Common object items on
page 143.
GrantOption
RevokeInherited
RevokeOption
191
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
Bind
char(10)
PublicOwner
Unbind
192
Description
[Common items]
The following common object items may be defined for web services and web
operations:
For a description of each of these common items, see Common object items on
page 143.
Enable Namespace
EnableSecurity
OperationType List
ServiceTypeList
UniqName
Specifies whether web service operation names must be unique in the database.
193
Description
Specifies the syntax for adding a comment to web service or web service
operation.
Description
[Common items]
The following common object items may be defined for web parameters:
Add
Enable
For a description of each of these common items, see Common object items on
page 143.
EnableDefault
ParameterDttp List
Specifies a list of data types that may be used as web service parameters.
194
Item
Description
ResultColumn
DttpList
Specifies a list of data types that may be used for result columns.
Description
[Common items]
For a description of each of these common items, see Common object items on
page 143.
AddAttr Hierarchy
AddAttribute
AddHierarchy
AddJoin Hierarchy
Specifies the syntax for defining a list of joins for hierarchy attributes.
Example (Oracle 10g):
join key [.O:[(%DIMNKEYLIST%)][%DIMNKEYLIST%]] references
%DIMNPARENTLEVEL%
195
Description
AddLevel
Description
[Common items]
The following common object items may be defined for extended objects:
For a description of each of these common items, see Common object items on
page 143.
AlterStatement List
Specifies a list of text items representing statements modifying the corresponding attributes
Comment
196
Description
AmcdAmcdType
Lists mappings to convert from specialized data types (such as XML, IVL, MEDIA, etc) to standard PowerDesigner data types. These mappings are used to help
conversion from one DBMS to another, when the new DBMS does not support
one or more of these specialized types. For example, if the XML data type is not
supported, TXT is used.
AmcdDataType
PhysDataType
Lists mappings to convert from DBMS (Physical Model) data types to PowerDesigner (Internal) data types.
These mappings are used during PDM to CDM generation and with the Change
Current DBMS command.
Examples (ASE 15):
PhysDttpSize
Lists the storage sizes of DBMS data types. These values are used when estimating the size of a database.
Examples (ASE 15):
OdbcPhysData
Type
Lists mappings to convert from live database (ODBC) data types to DBMS
(Physical Model) data types during database reverse engineering.
These mappings are used when data types are stored differently in the database
(often due to the inclusion of a default size) than in the DBMS notation.
Examples (ASE 15):
197
Description
PhysOdbcData
Type
Lists mappings of DBMS (Physical Model) data types to database (ODBC) data
types for use when updating and reverse engineering a database.
These mappings are used when data types that are functionally equivalent but
different to those specified in the PDM are found in an existing database to avoid
the display of unnecessary and irrelevant differences in the Merge dialog.
Examples (ASE 15):
PhysLogADT
Type
Lists mappings to convert from DBMS (Physical Model) abstract data types to
PowerDesigner (Internal) abstract data types.
These mappings are used to populate the Type field and display the appropriate
properties in abstract data type property sheets and with the Change Current
DBMS command.
Examples (Oracle 11g):
LogPhysADT
Type
The Oracle 11g VARRAY abstract data type is converted to an Array for
PowerDesigner.
The Oracle 11g SQLJ_OBJECT datatype is converted to a JavaObject
for PowerDesigner.
AllowedADT
Lists the abstract data types that may be used as types for columns and domains in
the DBMS.
Example (ASE 15):
198
JAVA
Description
HostDataType
Lists mappings to convert from DBMS data types (Physical Model) to data types
permitted as procedure parameters (Trigger).
These mappings are used to populate the Data type field in ADT procedure
parameter property sheets
Examples (Oracle 11g):
your DBMS definition file - you should save a backup of this file before editing it.
a separate extension file - which you attach to your model.
For detailed information about working with profiles, including adding extended attributes
and objects, see Chapter 2, Extension Files on page 11.
199
You can create as many extended attributes as you need, for each DBMS supported object.
Note: PowerDesigner variable names are case sensitive. The variable name must be an exact
match of the extended attribute name.
Example
For example, in DB2 UDB 7 OS/390, the extended attribute WhereNotNull allows you to
add a clause enforcing the uniqueness of index names if they are not null.
In the Create index order, WhereNotNull is evaluated as follows:
create [%INDEXTYPE% ][%UNIQUE% [%WhereNotNull%?where not
null ]]index [%QUALIFIER%]%INDEX% on [%TABLQUALIFIER%]%TABLE% (
%CIDXLIST%
)
[%OPTIONS%]
If the index name is unique, and if you set the type of the WhereNotNull extended attribute
to True, the "where not null" clause is inserted in the script.
In the SqlListQuery item:
{OWNER, TABLE, INDEX, INDEXTYPE, UNIQUE, INDEXKEY, CLUSTER,
WhereNotNull}
select
tbcreator,
tbname,
200
201
, which calls the GetEstimatedSize event handler on the Column metaclass (see
Calling the GetEstimatedSize Event Handler on Another Metaclass on page 204):
Function %GetEstimatedSize%(obj, ByRef message)
' First compute global database setting variable we will need.
' Get table size and keep column size for future use
Dim ColSizes, TblSize, ColSize, C
Set ColSizes = CreateObject("Scripting.Dictionary")
TblSize = 0 ' May be changed to take into account table
definition initial size.
for each C in obj.Columns
' Start browsing table columns and use event handler defined
on column metaclass (if it exists).
ColSize = C.GetEstimatedSize(message, false)
202
' Store column size in the map for future use in indexes.
ColSizes.Add C, ColSize
' Increase the table global size.
TblSize = TblSize + ColSize
next
Dim RawDataSize
RawDataSize = BlockSize * int(obj.Number * TblSize / BlockSize)
' At this point, the RawDataSize is the size of table in
database.
Next the size of the table indexes is calculated directly in the script without making a call to
an event handler on the Index metaclass, the line outputting index sizes is formatted and
the size of the indexes added to the total database size:
' Now calculate index sizes. Set up variables to store indexes
sizes.
Dim X, XMsg, XDataSize
XMsg = ""
for each X in obj.Indexes
XDataSize = 0
' Browsing index columns and get their size added in
XDataSize
For each C in X.IndexColumns
XDataSize = XDataSize + ColSizes.Item(C.Column)
next
XDataSize = BlockSize * int(obj.Number * XDataSize /
BlockSize)
' Format the display message in order to get size
information in output and result list.
XMsg = XMsg & CStr(XDataSize) & "|" & X.ObjectID & vbCrLf
' Add the index size to table size.
RawDataSize = RawDataSize + XDataSize
next
Finally the size information is formatted for output (see Formatting the Database Size
Estimation Output on page 204). Each table is printed on a separate line in both the Output
and Result List windows, and its total size including all columns and indexes is given:
' set the global message to table size and all indexes
(separate with carriage return).
message = CStr(RawDataSize) & "||" & obj.ShortDescription &
vbCrLf & XMsg
%GetEstimatedSize% = RawDataSize
End Function
Once all the tables have been processed, PowerDesigner calculates and prints the total
estimated size of the database.
203
In general, we recommend that you use the function in the folllowing form:
GetEstimatedSize(message, false)
The use of the false parameter (which is the default, but which is shown here for clarity)
means that we call the GetEstimatedSize event handler on the other metaclass, and use
the default mechanism only if the event handler is not available.
Setting the parameter to true will force the use of the default mechanism for calculating the
size of objects (only possible for tables, columns, and join indexes):
GetEstimatedSize(message, true)
where:
For example, in the event handler defined on the Table metaclass (having calculated and
stored the size of a table, the size of all the columns of type LONG contained in the table, and
the size of each index in the table), we create a message variable to print this information. We
begin by printing a line giving the size of a table:
204
We then add a line printing the total size of all the columns of type LONG in the table:
message = message & CStr(LongSize) & "||Columns of type LONG" &
vbCrLf
We then add a line printing the size of each index in the table:
message = message & CStr(IndexSize) & "|" & objIndex.ObjectID &
vbCrLf
In the event handler defined on the Tablespace metaclass (having calculated and stored the
size of a tablespace), we create a message variable to print this information after the database
size calculation has been printed.
We begin by overriding the default introduction to this second compartment:
message = ":1||Tables are allocated to the following tablespaces:"
We then add a line printing the size of each tablespace in the table
message = message + CStr(tablespaceSize) & ":1||" &
objTablespace.ShortDescription
Estimated size
--------------
Object
------------------------------------
10,000
6096 KB
Table 'Invoices'
Columns of type LONG (35 KB)
Index 'customerFKeyIndex' (976 KB)
Index 'descriptionIndex' (1976 KB)
[...etc...]
Object
-----------------------------------Tablespace 'mainStorage'
[...etc...]
205
During reverse engineering by script, the section of the SQL query determined as being the
physical options is stored in %OPTIONS%, and will then be parsed when required by an
object property sheet.
During live database reverse engineering, the SqlOptsQuery SQL statement is executed to
retrieve the physical options which is stored in %OPTIONS% to be parsed when required by
an object property sheet.
You can use PowerDesigner variables (see PDM Variables and Macros on page 211) to set
physical options for an object. For example, in Oracle, you can set the following variable for a
cluster to make the cluster take the same name as the table.
Cluster %TABLE%
For information about setting physical options, see Data Modeling > Building Data Models >
Physical Implementation > Physical Options.
206
Generates As
max_rows_per_page=%d
max_rows_per_page=value
for instance %s
<Partition-name> %s
name
You can insert a colon followed by comma-separated keywords to control your options:
Keyword
category=metaclass
Allows the user to associate the object with an object of the specified kind. The
following settings are available:
tablespace
storage
ble.Columns
on %s : category=storage
{
list=value|value
default=value
dquoted=yes and
squoted=yes
207
multiple=yes
Specifies that the option is displayed with a <*> suffix in the left pane of the
Physical Options tab and can be added to the right pane as many times as necessary. If the option is selected in the right pane and you click the same option in
the left pane to add it, a message box asks you if you want to reuse the selected
option. If you click No, a second instance of the option is added to the right pane.
enabledbprefix=yes
Specifies that the database name is inserted as a prefix (see tablespace options in
DB2 OS/390).
prevmand=yes
and nextmand=yes
Specifies that the previous or next physical option is required for the present
option and that if the present option is added to the right pane, then the previous or
next option is also added.
Examples
Physical Option
Generates As
string
Everything entered before the colon is generated in scripts. The name is required by
PowerDesigner, but you can place it between carets (<name>) if you need to exclude it from
the final script. The %d or %s variables require a numeric or string value, and you can also use a
PowerDesigner variable or GTL snippet.
208
composite=yes
separator=yes
parenthesis=yes
Specifies that the ensemble of dependant objects are contained between parentheses.
chldmand=ye
s
Examples
Physical Option
<list> : composite=yes, multiple=yes
{
<frag-expression> %s
in %s : category=storage
}
<using_block> : composite=yes,parenthesis=yes
{
using vcat %s
using stogroup %s : category=storage, composite=yes
{
priqty %d : default=12
secqty %d
erase %s : default=no, list=yes
| no
}
Generates As
frag-expression
in storage
frag-expression2
in storage2
etc
(using vcat string
using stogroup storage
priqty value
secqty value
erase no)
209
Note: This dialog will be empty if no physical options are defined at Script/
Objects/object/Options.
2. Select the physical option required and click OK to create an extended attribute associated
with it.
3. Specify any other appropriate properties.
4. Select the form in which you want to insert the physical option and click the Add Attribute
tool to insert it as a control (see Adding Extended Attributes and Other Controls to Your
Form on page 58).
Note: To change the physical option associated with an extended attribute, click the ellipsis to
the right of the Physical Options field in the Extended Attribute property sheet.
210
Note: You can use these variables freely in your own queries, but you cannot change the
method of their evaluation (ie, %TABLE% can only ever evaluate to the code of the table). You
can alternately, access any object properties using GTL (see Chapter 5, Customizing
Generation with GTL on page 245) and the public names available through the
PowerDesigner metamodel (see Chapter 8, The PowerDesigner Public Metamodel on page
343).
The evaluation of variables depends on the parameters and context. For example, the
%COLUMN% variable cannot be used in a Create Tablespace query, because it is only
valid in a column context.
These variables can be used for all objects supporting these concepts:
Variable
Comment
%COMMENT%
%OWNER%
Generated code of User owning Object or its parent. You should not use
this variable for queries on objects listed in live database reverse dialog
boxes, because their owner is not defined yet
%DBPREFIX%
%QUALIFIER%
%OPTIONS%
%OPTIONSEX%
%CONSTNAME%
%CONSTRAINT%
%CONSTDEFN%
%RULES%
211
Comment
%NAMEISCODE%
True if the object (table, column, index) name and code are identical
(AS 400 specific)
%TABLQUALIFIER%
%TABLOWNER%
Include optional strings and variables, or lists of strings and variables in the syntax of SQL
statements: [%variable%]
Test the value of a variable and insert or reconsider a value depending of the result of the
test: [%variable%? true : false]
Test the content of a variable [%variable%=constant? true : false]
Variable
Generation
[%variable%]
[%variable%?
true : false]
Tests for the existence of the variable and allows conditional output.
Generation: true is generated if variable exists and is not assigned
NO or FALSE. Otherwise, false is generated.
Reverse: If the parser detects variable and it is not assigned NO or
FALSE, true is reversed. Otherwise, false is reversed. variable is set
to True or False as appropriate.
[%variable%=constant? true :
false]
212
Generation
[.Z: [item1]
[item2]...]
[.O: [item1]
[item2]...]
Specifies that the items are synonyms, only one of which should be
output.
Generation: Only the first item listed is generated.
Reverse: The reverse parser must find one of the items to validate the
full statement.
Examples
[%OPTIONS%]
If %OPTIONS% (physical options for the objects visible in the object property sheet) exists
and is not assigned NO or FALSE, it is generated to the value of %OPTIONS%.
[default %DEFAULT%]
If %MAND% is evaluated as true or contains a value other than False or NO, it is generated
as not null. Otherwise it is generated as null.
Because of the presence of the .Z variable, both of the following statements will be
reversed correctly even though the column attributes are not in the same order:
Create table abc (a integer not null default 99)
Create table abc (a integer default 99 not null)
[.O:[procedure][proc]]
This statement will generate procedure. During reverse engineering, the parser will
match either procedure or proc keywords.
Note: A string between square brackets is always generated. For reverse engineering,
placing a string between square brackets means that it is optional and its absence will not
cancel the reversing of the statement.
213
Description
[-][x].[-]y[M]
Extracts the first y characters or, for -y, the last y characters.
If x is specified, and y is lower than x, then blanks or zeros are added to
the right of the extracted characters to fill the width up to x. For -x, the
blanks or zeros are added to the left and the output is right-justified.
If the M option is appended, then the first x characters of the variable are
discarded and the next y characters are output.
Thus, for an object named abcdefghijklmnopqrstuvwxyz
(with parentheses present simply to demonstrate padding):
Template
(%.3:Name%)
(%.-3:Name%)
(%10.3:Name%)
(%10.-3:Name%)
(%-10.3:Name%)
(%-10.-3:Name%)
(%10.3M:Name%)
gives
gives
gives
gives
gives
gives
gives
Output
(abc)
(xyz)
(abc
(xyz
(
(
(jkl)
)
)
abc)
xyz)
q and Q
You can combine format codes. For example, the template (%12.3QMFU:Name%) applied
to object abcdefghijklmnopqrstuvwxyz generates ("Lmn").
214
Comment
%TABLE%
%TNAME%
Name of Table
%TCODE%
Code of Table
%TLABL%
Comment of Table
%PKEYCOLUMNS%
%TABLDEFN%
%CLASS%
%CLASSOWNER%
%CLASSQUALIFIER%
%CLUSTERCOLUMNS%
%INDXDEFN%
%TABLTYPE%
Table type
Comment
%VIEW%
%VIEWNAME%
View name
%VIEWCODE%
View code
%VIEWCOLN%
%SQL%
%VIEWCHECK%
%SCRIPT%
%VIEWSTYLE%
215
Comment
%ISVIEW%
%USAGE%
Comment
%XMLELEMENT%
%XMLSCHEMA%
XML schema
216
Variable
Comment
%COLUMN%
%COLNNO%
%COLNNAME%
Name of Column
%COLNCODE%
Code of Column
%PRIMARY%
%ISPKEY%
%ISAKEY%
%FOREIGN%
%COMPUTE%
%PREVCOLN%
%NEXTCOLN%
%NULLNOTNULL%
Mandatory status of a column. This variable is always used with NullRequired item, see Working with Null Values on page 158
%PKEYCLUSTER%
CLUSTER keyword for the primary key when it is defined on the same
line
Comment
%AKEYCLUSTER%
%AVERAGELENGTH%
Average length
%ISVARDTTP%
%ISLONGDTTP%
%ISBLOBDTTP%
%ISSTRDTTP%
Comment
%DOMAIN%
%DEFAULTNAME%
Name of the default object associated with the domain (SQL Server
specific)
Comment
%UNIT%
%FORMAT%
%DATATYPE%
%DTTPCODE%
%LENGTH%
%PREC%
%ISRDONLY%
%DEFAULT%
Default value
%MINVAL%
Minimum value
%MAXVAL%
Maximum value
%VALUES%
217
Comment
%LISTVAL%
%MINMAX%
SQL constraint associated with Min and max values. Ex: (C1 <= 0)
AND (C1 >= 5)
%ISMAND%
%MAND%
%NULL%
%NOTNULL%
%IDENTITY%
%WITHDEFAULT%
%ISUPPERVAL%
%ISLOWERVAL%
%UPPER%
%LOWER%
%CASE%
SQL constraint associated with cases (upper, lower, first word capital,
etc)
218
Variable
Comment
%COLUMNS% or %COLNLIST%
%ISPKEY%
%PKEY%
%AKEY%
%KEY%
%ISMULTICOLN%
%CLUSTER%
Cluster keyword
Comment
%INDEX%
%TABLE%
%INDEXNAME%
Index name
%INDEXCODE%
Index code
%UNIQUE%
%INDEXTYPE%
%CIDXLIST%
List of index columns with separator, on the same line. Example: A asc, B
desc, C asc
%INDEXKEY%
%CLUSTER%
%INDXDEFN%
Comment
%ASC%
%ISASC%
Comment
%REFR%
%PARENT%
219
Comment
%PNAME%
%PCODE%
%PQUALIFIER%
%CHILD%
%CNAME%
%CCODE%
%CQUALIFIER%
%REFRNAME%
Reference name
%REFRCODE%
Reference code
%FKCONSTRAINT%
%PKCONSTRAINT%
%CKEYCOLUMNS%
%FKEYCOLUMNS%
%UPDCONST%
Contains Update declarative constraint keywords "restrict", "cascade", "set null" or "set default"
%DELCONST%
%MINCARD%
Minimum cardinality
%MAXCARD%
Maximum cardinality
%POWNER%
%COWNER%
%CHCKONCMMT%
%REFRNO%
%JOINS%
References joins.
220
Comment
%CKEYCOLUMN%
%FKEYCOLUMN%
%PK%
%PKNAME%
%FK%
%FKNAME%
%AK%
%AKNAME%
%COLTYPE%
%COLTYPENOOWNER
%
%DEFAULT%
%HOSTCOLTYPE%
Primary key column data type used in procedure declaration. For example: without length
Comment
%ORDER%
Order number of Trigger (in case DBMS support more than one trigger of
one type)
%TRIGGER%
%TRGTYPE%
%TRGEVENT%
%TRGTIME%
%REFNO%
%ERRNO%
%ERRMSG%
221
Comment
%MSGTAB%
%MSGNO%
%MSGTXT%
%SCRIPT%
%TRGBODY%
%TRGDESC%
%TRGDEFN%
Trigger definition
%TRGSCOPE%
Comment
%PROC%
Generated code of Procedure (also available for trigger when Trigger is implemented with a procedure)
%FUNC%
%PROCPRMS%
222
Variable
Comment
%RULE%
%RULENAME%
Rule name
%RULECODE%
Rule code
%RULECEXPR%
%RULESEXPR%
Comment
%SQNC%
Name of sequence
%SQNCOWNER%
Comment
%SYNONYM%
%BASEOBJECT%
%BASEOWNER%
%BASEQUALIFIER%
%VISIBILITY%
%SYNMTYPE%
%ISPRIVATE%
%ISPUBLIC%
Comment
%TABLESPACE%
%STORAGE%
Comment
%ADT%
223
Comment
%TYPE%
Type of Abstract data type. It contains keywords like "array", "list", ...
%SIZE%
%FILE%
%ISARRAY%
%ISLIST%
%ISSTRUCT%
%ISOBJECT%
%ADTDEF%
%ADTBODY%
%SUPERADT%
%ADTNOTFINAL
%
%ADTABSTRACT
%
%ADTHEADER%
%ADTTEXT%
%SUPERQUALIFIER%
224
%ADTAUTH%
%ADTJAVANAME
%
%ADTJAVADATA
%
%ADTATTRDEF%
%ADTMETHDEF
%
Comment
%ADTATTR%
%ATTRJAVANAME%
The following variables are available for abstract data type procedures:
Variable
Comment
%ADTPROC%
Procedure code
%PROCTYPE%
%PROCFUNC%
%PROCDEFN%
%PROCRETURN
%
%PARAM%
Procedure parameters
%PROCNOTFINAL%
Procedure final
%PROCSTATIC%
Procedure member
%PROCABSTRACT%
Procedure instantiable
%SUPERPROC%
Procedure super-procedure
%ISCONSTRUCTOR%
%PROCJAVANAME%
%ISJAVAVAR%
%ISSPEC%
225
Comment
%JIDX%
%JIDXDEFN%
%REFRLIST%
%RFJNLIST%
%FACTQUALIFIER%
%JIDXFACT%
%JIDXCOLN%
List of columns
%JIDXFROM%
From clause
%JIDXWHERE%
Where clause
Comment
%RULENAME%
%DEFAULTNAME%
%USE_SP_PKEY%
%USE_SP_FKEY%
226
Variable
Comment
%OLDOWNER%
%NEWOWNER%
%OLDQUALIFIER%
%NEWQUALIFIER%
%OLDTABL%
Comment
%NEWTABL%
%OLDCOLN%
%NEWCOLN%
%OLDNAME%
%NEWNAME%
Comment
%DBPACKAGE%
%DBPACKAGECODE%
%DBPACKAGESPEC%
%DBPACKAGEBODY%
%DBPACKAGEINIT%
%DBPACKAGEPRIV%
%DBPACKAGEAUTH%
%DBPACKAGEPUBLIC%
%DBPACKAGETEXT%
%DBPACKAGEHEADER
%
Comment
%DBPKPROC%
Procedure code
%DBPKPROCTYPE%
%DBPKPROCCODE%
%DBPKPROCRETURN%
227
Comment
%DBPKPROCPARAM%
Procedure parameters
Comment
%DBPFVAR%
Variable code
%DBPFVARTYPE%
Variable type
%DBPFVARCONST%
%DBPFVARVALUE%
Comment
%DBPKTYPE%
Type code
%DBPKTYPEVAR%
List of variables
%DBPKISSUBTYPE%
Comment
%DBPKCURSOR%
Cursor code
%DBPKCURSORRETURN%
%DBPKCURSORQUERY
%
Cursor query
%DBPKCURSORPARAM
%
Cursor parameter
Comment
%DBPKEXEC%
Exception code
228
Comment
%DBPKPARM%
Parameter code
%DBPKPARMTYPE%
Parameter type
%DBPKPARMDTTP%
%DBPKPARMDEFAULT
%
Comment
%DBPKPRAGMA%
Pragma directive
%DBPKPRAGMAOBJ%
Comment
%PRIVLIST%
%REVPRIVLIST%
%PERMLIST%
%REVPERMLIST%
%COLNPERMISSION%
%BITMAPCOLN%
%USER%
%GROUP%
%ROLE%
%GRANTEE%
%PASSWORD%
%OBJECT%
%PERMISSION%
229
Comment
%PRIVILEGE%
%GRANTOPTION%
%REVOKEOPTION%
%GRANTOR%
%MEMBER%
%GROUPS%
%MEMBERS%
%ROLES%
%SCHEMADEFN%
Schema definition
Comment
%BOUND_OBJECT%
Binded object
Comment
%WEBSERVICENAME%
%WEBSERVICE%
%WEBSERVICETYPE%
%WEBSERVICESQL%
SQL statement
%WEBSERVICELOCALPATH%
Local path
230
Comment
%WEBOPERATIONNAME%
%WEBOPERATION%
%WEBOPERATIONTYPE
%
We operation type
%WEBOPERATIONSQL
%
SQL statement
%WEBOPERATIONPARAM%
Comment
%WEBUSER%
%WEBCNCTSECURED%
Connection secured
%WEBAUTHREQUIRED
%
Authorization required
Comment
%WEBPARAM%
%WEBPARAMNAME%
%WEBPARAMTYPE%
%WEBPARAMDTTP%
%WEBPARAMDEFAULT
%
Comment
%DIMENSION%
%DIMNDEF%
Dimension definition
231
Comment
%DIMNATTR%
%DIMNOWNERTABL%
%DIMNTABL%
Level table
%DIMNCOLN%
Level column
%DIMNCOLNLIST%
%DIMNHIER%
Dimension hierarchy
%DIMNKEY%
%DIMNKEYLIST%
%DIMNLEVELLIST%
%DIMNATTRHIER%
Attribute of hierarchy
%DIMNATTRHIERFIRST
%
%DIMNDEPATTR%
%DIMNDEPCOLN%
Dependent column
%DIMNDEPCOLNLIST%
232
Variable
Comment
%EXTENDEDOBJECT%
%EXTENDEDSUBOBJECT%
%EXTSUBOBJTPARENT
%
%EXTSUBOBJTPARENTOWNER%
%EXTSUBOBJTPARENTQUALIFIER%
Comment
%EXTOBJECTDEFN%
Comment
%R%
%S%
Allow to skip a word. The string is parsed for reverse but not generated
%D%
Allow to skip a numeric value. The numeric value is parsed for reverse but
not generated
%A%
Allow to skip all Text. The text is parsed for reverse but not generated
%ISODBCUSER%
%CATALOG%
%SCHEMA%
Variable representing a user login and the object belonging to this user in
the database. You should use this variable for queries on objects listed in
database reverse dialog boxes, because their owner is not defined yet.
Once the owner of an object is defined, you can use SCHEMA or OWNER
%SIZE%
Data type size of column or domain. Used for live database reverse, when
the length is not defined in the system tables
%VALUE%
%PERMISSION%
%PRIVILEGE%
Comment
%DATE%
%USER%
%PATHSCRIPT%
%NAMESCRIPT%
%STARTCMD%
233
Comment
%ISUPPER%
%ISLOWER%
%DBMSNAME%
%DATABASE%
%DATASOURCE%
%USE_SP_PKEY%
Use stored procedure primary key to create primary keys (SQL Server
specific)
%USE_SP_FKEY%
Use stored procedure foreign key to create primary keys (SQL Server
specific)
Argument
Description
statement
prefix
suffix
last suffix
condition
Alternate key code (if condition argument is left empty the macro returns a statement for each alternate key in the table)
Example
In a trigger for the table TITLEAUTHOR:
234
Note: For columns, these macros only accept the %COLUMN% variable.
.ALLCOL Macro
Repeats a statement for each column in a table
Syntax
.ALLCOL("statement","prefix","suffix","last_suffix")
Argument
Description
statement
prefix
suffix
last suffix
Example
In a trigger for the table AUTHOR, the following macro:
.ALLCOL("%COLUMN% %COLTYPE%","",",",";")
.DEFINE Macro
Defines a variable and initializes its value
Syntax
.DEFINE "variable" "value"
235
Description
variable
value
Example
In a trigger for the table AUTHOR, the following macro:
.DEFINE "TRIGGER" "T_%TABLE%"
message 'Error: Trigger(%TRIGGER%) of table %TABLE%'
.DEFINEIF Macro
Defines a variable and initializes its value if the test value is not null
Syntax
.DEFINEIF "test_value" "variable" "value"
Argument
Description
test_value
Value to test
variable
value
Example
For example, to define a variable for a default data type:
%DEFAULT%
.DEFINEIF "%DEFAULT%" "_DEFLT"" "%DEFAULT%"
Add %COLUMN% %DATATYPE% %_DEFLT%
.ERROR Macro
Handles errors.
Syntax
.ERROR (errno, "errmsg")
236
Argument
Description
errno
Error number
errmsg
Error message
Example
.ERROR(-20001, "Parent does not exist, cannot insert child")
.FOREACH_CHILD Macro
Repeats a statement for each parent-to-child reference in the current table fulfilling a
condition.
Syntax
.FOREACH_CHILD ("condition")
"statement"
.ENDFOR
Argument
Description
condition
statement
Statement to repeat
Condition
Selects
UPDATE RESTRICT
Restrict on update
UPDATE CASCADE
Cascade on update
UPDATE SETNULL
UPDATE SETDEFAULT
DELETE RESTRICT
Restrict on delete
DELETE CASCADE
Cascade on delete
DELETE SETNULL
DELETE SETDEFAULT
Example
In a trigger for the table TITLE, the following macro:
.FOREACH_CHILD("DELETE RESTRICT")
-- Cannot delete parent "%PARENT%" if children still exist in
"%CHILD%"
.ENDFOR
237
.FOREACH_COLUMN Macro
Repeats a statement for each column in the current table fulfilling a condition.
Syntax
.FOREACH_COLUMN ("condition")
"statement"
.ENDFOR
Argument
Description
condition
statement
Statement to repeat
Condition
Selects
empty
All columns
PKCOLN
FKCOLN
AKCOLN
NMFCOL
INCOLN
Triggering columns (primary key columns, foreign key columns; and non-modifiable columns)
Example
In a trigger for the table TITLE, the following macro:
.FOREACH_COLUMN("NMFCOL")
-- "%COLUMN%" cannot be modified
.ENDFOR
238
.FOREACH_PARENT Macro
Repeats a statement for each child-to-parent reference in the current table fulfilling a
condition.
Syntax
.FOREACH_PARENT ("condition")
"statement"
.ENDFOR
Argument
Description
condition
statement
Statement to repeat
Condition
empty
All references
FKNULL
FKNOTNULL
FKCANTCHG
Example
In a trigger for the table SALE, the following macro:
.FOREACH_PARENT("FKCANTCHG")
-- Cannot modify parent code of "%PARENT%" in child "%CHILD%"
.ENDFOR
.INCOLN Macro
Repeats a statement for each primary key column, foreign key column, alternate key column,
or non-modifiable column in a table.
Syntax
.INCOLN("statement","prefix","suffix","last_suffix")
239
Description
statement
prefix
suffix
last suffix
Example
In a trigger for the table TITLE, the following macro:
.INCOLN("%COLUMN% %COLTYPE%","",",",";")
.JOIN Macro
Repeats a statement for column couple in a join.
Syntax
.JOIN("statement","prefix","suffix","last_suffix")
Argument
Description
statement
prefix
suffix
last suffix
Example
In a trigger for the table TITLE, the following macro:
.FOREACH_PARENT()
where .JOIN("%PK%=%FK%", " and", "", ";")
message 'Reference %REFR% links table %PARENT% to %CHILD%'
.ENDFOR
Note: For columns, the macro JOIN only accepts the variables %PK%, %AK%, and %FK
%.
240
.NMFCOL Macro
Repeats a statement for each non-modifiable column in a table. Non-modifiable columns have
Cannot Modify selected as a check parameter.
Syntax
.NMFCOL("statement","prefix","suffix","last_suffix")
Argument
Description
statement
prefix
suffix
last suffix
Example
In a trigger for the table TITLE, the following macro:
.NMFCOL("%COLUMN% %COLTYPE%","",",",";")
Example
The business rule ACTIVITY_DATE_CONTROL has the following server expression:
activity.begindate < activity.enddate
In a trigger based on template AfterDeleteTrigger, you type the following macro in the
Definition tab of the trigger:
.SERVEREXPRESSION(ACTIVITY_DATE_CONTROL)
241
.SQLXML Macro
Represents a SQL/XML query in the definition of a trigger, a procedure or a function.
Use one of the following tools:
The Insert SQL/XML Macro tool opens a selection dialog box where you choose a global
element from an XML model. The XML model must be open in the workspace, mapped to
a PDM, and have the SQL/XML extension file attached. Click OK in the dialog box and
the SQLXML macro is displayed in the definition code, with the code of the XML model
(optional) and the code of the global element.
The Macros tool, where you select .SQLXML( ) in the list. The SQLXML macro is
displayed empty in the definition code. You must fill the parentheses with the code of an
XML model (optional), followed by :: and the code of a global element. The XML model,
from which you choose a global element, must be open in the workspace, mapped to a
PDM, and have the SQL/XML extension file attached.
After generation, the SQLXML macro is replaced by the SQL/XML query of the global
element.
Syntax
.SQLXML(code of an XML model::code of a global element)
242
Example
In a trigger for the table EMPLOYEE, the following macro:
.SQLXML(CorporateMembership::DEPARTMENT)
243
244
CHAPTER 5
The PowerDesigner Generation Template Language (GTL) is used to extract model object
properties as text. GTL is written in templates and generated files defined under metaclasses in
language definition and extension files. It powers generation of code for business process,
object-oriented and XML languages, and can be used to define new generations for any model.
When you launch a generation from a model, PowerDesigner generates a file for each instance
of each metaclass for which you have defined a generated file (see Generated Files (Profile) on
page 86) by evaluating the templates it calls and resolving any variables.
GTL is object-oriented, supporting inheritance and polymorphism for reusability and
maintainability, and provides macros for testing variables and iterating through collections,
etc.
A GTL template can contain text, macros, and variables, and can reference:
Note: Though GTL can be used to extend generation in a PDM, the standard generation is
primarily defined using a different mechanism (see Database Generation and Reverse
Engineering on page 120).
245
6. Click OK to save your changes in the resource file and return to your model.
7. Create an instance of the metaclass on which you defined the template and generated file,
open its property sheet, and click the Preview tab.
8. Select the myFile sub-tab to preview what would be generated for this object.
Standard properties defined in the PowerDesigner public metamodel (see Chapter 8, The
PowerDesigner Public Metamodel on page 343) are referenced using their public names,
which are written in CamelCase. You can infer public names for many properties from their
labels in object property sheets, but in case of doubt, click the Property Sheet Menu button at
the bottom of the property sheet and select Find in Metamodel Objects Help to review all
available properties for the object.
Extended attributes (see Extended Attributes (Profile) on page 41) are referenced by their
Name defined in the resource editor.
Note: To access an extended attribute defined in another extension file attached to the model,
prefix the name with the .D formatting option. For example:
246
Standard collections defined in the PowerDesigner public metamodel (see Chapter 8, The
PowerDesigner Public Metamodel on page 343) are referenced using their public names,
which are written in CamelCase. You can infer public names for many collections from their
labels in object property sheet tabs, but in case of doubt, click the Property Sheet Menu
button at the bottom of the property sheet and select Find in Metamodel Objects Help to
review all available collections for the object.
Extended collections (see Extended Collections and Compositions (Profile) on page 49 and
Calculated Collections (Profile) on page 51) are referenced by their Name.
You can use the following keywords to access information about a collection:
Name
Description
First
IsEmpty
Count
(integer) Returns the number of elements in the collection. You can use this keyword for defining criteria based on collection size, for example Attributes.Count>=10.
247
Description
[-][x].[-]y[M]
Extracts the first y characters or, for -y, the last y characters.
If x is specified, and y is lower than x, then blanks or zeros are added to the
right of the extracted characters to fill the width up to x. For -x, the blanks
or zeros are added to the left and the output is right-justified.
If the M option is appended, then the first x characters of the variable are
discarded and the next y characters are output.
Thus, for an object named abcdefghijklmnopqrstuvwxyz
(with parentheses present simply to demonstrate padding):
Template
(%.3:Name%)
(%.-3:Name%)
(%10.3:Name%)
(%10.-3:Name%)
(%-10.3:Name%)
(%-10.-3:Name%)
(%10.3M:Name%)
248
gives
gives
gives
gives
gives
gives
gives
Output
(abc)
(xyz)
(abc
(xyz
(
(
(jkl)
)
)
abc)
xyz)
q and Q
Description
Returns the human-readable value of an attribute used in the PowerDesigner interface when this value differs from the internal representation.
For example, the value of the Visibility attribute is stored internally
as +, but is displayed as public in the property sheet. The template
%Visibility% generates as +, but %.D:Visibility% generates as public.
Note: You can access extended attributes defined in another extension file
by prefixing them with the .D option (see Extracting Object Properties on
page 246).
[deprecated use the ! power evaluation operator instead, see GTL Operators on page 252].
Examples
This file is generated for %.UQ:Name%. It has the form of a %.L:Color% %.L:Shape%.
This file is generated for "MYGADGET". It has the form of a red
triangle.
The following template is applied to object abcdefghijklmnopqrstuvwxyz
%12.3QMFU:Name%
Result:
"Lmn"
249
Conditional Blocks
Place text containing a variable between square brackets to have it appear only if the variable
resolves to a non-null value.
You can also use a form similar to C and Java ternary expressions to print a string if the variable
is true or not null:
[variable ? ifNotNull]
250
Examples
Attribute %Code%[ = %InitialValue%];
Result:
Attribute
Attribute
Attribute
Attribute
A1 =0;
A2 =100;
A3;
A4 =10;
Description
%ActiveModel%
%GenOptions%
%PreviewMode%
%CurrentDate%
(string) Returns the current system date and time formatted using local
settings.
%CurrentUser%
%NewUUID%
251
GTL Operators
GTL supports standard arithmetic and logical operators along with some advanced template
operators.
The following standard arithmetical and logical operators are supported, where x and y can be
numbers or templates resolving to numbers:
Operator
Description
Assignment operator.
== and !=
&& and ||
%+(x,y)%
Addition operator.
%-(x,y)%
Subtraction operator.
%*(x,y)%
Multiplication operator.
%/(x,y)%
Division operator.
%&(x,y)%
In this example, the template in the left column produces the output on the right:
Template
Base number=
Number+1=
Number-1=
Number*2=
Number/2=
Number&1=
252
Results
%Number%
%+(Number,1)%
%-(Number,1)%
%*(Number,2)%
%/(Number,2)%
%&(Number,1)%
Base number=
Number+1=
Number-1=
Number*2=
Number/2=
Number&1=
4
5
3
8
2
0
Description
Power evaluation operator - Evaluates the results of the evaluation of the variable as
a template.
In the following example, a local variable is returned normally and in a powerevaluated form:
.set_value(C, %%MyAttribute%%)
%C%
%!C%
Result:
%MyAttribute%
Red
The ! operator may be applied any number of times. For example:
%!!t%
This outputs the results of the evaluation of the evaluation of the evaluation of
template t.
253
Description
Visibility operator - Tests whether an object property is visible in the interface, and
returns false if it is not.
For example, to test if the Type field is displayed in the General tab of a database
property sheet in a DMM (meaning that a Replication Server extension file is
attached to the model), enter the following:
%Database.Type+%
254
Translation Scope
The initial scope of a template is always the metaclass on which it is defined. All standard and
extended attributes, collections, and templates defined on the active object metaclass and its
parents are visible, but only one object is active at any given time.
Examples
The following template is applied to a package P1, which contains a class C1, which contains
operations O1 and O2, which each contain parameters P1 and P2. The scope changes, affecting the
value of the %Name% variable, as each collection is traversed. The Outer keyword is used to return
temporarily to previous scopes:
%Name%
.foreach_item(Classes)
\n\t*%Name% in %Outer.Name%
.foreach_item(Operations)
\n\t*%Name% in %Outer.Name% in %Outer.Outer.Name%
.foreach_item(Parameters)
\n\t\t*%Name% in %Outer.Name% in %Outer.Outer.Name% in
%Outer.Outer.Outer.Name%
.next
.next
.next
Result:
P1
*C1 in P1
*O1 in C1 in P1
*P1 in O1 in
*P2 in O1 in
*O2 in C1 in P1
*P1 in O2 in
*P2 in O2 in
C1 in P1
C1 in P1
C1 in P1
C1 in P1
The Outer scope is restored when you leave a .foreach_item block. Nested scopes form a
hierarchy that can be viewed as a tree, with the top level scope being the root. Use Parent instead of
Outer to climb above the scope of the original object. For example, nothing will be output if the
following template is applied to the parameter P1:
%Name% in %Outer.Name% in %Outer.Outer.Name%
However, this template will produce output:
%Name% in %Parent.Name% in %Parent.Parent.Name%
Result:
P1 in O1 in C1
255
Shortcut Translation
Shortcuts are dereferenced during translation, so that the scope of the target object replaces the
scope of the shortcut. This is different from VB Script where shortcut translation retrieves the
shortcut itself. You can use the %IsShortcut% variable to test whether an object is a
shortcut, and the Shortcut keyword to access the properties of the shortcut itself.
Template
In this example, the template is applied to an OOM package P1 containing two classes and two
shortcuts to classes in P2:
.foreach_item(Classes)
\n*Class %Code% [%IsShortcut% ? From package %Package.Name% : Local
Object]
.next
Result:
*Class
*Class
*Class
*Class
C1
C2
C3
C4
Local Object
Local Object
From package P2
From package P2
Note: If your model contains shortcuts to objects in another model that is not open, a dialog
box invites you to open the target model. You can use the .set_interactive_mode
macro to change this behavior (see .set_interactive_mode Macro on page 278).
Escape Sequences
GTL supports a number of escape sequences to simplify the layout of your templates and
generated files, and to make reserved characters accessible.
The following escape sequences can be used inside templates:
256
Escape sequence
Description
\n
New line. For examples of using new lines in macro blocks, see Controlling Line Breaks in Head and Tail Strings on page 250.
\t
Tab
\\
Backslash
\ at end of line
. at beginning of line
Description
.. at beginning of line
%%
Percent character.
Calling Templates
You can call a template from a generated file or from another template by entering its name
surrounded by percentage signs. Object properties, collections, and local and global variables
are called in the same way. At generation time, a template call is replaced by the template
content, which is then resolved to its final textual value.
Examples:
Breaking templates into concise units and calling them at generation time helps with
readability and reuse. For example, you can define a commonly-used condition in one
template and reference it in multiple other templates:
Example
The %isInner% template is defined as:
.bool (%ContainerClassifier%!=null)
The %QualifiedCode% template calls the %isInner% template to test if the class is an inner
class:
.if (%isInner%)
%ContainerClassifier.QualifiedCode%::%Code%
.else
%Code%
.endif
Result:
C2::C1
The %QualifiedCode% template is applied to the C1 class, which is an inner class to C2.
257
258
You can view the overridden parent by right-clicking the child template and selecting Go
to Super-Definition. You can specify the use of the parent template by prefixing the
template call with the :: qualifying operator. For example:
%Classifier::isAbstract%.
Template overloading - You can overload your template definitions and test for different
conditions. Templates can also be defined under criteria (see Criteria (Profile) on page 40)
or stereotypes (see Stereotypes (Profile) on page 37), and the corresponding conditions are
combined. At translation-time, each condition is evaluated and the appropriate template
(or, in the event of no match, the default template) is applied. For example:
Classifier:
myFile generated file
%t% template
Class:
%t% template
Classifier:
myOtherFile generated file
%t% template
Class:
%t% template
The Class and Interface metaclasses both inherit from the Classifier metaclass,
and each will generate a myFile and a myOtherFile.
The following template calls are possible in myLang/Classifier/myFile (which
cannot access the templates in myExtension):
Template Call in myFile
Template Called
%t% or
myLang/Class/t
%myLang::t%
%Classifier::t% or
myLang/Classifier/t
%myLang::Classifier::t%
The following template calls are possible in myExtension/Classifier/
myOtherFile (which can access both its own templates and those in myLang):
Template Call in myOtherFile
Template Called
%t% or
myExtension/Class/t
%myExtension::t%
%Classifier::t% or
myExtension/Classifier/t
%myExtension::Classifier::t%
%myLang::t% or
myLang/Class/t
%myLang::Class::t%
%myLang::Classifier::t%
myLang/Classifier/t
Note: For an extension file to reach templates defined in a language definition file, the
Complement language generation property in the extension must be selected (see Extension
File Properties on page 14).
259
260
261
Recursive Templates
A template can call itself, but such a template should contain some kind of criteria or scope
change to avoid an infinite loop.
Example
Class C1 is inner to class C2, which is in turn inner to C3. The template %topContainerCode
% tests whether the present classifier is inner to another, and if so, calls itself on the container classifier
to perfom the same test until it reaches a classifier that is not inner, at which point it prints the code of
the top container:
.if (%isInner%)
%ContainerClassifier.topContainerCode%
.else
%Code%
.endif
Result:
C3
GTL-Specific Attributes
PdCommon.BaseObject
262
PdCommon.BaseModel
PdOOM.*
PdOOM.Association
RoleAMinMultiplicity (string)
RoleAMaxMultiplicity (string)
RoleBMinMultiplicity (string)
RoleBMaxMultiplicity (string)
GTL-Specific Attributes
PdOOM.Attribute
MinMultiplicity (string)
MaxMultiplicity (string)
Overridden (boolean)
DataTypeModifierPrefix (string)
DataTypeModifierSuffix (string)
@<tag> [Java-specific] (string) - Javadoc@<tag> extended attribute with additional formatting
PdOOM.Class
MinCardinality (string)
MaxCardinality (string)
SimpleTypeAttribute [XML-specific]
@<tag> [Java-specific] (string) - Javadoc@<tag> extended attribute with additional formatting
PdOOM.Interface
PdOOM.Operation
DeclaringInterface (object)
GetSetAttribute (object)
Overridden (boolean)
ReturnTypeModifierPrefix (string)
ReturnTypeModifierSuffix (string)
@<tag> [Java-specific] (string) - Javadoc@<tag> extended attribute with additional formatting (especially for @throws,
@exception, @params)
PdOOM.Parameter
DataTypeModifierPrefix (string)
DataTypeModifierSuffix (string)
Collection name
PdCommon.BaseModel
PdCommon. BaseClassifierMapping
SourceLinks
PdCommon. BaseAssociationMapping
SourceLinks
263
264
.object and .collection Macros on page 278 - returns a collection of objects based on
the specified scope and condition.
.object and .collection Macros on page 278 - return an object or collection based on the
specified scope and condition.
.bool Macro on page 266 - evaluates a condition.
.set_interactive_mode Macro on page 278 defines whether the GTL execution must
interact with the user.
.error and .warning Macros on page 269
.abort_command Macro
This macro stops a generation command.
Example
.if %_JAVAC%
.execute_command (%_JAVAC%,%FileName%)
.else
.abort_command
.endif
For information about generation commands, see Generation Category on page 112.
.block Macro
This macro wraps a block of output with a header and/or a footer, if the output is not empty.
.block [(head)]
block-input
.endblock[(tail)]
Description
head
block-input
tail
265
Result
.block (<b>)
%Comment%
.endblock (</b>)
.bool Macro
This macro returns true or false depending on the value of the condition specified.
.bool (condition)
Description
condition
Example
Result
.bool(%.3:Code%= =ejb)
true
.break Macro
This macro can be used to break out of .foreach loops.
Example
.set_value(_hasMain, false, new)
.foreach_item(Operations)
.if (%Code% == main)
.set_value(_hasMain, true)
.break
.endif
.next
%_hasMain%
266
Description
path
Example
Result
.change_dir(C:\temp)
.create_path(C:\temp\mydir)
For information about generation commands, see Generation Category on page 112.
Description
expression
Specifies the text to be converted. For .convert_name, this is generally the %Name
% variable and may include a suffix or prefix.
Type: Simple template
separator
267
Description
delimiters
[optional] Specifies the different delimiters likely to exist in the input code or name,
and which will be replaced by separator. You can declare several separators, for
example "_ " and "-"
Type: Text
case
[optional for .convert_name only] Specifies the case into which to convert
the code. You can choose between:
.enddelete
.replace (string,new-string)
block-input
.endreplace
Description
string
new-string
block-input
Specifies the text to be parsed for instances of the string to delete or replace.
Type: Complex template
268
Examples
Result
.delete(Get)
GetCustomerName
.enddelete
CustomerName
Result
.replace(Get,Set)
GetCustomerName
.endreplace
SetCustomerName
.replace(" ", _)
Customer Name
.endreplace
Customer_Name
Description
message
Example
.error no initial value supplied for attribute %Code% of class
%Parent.Code%
.execute_command Macro
This macro is launches executables as part of a generation command. If there is a failure for
any reason (executable not found or output sent to stderr), then command execution is
stopped.
.execute_command (cmd [,args [,mode]])
Description
cmd
269
Description
args
mode
Example
.execute_command(notepad, file1.txt, cmd_ShellExecute)
For information about generation commands, see Generation Category on page 112.
.execute_vbscript Macro
This macro is used to execute a VB script specified in a separate file as part of a generation
command.
.execute_vbscript (vbs-file [,script-parameter])
Description
vbs-file
script-parameter
Example
.execute_vbscript(C:\samples\vbs\login.vbs, %username%)
The result of the script is available in the ScriptResult global property (see Manipulating
Models, Collections, and Objects (Scripting) on page 312). The active object of the current translation
scope can be accessed through the ActiveSelection collection as ActiveSelection.Item(0).
For information about generation commands, see Generation Category on page 112.
270
.foreach_item Macro
This macro iterates over a collection of sub-objects or related objects.
.foreach_item (collection [,head [,tail [,filter [,order]]]])
output
.next [(separator)]
Description
collection
head
Type: Text
[optional] Specifies text to be generated after the output, unless the collection is empty.
tail
Type: Text
[optional] Specifies a filter to apply to the collection before iteration.
filter
order
When the comparison evaluates to true, %Item1% will be placed after %Item2%.
By default, the collection is ordered alphabetically by name.
Type: Simple condition
output
separator
Note: If parameter values contain commas, braces, or leading or trailing blanks, they must be
delimited with double-quotes. To escape double-quotes inside a parameter value, use \".
271
272
.foreach_line Macro
This macro iterates over the lines of the multiline block of text using the special
%CurrentLine% local variable.
.foreach_line (input [,head [,tail]])
output
.next [(separator)]
Description
input
head
tail
[optional] Specifies text to be generated after the output, unless there is no output.
Type: Text
output
separator
273
.foreach_part Macro
This macro iterates over the parts of a string divided by a delimiter using the special
%CurrentPart% local variable.
.foreach_part (input [,"delimiter" [,head [,tail]]])
output
.next[(separator)]
Description
input
delimiter
Specifies the sub-string that divides the input into parts. You can specify multiple
characters including ranges. For example [A-Z] specifies that any capital letter
acts as a delimiter.
By default, the delimiter is set to ' -_,\t' (space, dash, underscore, comma,
or tab).
Note: The delimiter must be surrounded by single quotes if it contains a space.
Type: Text
head
tail
[optional] Specifies text to be generated after the output, unless there is no output.
Type: Text
output
274
Description
separator
For example:
Examples
This template is applied to My class:
.foreach_part (%Name%)
%.FU:CurrentPart%
.next
Result:
MyClass
This template is applied to My class:
.foreach_part (%Name%,' -_',tbl_)
%.L:CurrentPart%
.next(_)
Result:
tbl_my_class
This template is applied to MyClass:
.foreach_part (%Name%,[A-Z])
%.L:CurrentPart%
.next(-)
Result:
my-class
.if Macro
This macro is used for conditional generation.
.if[not] condition
output
[(.elsif[not] condition
output)*]
[.else
output]
.endif [(tail)]
275
Description
condition
If no operator and condition are specified, the condition evaluates to true unless
the value of the variable is false, null, or the empty string.
If variable and comparison are not integers, the operators perform a string
comparison that takes into account embedded numbers. For example:
Class_10 > Class_2
You can chain conditions together using the and or or logical operators.
Type: Simple template
output
tail
[optional] Specifies text to be generated after the output, unless the output is
empty.
Type: Text
Examples
Simple .if block:
.if %Abstract%
This class is abstract.
.endif
Result (if the Abstract property is selected):
This class is abstract.
With two conditions and an .else clause:
.if (%Abstract%==false) && (%Visibility%=="+")
This class is public and concrete.
.else
This is not a public, concrete class.
.endif
Result (if the Abstract property is not selected and the Visibility property is set to Public):
This class is public and concrete.
276
.log Macro
This macro logs a message to the Output window Generation tab as part of a generation
command.
.log message
Example
.log undefined environment variable: JAVAC
For information about generation commands, see Generation Category on page 112.
.endlowercase
.uppercase
block-input
.enduppercase
Description
block-input
277
Result
.lowercase
%Comment%
.endlowercase
Applied to
This is my comment.
Produces:
this is my comment.
Description
scope
filter
Examples
.object(Attributes, (%.1:Code%>= a) and (%.1:Code% <= e))
Result:
C73C03B7-CD73-466A-B323-0B90B67E82FC
.collection(Attributes, (%.1:Code%>= a) and (%.1:Code% <= e))
Result:
C73C03B7-CD73-466A-B323-0B90B67E82FC;77E3F55CCF24-440F-84E7-5AA7B3399C00;F369CD8C-0C16-4896-9C2D-0CD2F80D6980;0
0ADD959-0705-4061-BF77-BB1914EDC018;
.set_interactive_mode Macro
This macro is used to define if the GTL execution must interact with the user or not.
.set_interactive_mode(mode)
278
Description
mode
im_Batch - Suppresses dialog boxes and always uses default values. For
example, if your model contains external shortcuts and the target model for
the shortcuts is closed, this mode will automatically open the model without
user interaction.
Description
scope
[optional] Specifies the qualifying scope. If no scope is set, then the scope is the
object with the current scope. Use the this keyword to explicitly give a scope
of the current object, or Parent to give a scope of the parent object.
Type: Simple-template returning an object or a collection scope
name
Specifies the name of the object or variable, which you can reference elsewhere
in the template in the form of %name%.
Type: Simple-template
object-ref
279
Description
value
mode
new - Forces the (re)-definition of the variable in the current scope. Recommended when a variable with the same name may already be defined in a
previous scope.
update [default] If a variable with the same name already exists, update the
existing variable. Otherwise define a new one.
newifundef - Define the variable in the current scope if it has not been defined
in an outer scope. Otherwise do nothing.
Examples:
Examples
.set_object(Attribute1, Attributes.First)
.set_value(FirstAttributeCode, %Attributes.First.Code%)
%FirstAttributeCode% (OID: %Attribute1%)
Result:
a1 (OID: 63442F85-48DF-42C8-92C1-0591F5D34525)
.set_value(this.key, %Code%-%ObjectID%)
Result:
C1-40D8F396-EE29-4B7B-8C78-E5A0C5A23325
.set_value(i, 1, new)
%i?%
.unset(i)
%i?%
Result:
true
false
The first call to %i?% outputs true as the variable i is defined, and the second outputs false,
because it has been unset.
Note: You can use the dereferencing operator, * (see GTL Operators on page 252), to convert
the value of a variable set with the .set_value macro to a template name. For example, the
following code is equivalent to %Code%.:
.set_value(i, Code)
%*i%
280
.unique Macro
This macro outputs a block in which each line of the text generated is unique, and is often used
for calculating imports, includes, typedefs, or forward declarations in languages such as Java,
C++ or C#.
.unique
block-input
.endunique[(tail)]
Description
block-input
tail
Type: Text
Example
.unique
import java.util.*;
import java.lang.String;
%imports%
.endunique
.vbscript Macro
This macro is used to embed VBScript code inside a template as part of a generation
command. The result of the script is available as the ScriptResult array
.vbscript [(script-param-list)]
block-input
.endvbscript [(tail)]
Description
script-param-list
Specifies the parameters to pass to the script through the ScriptInputArray table.
Type: List of simple-template arguments separated by commas
block-input
281
Description
tail
Examples
This simple script accepts the two words hello and world as input parameters, and returns them
as a single string with a space in between them:
.vbscript(hello, world)
ScriptResult = ScriptInputArray(0) + " " + ScriptInputArray(1)
.endvbscript
Result:
hello world
282
ScriptResult = attrCode
.endvbscript
Note: The active object of the current translation scope is accessed as ActiveSelection.Item(0) (see Manipulating Models, Collections, and Objects (Scripting) on page 312).
For information about generation commands, see Generation Category on page 112.
283
expecting .endif
expecting .end%s
Add an appropriate .end to the macro block (for example, see .unique Macro on page 281).
unknown macro
284
Unknown collection (see Accessing Collections of SubObjects or Related Objects on page 247).
null object
expecting object variable: object
no outer scope
Deadlock detected
285
286
CHAPTER 6
When you create a report, you select a report language, which contains all the framing text
used in the generation of the report for the selected language, such as report section titles, types
of model objects, and their properties. PowerDesigner ships with support for English
(default), French, and simplified and traditional Chinese. You can edit these files, or use them
as the basis for creating your own files for translations into other languages.
Report language files have an .xrl extension and are stored in install_dir/Resource
Files/Report Languages. To view the list of report languages, select Tools >
Resources > Report Languages. For information about the tools available in resource file
lists, see Chapter 1, PowerDesigner Resource Files on page 1.
In the following example, Entity Card, Entity Description, and Entity Annotation are shown in
English and French as they will appear in the Report items pane:
The report language files use GTL templates (see Chapter 5, Customizing Generation with
GTL on page 245) to factorize the work of translation. Report Item Templates interact with
your translations of the names of model objects and Linguistic Variables (that handle syntactic
peculiarities such as plural forms and definite articles) to automatically generate all the textual
287
the List - object collections report item template (see Profile/Report Item Templates
Category on page 303) is translated as:
Liste des %@Value% %ParentMetaClass.OFTHECLSSNAME% %%PARENT%%
2. Select a report language and click the Properties tool to open it in the Resource Editor.
Note: You can open the .xrl file attached to a report open in the Report Editor by selecting
Report > Report Properties, and clicking the Edit Current Language tool beside the
288
289
290
Property
Description
Name
Code
File Name
Comment
Description
Forms
Lists
You can create new mapping tables containing keywords values specific to particular types of
model objects.
291
Value
TRUE
Displayed
FALSE
Not Displayed
292
8. Click Apply to save your changes. When you generate a report, the Displayed property
will be shown using the specified values:
293
Description
Common Objects
Contains the text items available to all models. You must provide translations of
these items here.
Example: HTMLNext provides the text for the Next button in an HTML report.
Report Wizard
Contains the report titles generated with the Report Wizard. You must provide
translations of these items here.
Example: Short description title provides the text for a short description section
when you generate a report with the Report Wizard.
294
Description
[Models]
Contain the report titles and other text items available to each model. These are
automatically generated, but you can override the default values.
Example: DataTransformationTasks list provides the text for the data transformation tasks list of a given transformation process in the Data Movement Model.
By default (with the exception of the Common Objects and Report Wizard sub-categories)
these translations are automatically generated from the templates in the Profile category (see
Profile/Report Item Templates Category on page 303). You can override the automatically
generated values by entering your own text in the Localized name field, which will depress
the User-Defined button to indicate that the value is no longer generated.
Note: The All Report Titles tab (see All Report Titles Tab on page 297) displays the same
translations shown in this category in a simple, sortable list form. You may find it more
convenient to check and, where appropriate, to override generated translations on this tab.
Example: Translating the HTML Report Previous Button
The HTML report Previous button is a common object available to all models, and located in
the Common Objects category. You must translate this text item manually along with the other
items in this, and the Report Wizard categories.
1. Open the Report Titles > Common Objects category.
2. Click the HtmlPrevious entry to display its properties, and enter a translation in the
Value box. The User-Defined button is depressed to indicate that the value is no longer
generated.
295
296
For each report listed in the Name column, you can review or override a translation in the
Localized Name column. You can sort the list to group similarly-named objects, and translate
identical items together by selecting multiple lines.
297
Description
[Models]
Common Objects
For each item the name is given, and you must provide a translation in the Localized name
field. This value is retrieved by the templates you have specified in the Profile category to
generate default report titles (see Report Titles Category on page 294).
298
For each metaclass listed in the Name column, you must enter a translation in the Localized
Name column. You can sort the list to group similarly-named objects, and translate identical
items together by selecting multiple lines.
299
For each attribute or collection listed in the Name column, you must enter a translation in the
Localized Name column. You can sort the list to group similarly-named objects, and translate
identical items together by selecting multiple lines.
300
Specifying appropriate grammar rules for your language, and inserting them into your report
item templates will dramatically improve the quality of the automatic generation of your
report titles. You can create as many variables as your language requires.
Each linguistic variable and the result of its evaluation is displayed for each metaclass in the
Object Attributes category (see Object Attributes Category on page 298).
The following are examples of grammar rules specified as linguistic variables to populate
report item templates in the French report language resource file:
GENDER Identifies as feminine a metaclass name %Value%, if it finishes with "e" and
as masculine in all other cases:
.if (%.-1:@Value% == e)
F
.else
M
.endif
CLSSNAMES Creates a plural by adding "x" to the end of the metaclass name %Value
%, if it finishes with "eau" or "au" and adds "s" in all other cases:
301
THECLSSNAME Inserts the definite article before the metaclass name %Value% by
inserting " l' ", if it begins with a vowel, "le" if it is masculine, and "la" if not:
OFTHECLSSNAME Inserts the preposition "de" plus the definite article before the
metaclass name %Value%,if it begins with a vowel or if it is feminine, otherwise "du".
OFCLSSNAME Inserts the preposition " d' " before the metaclass name %Value%,, if it
begins with a vowel, otherwise "de".
302
You must provide translations for each template by entering your own text. Variables (such as
%text%) must not be translated.
For example the template syntax for the list of sub-objects contained within a collection
belonging to an object is the following:
List of %@Value% of the %ParentMetaClass.@Value% %%PARENT%%
When this template is evaluated, the variable %@Value% is resolved to the value of the
localized name for the object, %ParentMetaClass.@Value% is resolved to the value of
the localized name for the parent of the object, and %%PARENT%% is resolved to the name for
the parent of the object.
In this example, you translate this template as follows:
303
304
CHAPTER 7
Scripting PowerDesigner
When working with large or multiple models, it can be tedious to perform repetitive tasks,
such as modifying objects using global rules, importing or generating new formats, or
checking models. Such operations can be automated through scripts.
You can access and modify any PowerDesigner object using Java, VBScript, C#, or many
other languages. In this chapter, we focus primarily on writing VBScript to execute in
PowerDesigner's Edit/Run Script dialog, but you can also call add-ins from PowerDesigner
menus (see Launching Scripts and Add-Ins from Menus on page 338) or script the
PowerDesigner application via OLE automation (see OLE Automation and Add-Ins on page
332).
The following script illustrates the basic syntax of VBScript applied to manipulating
PowerDesigner models and objects, including:
305
Note: VBScript can also be used to create custom checks, event handlers, transformations,
and methods in an extension file (see Chapter 2, Extension Files on page 11) and embedded in
or called from GTL templates (see .execute_vbscript Macro on page 270 and .vbscript Macro
on page 281).
The examples in this chapter are intended to introduce the basic concepts and techniques for
controlling PowerDesigner by script. For complete documentation of the PowerDesigner
metamodel, select Help > Metamodel Objects Help. For full documentation of VBScript,
see the Microsoft MSDN site.
306
The following tools are available on the Edit/Run Script dialog toolbar:
307
Description
Editor Menu [Shift+F11] - Contains the following commands:
New [Ctrl+N] - Reinitializes the field by removing all the existing content.
Open... [Ctrl+O] - Replaces the content of the field with the content of the selected file.
Insert... [Ctrl+I] - Inserts the content of the selected file at the cursor.
Save [Ctrl+S] - Saves the content of the field to the specified file.
Save As... - Saves the content of the field to a new file.
Select All [Ctrl+A] - Selects all the content of the field.
Find... [Ctrl+F] - Opens a dialog to search for text in the field.
Find Next... [F3] - Finds the next occurence of the searched for text.
Find Previous... [Shift+F3] - Finds the previous occurence of the searched for
text.
Replace... [Ctrl+H] - Opens a dialog to replace text in the field.
Go To Line... [Ctrl+G] - Opens a dialog to go to the specified line.
Toggle Bookmark [Ctrl+F2] Inserts or removes a bookmark (a blue box) at the
cursor position. Note that bookmarks are not printable and are lost if you refresh
the tab
Next Bookmark [F2] - Jumps to the next bookmark.
Previous Bookmark [Shift+F2] - Jumps to the previous bookmark.
Edit With [Ctrl+E] - Opens the previewed code in an external editor. Click the down
arrow to select a particular editor or Choose Program to specify a new editor. Editors
specified here are added to the list of editors available at Tools > General Options >
Editors.
Save [Ctrl+S] - Saves the content of the field to the specified file.
Print [Ctrl+P] - Prints the content of the field.
Find [Ctrl+F] - Opens a dialog to search for text.
Cut [Ctrl+X], Copy [Ctrl+C], and Paste [Ctrl+V] - Perform the standard clipboard
actions.
Clear - Deletes the script in the dialog.
Undo [Ctrl+Z] and Redo [Ctrl+Y] - Move backward or forward through edits.
Multiple levels of Undo and Redo are supported but , if you run a script that modifies
objects in several models, you must use the Undo or Redo commands in each of the
models called by the script.
308
Description
Run [F5] - Runs the script. Output is printed to the Output window.
If a compilation error occurs, a message box is displayed, a brief error description
appears in the dialog's Result pane, and the cursor is set at the error position.
You can catch errors using the On Error Resume Next statement, unless the
script is called in the im_Abort interactive mode (see .set_interactive_mode Macro
on page 278).
Find in Metamodel Objects Help [Ctrl+F1] - Opens the PowerDesigner metamodel
objects help file, which provides detailed information about all the attributes, collections, and methods available for each metaclass.
309
310
311
The following global functions are commonly used to create or open models and perform
actions upon them:
312
CreateModel() and OpenModel() - Create and open a model (see Creating and
Opening Models (Scripting) on page 313).
Output() - Prints text to the Script tab of PowerDesigner's Output window.
IsKindOf() - Tests the metaclass of the object.
ExecuteCommand() - Launches an external application
The following global constants provide information about the instance of PowerDesigner:
For detailed information about all the global properties, constants, and functions, select Help
> MetaModel Objects Help and navigate to Basic Elements.
313
This script verifies that the previously created model exists, and then opens it in the
workspace:
Dim MyModel, FileName
FileName = "c:\temp\MyOOM.oom"
On Error Resume Next ' Avoid generic scripting error message
Set MyModel = OpenModel(FileName)
If MyModel is nothing then ' Display an error message box
msgbox "Failed to open Model:" + vbCrLf + FileName, vbOkOnly,
"Error"
Else ' Display a message in Output
output "The OOM has been opened."
End If
314
Compositions - contain objects that will be deleted if the parent is deleted. For example,
the PdPDM/Tables and PdPDM/Table/Columns collections are compositions.
Aggregations - reference objects that will continue to exist if the parent is deleted. For
example, the PdCommon/NamedObject/AttachedRules collection (inherited by
most objects) is an aggregation.
Unordered collections - contain objects with no significant order. For example, the
PdCDM/Entity/Relationships collection is unordered.
Ordered collections - contain objects where the user chooses the order. For example, the
PdPDM/Table/Columns collection is ordered.
Read-only collections - can only be browsed. For example, the global Models collection
(all open models) is read-only.
315
Clear([delete = y|n]) - Removes all objects from the collection and optionally
deletes them.
Creates a PDM,
Creates objects in the model's Tables and BusinessRules unordered composition
collections, and
Adds some objects to table T1's AttachedRules ordered aggregation collection and
then manipulates that collection:
316
Description
Name / Code /
Path
Specifies the name or code of, or the path to the object. For example, to find the
column Address in the table Customer in the package Sales from the
context of the model node, you could search by name Address or by path
Sales/Customer/Address.
Kind
OptionalParams
"Stereotype" - Specifies that the object to find must bear the specified ster-
eotype.
"LastFound" - Specifies to begin the search after this object. This parameter
is used when several objects have the same path value, and can be used to
launch a find in a while loop that uses the previous match as the last found
parameter.
CaseSensitive=y|n - [default: y] Specifies that the search is case sensitive.
IncludeShortcuts - [default: n] Specifies that shortcuts can be found.
UseCodeInPlaceOfName - [ByPath, default: n] Specifies that the object can
be found by its code (Default=n).
PathSeparator - [ByPath, default= /, \, or ::)] Specifies the character to separate nodes in the path.
You can get standard attribute values using the dot notation (object.attribute) or using the
following methods:
317
Note: For information about getting and setting extended attribute values see Creating and
Accessing Extensions (Scripting) on page 329
The following script opens a sample OOM, finds a class by name and a parameter by path, and
then prints and modifies some of their properties:
Dim MyModel, C, P
'Open model file
Set MyModel=OpenModel(EvaluateNamedPath("%_EXAMPLES%\" & "UML2
Sample.oom"))
'Obtain class and parameter
Set C=MyModel.FindChildByName("OrderManager",cls_Class)
Set P=Mymodel.FindChildByPath("SecurityManager/CheckPassword/
login",PdOOM.cls_Parameter)
'Print initial values
Output "Initial Values:"
PrintProperties C, P
'Modify values
C.Comment="This class controls orders."
C.SetAttributeText "Visibility", "private"
P.Name="LoginName"
'Print revised values
Output "Revised Values:"
PrintProperties C, P
'Procedure for printing values
Sub PrintProperties(MyClass, MyParam)
output "Class: " & MyClass.Name
output vbTab & "Comment: " & MyClass.Comment
output vbTab & "Visibility: " &
MyClass.GetAttributeText("Visibility")
output vbTab & "Persisted as: " &
MyClass.GetAttributeText("PersistentGenerationMode")
output "Parameter: " & MyParam.Parent & "." & MyParam.Name
output vbTab & "Data type: " & MyParam.DataType
output vbTab & "Parameter type: " &
MyParam.GetAttributeText("ParameterType")
End Sub
318
You can also create objects using the CreateObject(kind) method. This script creates a
class inside an OOM and sets some of its properties:
Dim MyModel
Set MyModel = ActiveModel
Dim MyClass
' Create a class
Set MyClass = MyModel.CreateObject(cls_Class)
MyClass.SetNameAndCode "Another Class", "Class2"
MyClass.Comment = "Created by CreateObject"
When creating a link object, you must define its extremities. This script creates two classes
and joins them by an association link:
Dim MyModel
Set MyModel = ActiveModel
Dim MyFirstClass, MySecondClass, MyAssociation
' Create classes
Set MyFirstClass = MyModel.Classes.CreateNew()
MyFirstClass.SetNameAndCode "Class1", "C1"
Set MySecondClass = MyModel.Classes.CreateNew()
MySecondClass.SetNameAndCode "Class2", "C2"
' Create association
Set MyAssociation = MyModel.Associations.CreateNew()
MyAssociation.Name = "A1"
' Define its extremities
Set MyAssociation.Object1 = MyFirstClass
Set MyAssociation.Object2 = MySecondClass
319
The following script creates an EAM and four architecture areas, aligns them in a square, and
formats the top-left area:
Dim NewModel, idx, obj, sym
set NewModel = CreateModel(PdEAM.Cls_Model,
"Diagram=CityPlanningDiagram")
NewModel.SetNameAndCode "MyEAM" , "MyEAM"
For idx = 1 to 4
Set obj=NewModel.ArchitectureAreas.CreateNew()
obj.SetNameAndCode "A" & idx, "A" & idx
Set sym=ActiveDiagram.AttachObject (obj)
sym.width=30000
sym.height=20000
Next
dim A1, A2, A3, A4, X1, Y1
set A1 =
NewModel.FindChildByName("A1",cls_architecturearea).Symbols.Item(0)
set A2 =
NewModel.FindChildByName("A2",cls_architecturearea).Symbols.Item(0)
set A3 =
NewModel.FindChildByName("A3",cls_architecturearea).Symbols.Item(0)
set A4 =
NewModel.FindChildByName("A4",cls_architecturearea).Symbols.Item(0)
320
321
To add all the tables to the selection, use the AddObjects method:
MySelection.AddObjects MyModel,cls_table
322
For more information about properties and methods available on the workspace, select Help >
MetaModel Objects Help and navigate to Libraries/PdWSP/Workspace.
The following script creates a shortcut of the class C1 from model O1 package P1 directly
under model O2:
323
"|Language=Analysis|
"|DBMS=Sybase SQL Anywhere
idx
idx
the PDM as its source
324
For more information about objects mapping, see Core Features Guide > Linking and
Synchronizing Models > Object Mappings.
To browse the reports in a model, use the Reports collection. For example:
Dim model
Set model = ActiveModel
For each m in model.Reports
Output m.Name
Next
325
326
To generate to a live database connection, you would connect to the database (using the
ConnectToDatabase() method) and then set the GenerateODBC property to true.
Note: For more information about the generation options, select Help > MetaModel Objects
Help and navigate to Libraries/PdPDM/BasePhysicalPackageOptions.
This procedure modifies the model by adding a new column to each table:
Sub ModifyModel(m)
dim pTable, pCol
For each pTable in m.Tables
Set pCol = pTable.Columns.CreateNew()
pCol.SetNameAndCode "az" & pTable.Name, "AZ" & pTable.Code
pCol.Mandatory = False
Next
End Sub
327
To use a data source file, define a constant with the full path to the DSN file. For example:
Const cnxDSN = "\\romeo\public\DATABASES\_filedsn
\sybase_asa9_sample.dsn"
This script creates a new PDM, connects to a database via a system data source, sets reverse
options and reverses all objects to the PDM:
' Define ODBC data source and PDM file
Const cnxDSN = "ODBC:MyDatabase"
Const cnxUSR = "MyUser"
Const cnxPWD = "MyPassword"
Const filename = "C:\temp\MyReversedDB.pdm"
Dim pModel, pOpt
' Create model with appropriate DBMS
Set pModel=CreateModel(PdPDM.cls_Model, "|DBMS=Sybase SQL Anywhere
12")
' Hide dialogs
InteractiveMode = im_Batch
' Connect to the database
pModel.ConnectToDatabase cnxDSN, cnxUSR, cnxPWD
' Set reverse options to reverse all listed objects via ODBC
Set pOpt = pModel.GetPackageOptions()
pOpt.ReversedScript = False
pOpt.ReverseAllTables = true
pOpt.ReverseAllViews = true
pOpt.ReverseAllStorage = true
pOpt.ReverseAllTablespace = true
pOpt.ReverseAllDomain = true
pOpt.ReverseAllUser = true
pOpt.ReverseAllProcedures = true
pOpt.ReverseAllTriggers = true
pOpt.ReverseAllSystemTables = true
pOpt.ReverseAllSynonyms = true
' Reverse database to model and then save model
328
You can get and set extended attribute values using the following methods:
GetExtendedAttribute("resource.attribute")
329
GetExtendedAttributeText("resource.attribute")
SetExtendedAttribute "resource.attribute" "value"
SetExtendedAttributeText "resource.attribute" "value"
You can access collections defined in an extension using the following methods:
330
The following script traverses the metamodel by library and lists each concrete class:
for each l in MetaModel.Libraries
for each c in l.Classes
if c.Abstract = false then
Output l.PublicName + "." + c.PublicName
end if
next
next
The following script locates the BaseClass root and shows the first two levels of inheritance
under it:
set root = MetaModel.GetMetaClassByPublicName("PdCommon.BaseObject")
for each c in root.Children
output c.PublicName
for each cc in c.Children
output "
" + cc.PublicName
next
next
The following script obtains a table in a PDM, and then shows the metaclass of which the
object is an instance, the parent metaclass and metalibrary to the metaclass, and all the
attributes and collections that are available on that metaclass:
Dim object
Set object = ActiveModel.FindChildByName("myTable",cls_Table)
Output "Object: " + object.Name
Dim metaclass
Set metaclass = object.MetaClass
Output "Metaclass: " + metaclass.PublicName
Output "Parent: " + metaclass.Parent.PublicName
Output "Metalibrary: " + metaclass.Library.PublicName
Output "Attributes:"
For each attr in metaclass.attributes
Output " - " + attr.PublicName
Next
Output "Collections:"
For each coll in metaclass.collections
Output " - " + coll.PublicName
Next
331
Create an instance of the PowerDesigner Application object and release it when your script
terminates:
Dim PD As PdCommon.Application
Set PD = CreateObject("PowerDesigner.Application")
'Enter script here
'Once script is finished, release PD object
Set PD = Nothing
If PowerDesigner is currently running, this instance will be used; otherwise a new instance
will be launched. If you do not specify a version number, the most recent version is used.
To specify a specific version, use the syntax:
Set PD = CreateObject("PowerDesigner.Application.version")
Prefix all global properties and functions (see Manipulating Models, Collections, and
Objects (Scripting) on page 312) with the PowerDesigner Application object. For
example, to access the model with focus using a PowerDesigner application object called
PD, use the following syntax:
PD.ActiveModel
Specify object types whenever possible. For example, instead of simply using Dim cls,
you should use:
Dim cls as PdOOM.Class
If your model contains shortcuts, we recommend that you use the following syntax to
avoid runtime errors when the target model is closed:
Dim obj as PdCommon.IdentifiedObject
Adapt the object class ID syntax to the language when you create object. For VBScript,
VBA and VB and other languages that support enumeration defined outside a class, you
can use the syntax:
Dim cls as PdOOM.Class
Set cls = model.CreateObject(PdOOM.cls_Class)
For C# and VB.NET, you can use the following syntax (where PdOOM_Classes is the
name of the enumeration):
Dim cls As PdOOM.Class
Set cls = model.CreateObject(PdOOM.PdOOM_Classes.cls_Class)
332
For other languages such as JavaScript or PowerBuilder, you have to define constants that
represent the objects you want to create. For a complete list of class ID constants, see file
VBScriptConstants.vbs in the PowerDesigner OLE Automation directory.
Add references to the object type libraries you need to use. For example, in a VBA editor,
select Tools > References:
This script is launched from outside PowerDesigner, creates an instance of the PowerDesigner
Application object, and then uses it to create two OOMs through OLE Automation:
'* Purpose: This script displays the number of classes defined in an
OOM in the output window.
Option Explicit
' Main function
Sub VBTest()
' Defined the PowerDesigner Application object
Dim PD As PdCommon.Application
' Get the PowerDesigner Application object
Set PD = CreateObject("PowerDesigner.Application")
' Get the current active model
Dim model As PdCommon.BaseModel
Set model = PD.ActiveModel
If model Is Nothing Then
MsgBox "There is no current model."
ElsIf Not model.IsKindOf(PdOOM.cls_Model) Then
MsgBox "The current model is not an OOM model."
Else
' Display the number of classes
Dim nbClass
nbClass = Model.Classes.Count
PD.Output "The model '" + model.Name + "' contains " +
CStr(nbClass) + " classes."
' Create a new OOM
Dim model2 As PdOOM.Class
333
OLE Automation samples for different languages are provided in the OLE Automation
directory within your PowerDesigner installation directory.
334
Note: To use your add-in, save it to the Add-ins directory beneath your PowerDesigner
installation directory and enable it through the PowerDesigner General Options window (see
Core Features Guide > Modeling with PowerDesigner > Customizing Your Modeling
Environment > General Options > Add-Ins).
335
A Shared element - which defines the menus that are always available and their
associated methods, along with a GlobalScript attribute, which can contain a global
script for shared functions.
One or more Metaclass elements - which define commands and menus for a specific
metaclass, identified by its public name prefixed by its Type Library public name.
336
Menus contains Menu elements that specify a location, which can be one of:
FileImport - shared only
FileExport - metaclass only
FileReverse - shared only
Tools
Help
Object - metaclasses only (default)
Each Menu element can contain:
A Command element - whose Name must be equal to the name of a Method, and whose
Caption defines the name of the command that appears in the menu.
The following example defines two menu items for the Perforce repository and the methods
that are called by them:
<?xml version="1.0" encoding="UTF-8"?>
<Profile>
<Metaclass Name="PdOOM.Model">
<Menus>
<Menu Location="Tools">
<Popup Caption="Perforce">
<Command Name="CheckIn" Caption="Check In"/>
<Separator/>
<Command Name="CheckOut" Caption="Check Out"/>
</Popup>
</Menu>
</Menus>
<Methods>
<Method Name="CheckIn">
Sub %Method%(obj)
execute_command( p4, submit %Filename%, cmd_PipeOutput)
End Sub
</Method>
<Method Name="CheckOut">
Sub %Method%(obj)
execute_command( p4, edit %Filename%, cmd_PipeOutput)
End Sub
</Method>
</Methods>
</Metaclass>
</Profile>
The following example defines a global script which is referenced by a method defined under a
metaclass:
<?xml version="1.0" encoding="UTF-8"?>
<Profile>
<Shared>
<GlobalScript>
Option Explicit
Function Print (obj)
Output obj.classname & " " & obj.name
End Function
</GlobalScript>
</Shared>
<Metaclass Name="PdOOM.Class">
<Menus>
<Menu>
<Popup Caption="Transformation">
337
Note: To use your add-in, save it to the Add-ins directory beneath your PowerDesigner
installation directory and enable it through the PowerDesigner General Options window (see
Core Features Guide > Modeling with PowerDesigner > Customizing Your Modeling
Environment > General Options > Add-Ins).
Custom commands - are defined directly in PowerDesigner and can call executable
programs or VB scripts (see Adding Commands to the Tools Menu on page 339).
Menu and method extensions are specified in a DBMS or language definition or
extension file and define commands for a specific target or model type (see Menus
(Profile) on page 82).
ActiveX Add-Ins are written in languages such as VB, C#, C++ or any language
supporting COM, and permit more complex interactions with PowerDesigner, such as
enabling and disabling menu items based on object selection, and interaction with the
windows display environment (see Creating an ActiveX Add-in on page 334).
Note: The XML syntax used to define menus in an ActiveX or XML add-in is the same as
that used in the creation of a menu extension, and you can use the resource editor menu
XML page (seeMenus (Profile) on page 82) to help you construct the syntax for your addins.
338
Description
Name
Specifies the name of the command that will appear in the menu. Names
must be unique and can contain a pick letter (&Generate Java will appear as
Generate Java)
Submenu
Specifies a submenu in which to place the command. You can enter your
own or select one of:
<None> - directly under Tools > Execute Commands
Check Model
Export
Generation
Import - also appears under File > Import
Reverse - also appears under File > Reverse-Engineer
339
Description
Context
340
Model, Diagram, and Target type - for example OOM/Class diagram/Java. By default, the list contains extensions available for
the chosen model type. Click the Path tool to navigate to another folder
containing extensions or DBMS or language definition files.
Type
Command Line
Specifies the path to the executable or script file to run. Click the ellipsis
button to navigate to a file. If your file is a VBScript, you can review or edit
the script by clicking the Edit With tool in the toolbar.
Comment
Specifies text that is displayed in the status bar when you select the command.
[S]how in Menu
Specifies that the command should be displayed. Deselect this field to hide
the command while retaining its definition.
Accelerator Key
Associates one of ten reserved keyboard shortcuts Ctrl-Shift-0 to CtrlShift-9 with the command.
If you want to insert a pipe within a command, you must escape it with a second pipe.
341
342
CHAPTER 8
The PowerDesigner public metamodel is an abstraction of the metadata for all the
PowerDesigner models, describing the elements of a model, and the syntax and semantics of
their manipulation.
You can review the public metamodel in PowerDesigner by opening install dir
\Examples\MetaModel.oom, and find exhaustive documentation of all the metamodel
objects, collections, and methods available via scripting, by selecting Help > Metamodel
Objects Help (see Using the Metamodel Objects Help File on page 346).
This OOM and help file help you understand the structure of your models, especially when
working with:
343
Each of these top-level packages contains the follow kinds of sub-objects, organized by
diagram or, in the case of PdCommon, by sub-packages:
Features - All the features implemented by classes in the model. For example, Report
(available in all models) belongs to PdCommon, and AbstractDataType belongs to
PdPDM.
Objects - Design objects in the model
Symbols - Graphical representation of design objects
344
Public Names - Each object in the metamodel has a name and a code corresponding to the
public name of the object, which is the unique identifier of the object in a model library or
package. Public names are referenced in PowerDesigner XML model files and when using
SAP Sybase PowerDesigner
GTL and scripting. The public name often matches the object's name in the
PowerDesigner interface, but where the two diverge, the public name must be used in
scripts and GTL templates.
Classes - are used to represent metadata in the following ways:
Abstract classes - are used only to share attributes and behaviors, and are not visible in
the PowerDesigner interface.
Instantiable/Concrete classes - correspond to objects displayed in the interface. They
have their own attributes and behaviors in addition to those they inherit from abstract
classes through generalization links. For example, NamedObject is an abstract
class, which contains standard attributes like Name, Code, Comment,
Annotation, and Description, which are inherited by most PowerDesigner
design objects.
Class attributes - are object properties. Classes linked to other classes with generalization
links usually contain derived attributes that are calculated from the attributes or collections
of the parent class. Neither derived attributes, nor attributes migrated from navigable
associations, are stored in the model file. Non-derived attributes are proper to the class, and
are stored in the model and saved in the model file.
Associations - express the semantic connections between classes. In the association
property sheet, the roles carry information about the end object of the association.
PowerDesigner objects are linked to other objects using collections, and the role at the
other end of the association gives the name of the collection for an object. For example,
NamedOject has a collection of business rules called AttachedRules, and
BusinessRule has a collection of objects called Objects:
When associations have two roles, only the collection with the navigable role will be saved
in the XML file. In the case, only the AttachedRules collection is saved.
Compositions express an association where the children live and die with the parent and,
when the parent is copied, the child is also copied. For example, Table has a composition
association with the Column class:
Generalizations - show the inheritance links existing between a more general, usually
abstract, class and a more specific, usually instantiable, class. The more specific class
inherits from the attributes of the more generic class, these attributes are called derived
attributes. For example, Class inherits from Classifier
Each diagram shows classes the connections between metaclasses via associations and
generalizations. Classes in green are defined in the current diagram, while classes in purple are
345
Double-click any class to show its property sheet and review the following tabs:
General - provides the public name in the Name and Code fields, a Comment providing a
brief description of the class, and shows whether it is Abstract.
Note: Objects, such as RepositoryGroup that do not support scripting bear the
<<notScriptable>> stereotype.
Attributes - lists the properties defined directly on the class, but not those that it inherits
via any parent classes.
Associations - lists the migrated associations for the class, which represent collections.
The Role B column lists the collections for the class, while the Role A column lists the
collections in which the class figures.
Operations - lists the methods available for scripting.
Dependencies - contains the following sub-tabs (among others):
Associations
Generalizations - lists the generalization links where the current class is the child and
inherits attributes from a parent class.
Specializations - lists the generalization links where the current class is the parent and
its children inherit attributes from it.
Shortcuts - lists the shortcuts created for the current object.
Notes - may include further information on the Description or Annotation sub-tabs.
346
Basic Elements
Libraries
Appendix
Includes an expandable hierarchy showing all the metaclasses in the PowerDesigner metamodel, a VBScript code sample, and a list of the class ID
constants used to identify objects in certain contexts (see Accessing and
Modifying Objects and Properties (Scripting) on page 316).
347
Specific Members - a table which lists the properties, collections, and methods defined
directly on this metaclass
Full definition - which lists, in separate tables, the properties, collections, and methods
inherited from each of its ancestors. For example, the Table metaclass (located at
Libraries\PdPDM\Table) inherits members from:
PdCommon.BaseObject
PdCommon.IdentifiedObject
PdCommon.ExtensibleObject
PdCommon.NamedObject
PdCommon.NamedClassifier
PdPDM.BaseTable
PdPDM.View
348
<o:object> - A PowerDesigner model object. The first time the object is mentioned in
a collection, PowerDesigner assigns it an id using the <o:object Id="XYZ"> syntax
(where XYZ is a unique identifier automatically assigned to an object when it is found for
the first time) or references it with the <o:object Ref="XYZ"/> syntax. Object
definition is only used in composition collections, where the parent object owns the
children in the association.
<c:collection> - A collection of objects linked to another object. You can use the
PowerDesigner metamodel to visualize the collections of an object. For example
<c:Children>.
PowerDesigner XML model files have an <o:model> element at their root, which contains
collections defined in the PowerDesigner metamodel. The model object and all the other
object elements that it contains define their attributes and collections in sub-elements. The
definition of an object implies the definition of its attributes and its collections.
PowerDesigner checks each object and drills down the collections of this object to define each
new object and collection in these collections, and so on, until the process finds terminal
objects that do not need further analysis.
You can search for an object in the metamodel using its object name in the XML file in order to
better understand its definition. Once you have found an object in the metamodel you can read
the following information:
Each PowerDesigner object can have several collections corresponding to other objects to
interact with, these collections are represented by the associations existing between
objects. The roles of the associations (aggregations and compositions included)
correspond to the collections of an object. For example, each PowerDesigner model
contains a collection of domains called Domains.
Usually associations have only one role, the role is displayed at the opposite of the class for
which it represents a collection. However, the metamodel also contains associations with
two roles, in such case, both collections cannot be saved in the XML file. You can identify
the collection that will be saved from the association property sheet: the role where the
Navigable check box is selected is saved in the file.
In the following example, association has two roles which means Classifier has a
collection Actors, and Actor2 has a collection ImplementationClasses:
If you display the association property sheet, you can see that the Navigable check box is
selected for role ImplementationClass, which means that only collection
ImplementationClass will be saved in file.
349
Attributes with the IOBJECT data type are attributes in the metamodel while they appear
as collections containing a single object in the XML file. This is not true for Parent and
Folder that do not contain any collection.
The file starts with several lines stating XML and model related details.
350
Below the definition of the model object, you can see the series of ModelOptions attributes.
Note that ModelOptions is not restricted to the options defined in the Model Options dialog
box of a model, it gathers all properties saved in a model such as intermodel generation
options.
After ModelOptions, you can identify collection <c:ObjectLanguage>. This is the object
language linked to the model. The second collection of the model is <c:ClassDiagrams>. This
is the collection of diagrams linked to the model, in our example, there is only one diagram
defined in the following paragraph:
<o:ClassDiagram Id="o4">
<a:ObjectID>3CEC45F6-A77D-11D5-BB88-0008C7EA916D</a:ObjectID>
<a:Name>ClassDiagram_1</a:Name>
<a:Code>CLASSDIAGRAM_1</a:Code>
<a:CreationDate>1000309357</a:CreationDate>
<a:Creator>arthur</a:Creator>
<a:ModificationDate>1000312265</a:ModificationDate>
<a:Modifier>arthur</a:Modifier>
<a:DisplayPreferences>
...
Like for model options, ClassDiagram definition is followed by a series of display preference
attributes.
Within the ClassDiagram collection, a new collection called <c:Symbols> is found. This
collection gathers all the symbols in the model diagram. The first object to be defined in
collection Symbols is AssociationSymbol:
<o:AssociationSymbol Id="o5">
<a:CenterTextOffset>(1, 1)</a:CenterTextOffset>
<a:SourceTextOffset>(-1615, 244)</a:SourceTextOffset>
<a:DestinationTextOffset>(974, -2)</a:DestinationTextOffset>
<a:Rect>((-6637,-4350), (7988,1950))</a:Rect>
<a:ListOfPoints>((-6637,1950),(7988,-4350))</a:ListOfPoints>
<a:ArrowStyle>8</a:ArrowStyle>
351
Collection <c:Classes> follows collection <c:Symbols>. In this collection, both classes are
defined with their collections of attributes.
<o:Class Id="o10">
<a:ObjectID>10929C96-8204-4CEE-911#-E6F7190D823C</a:ObjectID>
<a:Name>Order</a:Name>
<a:Code>Order</a:Code>
<a:CreationDate>1012204026</a:CreationDate>
<a:Creator>arthur</a:Creator>
<a:ModificationDate>1012204064</a:ModificationDate>
<a:Modifier>arthur</a:Modifier>
<c:Attributes>
<o:Attribute Id="o14">
Attribute is a terminal object: there is not further ramification required to define this object.
Each collection belonging to an analyzed object is expanded, and analyzed and the same
occurs for collections within collections.
Once all objects and collections are browsed, the following markups appear:
</o:RootObject>
</Model>
352
Index
Index
%-(x,y)% subtraction operator 252
! power evaluation operator 252
!= not equal to operator 252
? existence operator 252
.foreach_item
example 27
.xems
See extension files
[ ] operators 212
[] conditional block 250
* dereferencing operator 252
%*(x,y)% multiplication operator 252
%/(x,y)% division operator 252
.// macro 267
\\ escape sequence 256
\n escape sequence 256
\t escape sequence 256
%&(x,y)% logical bitfield and operator 252
&& logical AND operator 252
%% escape sequence 256
+ visibility operator 252
%+(x,y)% addition operator 252
< less than operator 252
<= less than or equal to operator 252
= assignment operator 252
== equal to operator 252
> greater than operator 252
>= greater than or equal to operator 252
|| logical OR operator 252
A
A formatting option (align left) 248
.abort_command macro 265
abstract classes 344
abstract data type attributes
AllowedADT 175
DBMS definition file 175
abstract data types
ADTComment 173
AllowedADT 173
DBMS definition file 173
EnableAdtOnColn 173
EnableAdtOnDomn 173
Install 173
353
Index
AllowedADT 147, 173, 175
AllowNullableColn 163
AltEnableAddColnChk 151
Alter 143
AlterDBIgnored 143
AlterFooter 137
AlterHeader 137
AlterStatementList 143
AlterTableFooter 147
AlterTableHeader 147
ASE
PDM variables 226
associations 344
AttachLinkObject() method 320
AttachObject() method 320
attribute icon sets 47
attribute value icons 47
attributes 344
creating from a property sheet 15
Attributes collection 330
auto-attach 14
autofixes 74
B
BasicDataTypes 110
BeforeCreate 143
BeforeCreateDatabase 171
BeforeDatabaseGenerate event handler 76, 133
BeforeDatabaseReverseEngineer event handler 76,
133
BeforeDrop 143
BeforeModify 143
BeginTransaction() global function 312
Bind 151, 172, 186, 187
BinDefault 172
.block macro 265
BlockComment 135
BlockTerminator 135
.bool macro 266
booleans
.bool macro 266
testing in GTL 266
.break macro 266
C
calculated collections 51
CancelTransaction() global function 312
354
Index
Outer scope 255
Parent scope 255
Remove() method 314
returning by GTL 278
scope 255
Source property 314
testing for members 247
ColnDefaultName 176
ColnRuleName 176
ColumnComment 151
columns
AddColnChck 151
AddColnCheck 151
AltEnableAddColnChk 151
Bind 151
CheckNull 151
ColumnComment 151
ConstName 151
DBMS definition file 151
DefineColnCheck 151
DropColnChck 151
DropColnComp 151
EnableBindRule 151
EnableComputedColn 151
EnableDefault 151
EnableIdentity 151
EnableNotNullWithDflt 151
MaxConstLen 151
ModifyColnComp 151
ModifyColnDflt 151
ModifyColnNull 151
ModifyColumn 151
null values 158
NullRequired 151, 158
PDM variables 216
Permission 151
Rename 151
SqlChckQuery 151
SqlPermQuery 151
SqlStatistics 151
Unbind 151
variables 234
commands
creating custom commands 338, 339
.comment macro 267
comments
. // 267
.comment 267
in GTL 267
Commit 139
comparing resource file 7
Complement language generation 14, 90
composite physical options 208
ConceptualDataTypes 110
concrete classes 344
conditional blocks 250
.block macro 265
in GTL 265
conditional processing
GTL 275
.if macro 275
connecting to databases by script 326, 328
ConnectToDatabase() method 328
Consolidate() method 325
ConsolidateNew() method 325
Constants category
object language 110
ConstName 147, 151, 162, 163, 165
constraints
PDM variables 216
conversion tables 1
.convert_code macro 267
.convert_name macro 267
ConvertFunc 139
copying resource files 7
Count keyword 247
Count property 314
Create 143
.create_path macro 266
CreateBeforeKey 159
CreateBody 188
CreateDefault 172
CreateFunc 179
CreateModel() global function 312
CreateModel() method 313
CreateNew() method 314, 318
CreateNewAt() method 314
CreateObject() method 318
CreateReport() method 325
CreateSelection() method 321
CreateShortcut() method 323
creating data sources by script 324
creating mappings by script 324
creating metaclasses from stereotypes 39
creating resource files 7
criteria 40
csv (conversion tables) 1
%CurrentDate% global variable 251
355
Index
%CurrentUser% global variable 251
custom checks 72
autofixes 74
example 21, 73, 74
script 73
custom commands
adding to menus 338, 339
custom properties
See extended attributes
custom symbols 71
example 19
CustomFunc 179
CustomProc 179
D
D formatting option (interface values) 248
DashStyle property 320
data sources
AddSource() method 324
creating by script 324
Data Type category (DBMS) 196
data types 46, 112, 196
database package templates 120
database security
PDM variables 229
database synchronization
PDM variables 226
databases
AfterCreate 122
BeforeCreate 122
BeforeCreateDatabase 171
CloseDatabase 171
connecting by script 326, 328
ConnectToDatabase() method 328
database package templates 120
DBMS definition file 171
EnableManyDatabases 171
estimating size 201, 204
EX keyword 128
GenerateDatabase() method 326
GenerateTestData() method 326
generating by script 326
generating test data by script 326
generation 120122, 125, 133, 199
GetPackageOptions() method 326, 328
live connection 125
ModifyDatabase() method 326
object generation order 141
OpenDatabase 171
356
Index
database synchronization 226
databases 171, 233
date formats 136
DB package cursors 189
DB package exceptions 189
DB package pragmas 189
DB package types 189
DB package variables 189
DB packages 188, 227
DBMS triggers 183
defaults 192, 230
dimensions 195, 231
domains 172, 216
EnableOption 141
estimating database size 201, 204
EX keyword 128
extended attributes 199, 206
extended objects 196, 232
extensions 206, 209
File category 137
Format category 136
forms 209
General category 134
generation 120122, 125, 133, 199
GenerationOrder 141
GetEstimatedSize 201, 204
groups 186
index columns 219
indexes 159, 219
introduction 119
join indexes 184, 226
keys 162, 163, 218
Keywords category 139
live database connection 125
live database generation 205
MaxConstLen 141
Objects category 141, 143, 147, 151, 158, 159,
162, 163, 165, 168, 170173, 175,
176, 179, 180, 183196
ODBC category 205
parameters 190
PDM macros 211, 234242
PDM variables 211, 212, 214216, 218, 219,
221223, 226, 227, 229233
permissions 191
physical options 129, 206, 208, 209
Physical Options (Common) tab 206
Physical Options tab 206
primary keys 162
privileges 190
procedure templates 120
procedures 179, 221, 233
Profile category 199
properties 119
qualifiers 184
reference columns 219
references 165, 219
result columns 194
reverse engineering 120, 124, 125, 128, 129,
131133, 233
ReversedQueries 128
ReversedStatements 124
roles 187
rules 176, 222
scripts 121, 124
sequences 185, 223
SQL category 135
SQL Server 226
storages 170, 223
synonyms 186, 223
Syntax category 135
tables 143, 147, 215
tablespaces 170, 223
testing values 212
time formats 136
trigger template items 120
trigger templates 120
triggers 180, 221, 233
users 176
views 168, 215
Web operations 193
Web parameters 194
Web services 193, 230
DBMS triggers
DBMS definition file 183
DclDelIntegrity 165
DclUpdIntegrity 165
Default association container 117
default variable 143
DefaultDataType 110
defaults
DBMS definition file 192
PDM variables 230
DefaultTriggerName 180
DefIndexColumn 159
DefIndexType 159
.DEFINE PDM macro 235
DefineColnCheck 151
357
Index
.DEFINEIF PDM macro 236
DefineJoin 165
DefineTableCheck 147
DefOptions 143
.delete macro 268
Delete() method 321
deleting items in resource files 6
Delimiter 135
dependencies 344
dependency matrices 53
dependency paths 55
dependency paths 55
diagrams
ActiveDiagram global property 312, 320
AttachLinkObject() method 320
AttachObject() method 320
displaying symbols by script 320
dialog boxes
creating from forms 56
example 68
dimensions
DBMS definition file 195
PDM variables 231
directories
.change_dir 266
changing in GTL 266
domains
Bind 172
BinDefault 172
CreateDefault 172
DBMS definition file 172
EnableBindRule 172
EnableCheck 172
EnableDefault 172
EnableOwner 172
PDM variables 216
SqlListDefaultQuery 172
UddtComment 172
Unbind 172
UserTypeName 172
Drop 143
DropColnChck 151
DropColnComp 151
DropFunc 179
DropTableCheck 147
E
Edit/Run Script editor 307
editing resource files 6
358
Index
GetEstimatedSize 76, 201, 204
Initialize 76
OnLanguageChanged 76
OnLanguageChangeRequest 76
OnLanguageChanging 76
OnModelClose 76
OnModelOpen 76
OnModelSave 76
OnNewFromTemplate 76
Validate 76
EventDelimiter 180
Events category
object language 110
EX keyword 128
examples
.foreach_item 27
creating a property sheet tab 62
creating custom check autofix 74
creating custom check script 73
creating custom checks 21
creating custom symbols 19
creating generated files 29
creating stereotypes 18
creating templates 27
extended attribute 15
extension files 15
extensions 15, 16, 18, 19, 21, 27, 29, 30
generated files 88
generation commands 114
generation options 113
generation tasks 114
including a form in a form 65
opening a dialog box from a form 68
opening a dialog from a menu 83
templates 88
XML model file format 350
excluding metaclasses from models 33
executables
.execute_command macro 269
launching with GTL 269
.execute_command macro 269
.execute_vbscript macro 270
ExecuteCommand() global function 312
exporting
extension files 14
extensions 14
extended attribute types
type 46
359
Index
calculated collections 51
collections 329
criteria 40
custom checks 21, 72
custom symbols 19, 71
dependency matrices 53, 55
event handlers 76, 133, 201, 204
example 15, 16, 18, 19, 21, 27, 29, 30, 83
exporting from a model 14
extended attribute types 46
extended attributes 15, 41, 47, 49, 58, 199
extended collections 49, 58
extended compositions 49
extended links 36
extended objects 36
extended sub-objects 36
ExtendedModelDefinitions collection 329
forms 56, 58, 62, 65, 68
generated files 29, 86, 88, 90, 245
Generation category 11
GetCalculatedCollection() method 329
GetCollectionByStereotype() method 329
GetExtendedAttribute() method 329
GetExtendedAttributeText() method 329
GetExtendedCollection() method 329
global script 106
in DBMS definition files 199
menus 82, 338
metaclasses 33
methods 58, 80, 82, 338
object generations 101, 103, 104
object language definition files 117
process language definition files 117
Profile category 11
SetExtendedAttribute() method 329
SetExtendedAttributeText() method 329
stereotypes 18, 37, 39, 329
templates 27, 85, 88, 245
transformation profiles 95
transformations 93, 96
UseAsMetaclass property 329
XML imports 97, 98, 101
XML language definition files 117
external applications
ExecuteCommand() global function 312
F
File category (DBMS)
AlterFooter 137
360
AlterHeader 137
EnableMultiFile 137
Footer 137
Header 137
ScriptExt 137
StartCommand 137
TableExt 137
TrgFooter 137
TrgHeader 137
TrgUsage1 137
TrgUsage2 137
TriggerExt 137
Usage1 137
Usage2 137
FindChildByCode() method 316
FindChildByName() method 316
FindChildByPath() method 316
First keyword 247
FKAutoIndex 165
.FKCOLN PDM macro 234
FKeyComment 165
folders
creating by script 322
Footer 137, 159
.FOREACH_CHILD PDM macro 237
.FOREACH_COLUMN PDM macro 238
.foreach_item macro 271
.foreach_line macro 273
.FOREACH_PARENT PDM macro 239
.foreach_part macro 274
foreign key
variable 240
Format category (DBMS)
AddQuote 136
CaseSensitivityUsingQuote 136
DateFormat 136
DateTimeFormat 136
EnableDtbsPrefix 136
EnableOwnerPrefix 136
IllegalChar 136
LowerCaseOnly 136
MaxScriptLen 136
TimeFormat 136
UpperCaseOnly 136
formatting options
A (align left) 248
D (interface values) 248
H (hexadecimal) 214, 248
L (lowercase) 214, 248
Index
LF (first character lowercase) 214, 248
M (delete substring) 214, 248
Q (double quotes) 214, 248
q (single quotes) 214, 248
T (trim whitespace) 214, 248
U (uppercase) 214, 248
UF (first character uppercase) 214, 248
X (escape XML characters) 248
forms 209
adding buttons 58
adding controls 58
creating dialog boxes 56
creating property tabs 56
dialog box example 68
displaying extended attributes 58
displaying extended collections 58
form-in-form example 65
property sheet example 62
replacing property tabs 56
function based indexes 131
FunctionComment 179
G
General category (DBMS)
EnableCheck 134
EnableConstName 134
EnableIntegrity 134
EnableMultiCheck 134
SqlSupport 134
UniqConstName 134
generalizations 344
generated files 86, 88, 90, 245
example 29
GenerateDatabase() method 326
GenerateHTML() method 325
GenerateRTF() method 325
GenerateTestData() method 326
generating database objects 141
generating databases by script 326
generating models 103
generating test data by script 326
generation 120
extended generation 90
%GenOptions% global variable 251
live connection 125
PDM extended objects 133
script after 133
script before 133
scripts 121, 122
361
Index
changing text case 277
collections 247
comments 267
conditional blocks 250, 265
conditional generation 275
controlling user interaction 278
converting names and codes 267
creating generated files 245
creating paths 266
creating templates 245
defining local variable and value types 279
deleting substrings 268
embedding VBScript 281
errors 283
escape sequences 256
executing VBScript 270
extended attributes 246
formatting text 248
generated files 245
global variables 251
GTL operators 252
head string 250
inheritance 257
introduction 245
%IsShortcut% 256
iterating over a collection 271
iterating over lines in a text block 273
iterating over parts of a string 274
launching executables 269
line breaks 250
macros 264
metamodel extensions 262
new line 250
object properties 246
Outer scope 255
outputting unique lines 281
overloading templates 257
overriding templates 257
parameters 260
Parent scope 255
polymorphism 257
printing error messages 269
printing warning messages 269
properties 246
recursive templates 262
replacing substrings 268
returning collections by OID 278
returning objects by OID 278
scope 255
362
%Shortcut% 256
shortcuts 256
syntax errors 283
tail string 250
templates 245
testing boolean conditions 266
text blocks 250
translation errors 283
writing log messages 277
GTL macros
. // 267
.abort_command 265
.block 265
.bool 266
.break 266
.change_dir 266
.collection 278
.comment 267
.convert_code 267
.convert_name 267
.create_path 266
.delete 268
.error 269
.execute_command 269
.execute_vbscript 270
.foreach_item 247, 271
.foreach_line 273
.foreach_part 274
.if 275
.log 277
.lowercase 277
.object 278
.replace 268
.set_interactive_mode 278
.set_object 279
.set_value 279
.unique 281
.unset 279
.uppercase 277
.vbscript 281
.warning 269
GTL operators
! power evaluation 252
!= not equal to 252
? existence 252
%-(x,y)% subtraction 252
* dereferencing 252
%*(x,y)% multiplication 252
%/(x,y)% division 252
Index
%&(x,y)% logical bitfield and 252
&& logical AND 252
+ visibility 252
%+(x,y)% addition 252
< less than 252
<= less than or equal to 252
= assignment 252
== equal to 252
> greater than 252
>= greater than or equal to 252
|| logical OR 252
H
H formatting option (hexadecimal) 214, 248
head string 250
Header 137, 159
HomeDirectory global constant 312
I
IdentifierDelimiter 135
.if macro 275
IllegalChar 136
impact and analysis rule sets 1
Implementation category
process language 109
.INCOLN PDM macro 239
index columns
PDM variables 219
IndexComment 159
indexes
AddColIndex 159
Cluster 159
CreateBeforeKey 159
DBMS definition file 159
DefIndexColumn 159
DefIndexType 159
EnableAscDesc 159
EnableCluster 159
EnableFunction 159
EnableOwner 159
Footer 159
Header 159
IndexComment 159
IndexType 159
MandIndexType 159
MaxColIndex 159
PDM variables 219
SqlSysIndexQuery 159
UniqName 159
IndexType 159
inheritance 257
Insert() method 314
Install 173
instantiable classes 344
InteractiveMode global property 312
inverse collections 49
IsEmpty keyword 247
IsKindOf() global function 312
%IsShortcut% 256
Item property 314
J
.JOIN PDM macro 240
join indexes
AddJoin 184
DBMS definition file 184
EnableJidxColn 184
JoinIndexComment 184
PDM variables 226
JoinIndexComment 184
K
keys
AKeyComment 163
AllowNullableColn 163
ConstName 163
DBMS definition file 163
EnableCluster 163
MaxConstLen 163
PDM variables 218
primary keys 162
SqlAkeyIndex 163
UniqConstAutoIndex 163
UniqInTable 163
Keywords category (DBMS)
CharFunc 139
Commit 139
ConvertFunc 139
DateFunc 139
GroupFunc 139
ListOperators 139
NumberFunc 139
OtherFunc 139
ReservedDefault 139
363
Index
ReservedWord 139
Kind property 314
L
L formatting option (lowercase) 214, 248
LF formatting option (first character lowercase)
214, 248
Libraries collection 330
Library property 330
line breaks
controlling in GTL 250
LineComment 135
LineWidth property 320
Linguistic Variables category 300
link objects
creating by script 318
link symbols
setting extremities by script 320
ListOperators 139
live database generation 205
local variables
defining in GTL 279
.set_object 279
.set_value 279
.unset 279
Locked global property 312
.log macro 277
logs
.log macro 277
writing to in GTL 277
loops
.break macro 266
breaking in GTL 266
.lowercase macro 277
lowercase 277
LowerCaseOnly 136
M
M formatting option (delete substring) 214, 248
MandIndexType 159
Mapping Editor 101, 104
XML imports 98
mappings
creating by script 324
GetMapping() method 324
metamodel 98, 104
metamodel objects 102
364
properties 101
retrieving by script 324
SourceClassifiers collection 324
MapToNamedPath() global function 312
MaxColIndex 159
MaxConstLen 141, 147, 151, 163, 165
MaxDefaultLen 176
MaxFuncLen 179
Maxlen 143
MaxScriptLen 136
mcc (model category sets) 1
MDA 93
menus
creating custom commands in 338, 339
customizing via extensions 82, 338
customizing via XML add-ins 338
example 83
launching add-ins from 338
launching scripts from 338
merging resource files 8
metaclass 33
Metaclass property 330
metaclasses 33
adding to extension file 33
creating from stereotypes 39
creating new 36
excluding from model 33
ExtendedLink 36
ExtendedObject 36
ExtendedSubObject 36, 49
extending 33
subclassifying with criteria 40
subclassifying with stereotypes 37
MetaCollection property 314
metamodel
abstract classes 344
associations 344
attributes 344
Attributes collection 330
calculated attributes 262
calculated collections 262
class attributes 344
classes 344
concrete classes 344
dependencies 344
extending by script 329
generalizations 344
GetMetaClassByPublicName() method 330
Index
GetMetaMemberByPublicName() method
330
GTL-specific extensions 262
instantiable classes 344
Libraries collection 330
Library property 330
Metaclass property 330
MetaModel global property 330
Metamodel Objects Help 343, 346
metamodel.oom 343
navigating 344
notScriptable stereotype 344
operations 344
Parent property 330
PdBPM 343
PdCDM 343
PdCommon 343
PdEAM 343
PdFRM 343
PdGLM 343
PdILM 343
PdLDM 343
PdMTM 343
PdOOM 343
PdPDM 343
PdPRJ 343
PdRMG 343
PdRQM 343
PdWSP 343
PdXSM 343
PowerDesigner 343
public names 344
PublicName property 330
shortcuts 344
specializations 344
XML model file format 348, 350
MetaModel global property 330
metamodel objects
properties 102
Metamodel Objects Help 343, 346
metamodel.oom 343
methods 80
adding to menus 82, 338
attaching to form buttons 58
model category sets 1
model checks
creating custom checks 72
model file format
bin 348
DTD 348
XML 348, 350
model generation 103
models
%ActiveModel% global variable 251
ActiveModel global property 312
CreateModel() global function 312
CreateObject() method 318
creating by script 313
Models global collection 312
opening by script 313
OpenModel() global function 312
Models global collection 312, 313
ModifiableAttributes 143
ModifyColnComp 151
ModifyColnDflt 151
ModifyColnNull 151
ModifyColumn 151
ModifyDatabase() method 326
Move() method 314
MoveToPackage() method 321
N
name property
.convert_name macro 267
converting in GTL 267
named paths
EvaluateNamedPath() global function 312
MapToNamedPath() global function 312
Namings category
object language 110
navigating in resource files 5
new line 250
NewPoint() global function 320
%NewUUID% global variable 251
.NMFCOL PDM macro 241
not certified resource files 3
notScriptable stereotype 344
NullRequired 151, 158
NumberFunc 139
O
.object macro 278
Object Attributes category 298
Object container 117
object generations 103
initialization scripts 101
365
Index
mapping properties 101
mappings 104
post-processing scripts 101
object language definition files 1
AdditionalDataTypes 110
BasicDataTypes 110
ConceptualDataTypes 110
Constants category 110
data types 110
Default association container 117
DefaultDataType 110
Events category 110
extensions 117
generation category 112
generation commands 112, 114
generation options 112, 113
generation tasks 112, 114
Namings category 110
Object container 117
profile category 117
properties 107
Settings category 110
object permission profiles 1
object properties 246
accessing by script 316
modifying by script 316
object selections
ActiveSelection global collection 312
AddObjects() method 321
CreateSelection() method 321
creating by script 321
MoveToPackage() method 321
Remove() method 321
objects
accessing by script 316
creating by script 318
creating shortcuts by scripts 323
Delete() method 321
deleting by script 321
displaying in diagrams by script 320
FindChildByCode() method 316
FindChildByName() method 316
FindChildByPath() method 316
GetAttribute() method 316
GetAttributeText() method 316
IsKindOf() global function 312
.object macro 278
Outer scope 255
Parent scope 255
366
Index
privileges 190
procedures 179
qualifiers 184
references 165
result columns 194
ReversedStatements 143
roles 187
rules 176
sequences 185
SqlAttrQuery 143
SqlListQuery 143
SqlOptsQuery 143
storages 170
synonyms 186
tables 143, 147
tablespaces 170
triggers 180
users 176
views 168
Web operations 193
Web parameters 194
Web services 193
ODBC category 205
OLE
Locked global property 312
ShowMode global property 312
OLE Automation 305, 332
OnLanguageChanged event handler 76
OnLanguageChangeRequest event handler 76
OnLanguageChanging event handler 76
OnModelClose event handler 76
OnModelOpen event handler 76
OnModelSave event handler 76
OnNewFromTemplate event handler 76
OpenDatabase 171
opening resource files 3
OpenModel() global function 312
OpenModel() method 313
operations 344
Options 143
OtherFunc 139
Outer 255
Output window
Output() global function 312
Output() global function 312
overloading
templates 257
overriding
templates 257
P
parameters 260
DBMS definition file 190
Parent 255
Parent property 330
paths
.create_path 266
creating in GTL 266
specifying for resource files 1
PdBPM 343
PdCDM 343
PdCommon 343
PdEAM 343
PdFRM 343
PdGLM 343
PdILM 343
PdLDM 343
PDM macros 211
.AKCOLN 234
.ALLCOL 235
.CLIENTEXPRESSION 241
.DEFINE 235
.DEFINEIF 236
.ERROR 236
.FKCOLN 234
.FOREACH_CHILD 237
.FOREACH_COLUMN 238
.FOREACH_PARENT 239
.INCOLN 239
.JOIN 240
.NMFCOL 241
.PKCOLN 234
.SERVEREXPRESSION 241
.SQLXML 242
PDM variables 211
[ ] operators 212
abstract data types 223
ASE 226
columns 216
constraints 216
database security 229
database synchronization 226
databases 233
DB packages 227
defaults 230
dimensions 231
domains 216
extended objects 232
formatting 214
367
Index
index columns 219
indexes 219
join indexes 226
keys 218
procedures 221, 233
reference columns 219
references 219
reverse engineering 233
rules 222
sequences 223
SQL Server 226
storages 223
synonyms 223
tables 215
tablespaces 223
testing values 212
triggers 221, 233
views 215
Web services 230
PdMTM 343
PdOOM 343
PdPDM 343
PdPRJ 343
PdRMG 343
PdRQM 343
PdWSP 343
PdXSM 343
Permission 147, 151, 179
permissions
DBMS definition file 191
GrantOption 191
RevokeOption 191
physical options 209
composite options 208
default value 206
defining defaults in a DBMS file 143
defining in a DBMS file 143, 206
DefOptions DBMS item 143
extended attributes 206
list of values 206
Options DBMS item 143
Physical Options (Common) tab 206
Physical Options tab 206
reverse engineering 129
simple options 206
Physical Options (Common) tab 206
Physical Options tab 206
PkAutoIndex 162
.PKCOLN PDM macro 234
368
PKeyComment 162
platform-independent models 93
platform-specific models 93
polymorphism 257
Position property 320
PowerDesigner
metamodel 343
XML model file format 350
ppf (object permission profiles) 1
Preview tab
%PreviewMode% global variable 251
%PreviewMode% global variable 251
primary key
variable 240
primary keys
ConstName 162
DBMS definition file 162
EnableCluster 162
PkAutoIndex 162
PKeyComment 162
UseSpPrimKey 162
privileges
DBMS definition file 190
GrantOption 190
RevokeOption 190
System 190
procedure templates 120
ProcedureComment 179
procedures
CreateFunc 179
CustomFunc 179
CustomProc 179
DBMS definition file 179
DropFunc 179
EnableFunc 179
EnableOwner 179
FunctionComment 179
MaxFuncLen 179
PDM variables 221, 233
Permission 179
ProcedureComment 179
SqlPermQuery 179
process language definition files 1
Choreography category 109
DataHandling category 109
extensions 117
generation category 112
generation commands 112, 114
generation options 112, 113
Index
generation tasks 112, 114
Implementation category 109
profile category 117
properties 107
Settings category 109
profile
See extension files
profile category
object language definition files 117
process language definition files 117
XML language definition files 117
Profile category 11
DBMS definition files 199
promoting a stereotype to metaclass 37
promoting a sterotype to metaclass 39
properties 246
property sheets
example 62
form-in-form example 65
property tabs
creating from forms 56
replacing by forms 56
public names 344
PublicName property 330
Q
Q formatting option (double quotes) 214, 248
q formatting option (single quotes) 214, 248
qualifiers
DBMS definition file 184
Quote 135
R
recursive templates 262
reference columns
PDM variables 219
references
CheckOnCommit 165
ConstName 165
DBMS definition file 165
DclDelIntegrity 165
DclUpdIntegrity 165
DefineJoin 165
EnableChangeJoinOrder 165
EnableCluster 165
EnablefKeyName 165
FKAutoIndex 165
FKeyComment 165
MaxConstLen 165
PDM variables 219
SqlListChildrenQuery 165
UseSpFornKey 165
RegistryHome global constant 312
Remove 173
Remove() method 314, 321
Rename 147, 151
.replace macro 268
Report Item Templates category 303
report language files 1, 287
All Attributes and Collections tab 300
All Classes tab 299
All Report Titles tab 297
creating 289
Linguistic Variables category 300
Object Attributes category 298
opening 288
properties 290
Report Item Templates category 303
Report Titles category 294
translation example 295
Values Mapping category 291
report templates 1
Report Titles category 294
reports
CreateReport() method 325
creating by script 325
GenerateHTML() method 325
GenerateRTF() method 325
generating by script 325
Reports collection 325
translating 287
Reports collection 325
repository
checking documents in by script 325
checking documents out by script 325
checking resource files into 1
CheckOut() method 325
comparing resource files 1
connecting by script 325
Consolidate() method 325
ConsolidateNew() method 325
RepositoryConnection global property 312
updating resource files from 1
RepositoryConnection global property 312
ReservedDefault 139
ReservedWord 139
369
Index
resource editor
See also resource files
resource files
adding items 6
checking into the repository 1
comparing 7
comparing with the repository 1
conversion tables 1
copying 7
creating 7
csv (conversion tables) 1
DBMS definition files 1
deleting items 6
editing 6
embedding 6
extension files 1
impact and analysis rule sets 1
mcc (model category sets) 1
merging 8
model category sets 1
navigating in 5
not certified 3
object language definition files 1
object permission profiles 1
opening 3
paths 1
ppf (object permission profiles) 1
process language definition files 1
report language files 1
report templates 1
repository 1
restoring defaults 6
rtp (report templates) 1
rul (impact and analysis rule sets) 1
saving 6
searching 5
sharing 6
updating from the repository 1
upf (user profiles) 1
user profiles 1
xdb (DBMS definition files) 1
xem (extension files) 1
XML language definition files 1
xol (object language definition files) 1
xpl (process language definition files) 1
xrl (report language files) 1
xsl (XML language definition files) 1
restoring defaults in resource files 6
370
result columns
DBMS definition file 194
retrieving mappings by script 324
reverse engineering 120
attributes 128
EX keyword 128
extending 128
function based indexes 131
live connection 125
live databases 129, 131, 132
PDM extended objects 133
PDM variables 233
physical options 129
qualifiers 132
ReversedQueries 128
ReversedStatements 124
script after 133
script before 133
scripts 124
reverse-engineering databases by script 328
ReverseDatabase() method 328
ReversedQueries 128
ReversedStatements 124, 143
RevokeOption 190, 191
robustness diagrams
creating custom checks 21
creating custom symbols 19
creating extension for 16
creating generated files 29
creating stereotypes 18
creating templates 27
testing extension 30
roles
Bind 187
DBMS definition file 187
SqlListChildrenQuery 187
SqlPermQuery 187
Unbind 187
rtp (report templates) 1
rul (impact and analysis rule sets) 1
RuleComment 176
rules
ColnDefaultName 176
ColnRuleName 176
DBMS definition file 176
MaxDefaultLen 176
PDM variables 222
RuleComment 176
UddtDefaultName 176
Index
UddtRuleName 176
S
saving resource files 6
scope
Outer 255
Parent 255
ScriptExt 137
scripting
accessing extensions 329
accessing object properties 316
accessing objects 316
ActiveModel global property 313
browsing collections 314
changing symbol format 320
checking documents into the repository 325
checking out of the repository 325
connecting to databases 326, 328
connecting to the repository 325
create shortcut 323
CreateModel() method 313
creating data sources 324
creating extensions 329
creating link objects 318
creating mappings 324
creating models 313
creating object selections 321
creating objects 318
creating reports 325
creating shortcuts 323
creating symbols 320
databases 326, 328
deleting objects 321
Edit/Run Script editor 307
extending the metamodel 329
folders 322
generating databases 326
generating reports 325
generating test data 326
global constants 312
global functions 312
global properties 312
introduction 305
launching scripts via custom commands 338,
339
mappings 324
metamodel 330
Metamodel Objects Help 346
Models global collection 313
371
Index
SqlAttrQuery 143
SqlChckQuery 147, 151
SqlContinue 135
SqlListChildrenQuery 165, 186, 187
SqlListDefaultQuery 172
SqlListQuery 143
SqlListRefrTables 147
SqlListSchema 147, 168
SqlOptsQuery 143
SqlPermQuery 147, 151, 168, 176, 179, 186, 187
SqlStatistics 151
SqlSupport 134
SqlSysIndexQuery 159
.SQLXML PDM macro 242
SqlXMLTable 147
SqlXMLView 168
StartCommand 137
stereotypes 37
example 18
promoting to metaclass 37, 39
Use as metaclass 18, 37, 39
UseAsMetaclass property 329
StorageComment 170
storages
DBMS definition file 170
PDM variables 223
StorageComment 170
strings
A (align left) 248
aligning left 248
converting to first character lowercase 214,
248
converting to first character uppercase 214,
248
converting to lowercase 214, 248
converting to uppercase 214, 248
deleting substrings 214, 248
.foreach_part macro 274
iterating over in GTL 274
L (lowercase) 214, 248
LF (first character lowercase) 214, 248
M (delete substring) 214, 248
Q (double quotes) 214, 248
q (single quotes) 214, 248
surrounding in double quotes 214, 248
surrounding in single quotes 214, 248
T (trim whitespace) 214, 248
trimming whitespace 214, 248
U (uppercase) 214, 248
372
T
T formatting option (trim whitespace) 214, 248
TableComment 147
TableExt 137
tables
AddTableCheck 147
AllowedADT 147
AlterTableFooter 147
AlterTableHeader 147
ConstName 147
DBMS definition file 147
DefineTableCheck 147
DropTableCheck 147
Index
MaxConstLen 147
PDM variables 215
Permission 147
Rename 147
SqlChckQuery 147
SqlListRefrTables 147
SqlListSchema 147
SqlPermQuery 147
SqlXMLTable 147
TableComment 147
TypeList 147
UniqConstraintName 147
TablespaceComment 170
tablespaces
DBMS definition file 170
PDM variables 223
TablespaceComment 170
tail string 250
templates 85, 88, 245
calling 257
example 27
F12 5
jumping to referenced template 5
Outer scope 255
overloading 257
overriding 257
Parent scope 255
passing parameters 260
recursive 262
referencing shortcuts 256
scope 255
Terminator 135
testing PDM variable values 212
text
formatting in GTL 248
text blocks
changing case in GTL 277
.foreach_line macro 273
iterating over in GTL 273
.lowercase macro 277
outputting unique lines in GTL 281
.unique macro 281
.uppercase macro 277
Time 180
TimeFormat 136
Tools menu
creating custom commands in 338, 339
trace mode 14
transactions
BeginTransaction() global function 312
CancelTransaction() global function 312
EndTransaction() global function 312
Transformation Profile category 14
transformation profiles 95
transformations 93
transformation profiles 95
transformation scripts 96
translation errors 283
TrgFooter 137
TrgHeader 137
TrgUsage1 137
TrgUsage2 137
trigger template items 120
trigger templates 120
TriggerComment 180
TriggerExt 137
triggers
DBMS definition file 180
DefaultTriggerName 180
EnableMultiTrigger 180
EnableOwner 180
Event 180
EventDelimiter 180
PDM variables 221, 233
Time 180
TriggerComment 180
UseErrorMsgTable 180
UseErrorMsgText 180
TypeList 147, 168
U
U formatting option (uppercase) 214, 248
UddtComment 172
UddtDefaultName 176
UddtRuleName 176
UF formatting option (first character uppercase)
214, 248
Unbind 151, 172, 186, 187
UniqConstAutoIndex 163
UniqConstName 134
UniqConstraintName 147
UniqInTable 163
UniqName 159
.unique macro 281
unique identifiers
%NewUUID% global variable 251
.unset macro 279
373
Index
upf (user profiles) 1
uppercase 277
.uppercase macro 277
UpperCaseOnly 136
Usage1 137
Usage2 137
Use as metaclass 18, 37, 39
UseAsMetaclass property 329
UseBlockTerm 135
UseErrorMsgTable 180
UseErrorMsgText 180
user interaction
controlling in GTL 278
.set_interactive_mode macro 278
user profiles 1
UserName global constant 312
users
%CurrentUser% global variable 251
DBMS definition file 176
SqlPermQuery 176
UserTypeName 172
UseSpFornKey 165
UseSpPrimKey 162
V
ValidationMode global property 312
Values Mapping category 291
variable
foreign key 240
primary key 240
variables
columns 234
.vbscript macro 281
VBScript 80, 96, 309
embedding in GTL 281
example 305
.execute_vbscript macro 270
executing with GTL 270
.vbscript macro 281
Version global constant 312
ViewCheck 168
ViewComment 168
Viewer global constant 312
views
DBMS definition file 168
PDM variables 215
SqlListSchema 168
SqlPermQuery 168
SqlXMLView 168
374
TypeList 168
ViewCheck 168
ViewComment 168
ViewStyle 168
ViewStyle 168
W
.warning macro 269
warnings
in GTL 269
.warning macro 269
Web operations
DBMS definition file 193
Web parameters
DBMS definition file 194
Web services
DBMS definition file 193
PDM variables 230
workspace
accessing by script 322
ActiveWorkspace global property 312, 322
Children collection 322
modifying by script 322
saving by script 322
X
X formatting option (escape XML characters) 248
xdb (DBMS definition files) 1
xem (extension files) 1
xems
See extension files
XML
extensions for importing 97
importing objects from 98
XML file
add-in 335
structure 335
XML imports 97
initialization scripts 101
mapping properties 101
mappings 98
post-processing scripts 101
XML language definition files 1
DataTypes category 112
extensions 117
generation category 112
generation commands 112, 114
Index
generation options 112, 113
generation tasks 112, 114
profile category 117
properties 107
Settings category 112
375
Index
376