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) or script the PowerDesigner application via OLE automation (see OLE Automation and Add-Ins).
' This is a VBScript comment.
Dim var ' Declaration of a local variable
var = 1 ' Value assignment for simple type
Set var = ActiveModel ' Value assignment for an object. ActiveModel is a PowerDesigner global property
If not var is Nothing Then ' Condition on an object, testing if it is 'null'
Dim objt ' Declaration of another local variable
For Each objt In ActiveModel.Children ' Loop on the Children object collection
DescribeObject objt ' Procedure call with objt as a parameter (without parentheses). The procedure is defined below.
Next
Else
output "There is no active model" ' Output is a PowerDesigner procedure that writes text to the Output window
End If
' This is a procedure - a method that does not return a value
Sub DescribeObject(objt)
Dim desc ' A variable declaration inside the procedure
desc = ComputeObjectLabel(objt) ' A function call with objt as parameter (with parentheses). The function is defined below.
' We retrieve the value returned by the function in the variable desc
output desc ' Displays the object description in the output
End Sub
' This is a function - a method that returns a value
Function ComputeObjectLabel(objt)
Dim label ' Declare a local variable to store the object label
label = "" ' Initialize the label variable with a default value
If objt is nothing then
label = "There is no object"
ElseIf objt.IsShortcut() then ' IsShortcut is a PowerDesigner function available on objects
label = objt.Name & " (shortcut)" ' Concatenation of two strings
Else
On Error Goto 0 ' Disables script execution abort on error
label = objt.Name ' Assigns the object's Name property to the local variable
On Error Resume Next ' Reactivates script execution error
End If
ComputeObjectLabel = label ' The value is returned by assigning an implicit variable with same name than the function
End Function