The Script action lets a framework user execute a script in the node or cell. You can use the script to create a project document and attach it to the node or cell.
In the following example, we will specify an action in a framework diagram node that enables the user to execute a script that generates a model from another model. The result of this example is the same as that of a Generation action, but the script is intended to demonstrate the possibilities that you can script in your own projects. You could, for example, write a script to connect to a live database and reverse engineer it into a cell. For information about writing scripts for use in your models and projects, see Customizing and Extending PowerDesigner > Extension Files > Methods (Profile).
Before you can specify a script action, you have to create a method script on the FrameworkAction metaclass in an extension, and then attach it to your project. In this case, the following script is called GenerateModel, and will generate a PDM:
Sub %Method%(obj)
' This is a sample method that can be used in a script action
' It generates a PDM from a source cell CDM and attaches it to the current cell
' Steps:
' 1- Get the source cell: found by its code "mySourceCell"
' 2- Get the source model: first document in the source cell
' 3- Generate a PDM from the source model
' 4- Attach the generated model to the current cell
' 5- Set current action as source action for the new document
' => That will prevent generating twice if the action is not multiple
If obj Is Nothing Then Exit Sub
Dim sourceCell, targetCell, modelDoc, sourceModel, targetModel
' The script is defined on the action so the current cell is simply the action parent
Set targetCell = obj.Parent
' First check if we can execute the action on the current cell
' for non multiple actions, the CanExecute should return true only the first time
If obj.CanExecute(targetCell) Then
' Get Source cell
Set sourceCell = FindCellByCode(targetCell.Parent, "mySourceCell") ' See function code below End Sub statement
' Get source model (supposed to be the first in its artifact document list)
Set modelDoc = sourceCell.ArtifactDocuments.Item(0)
Set sourceModel = modelDoc.TargetModelObject
' Generate PDM Model
Set targetModel = sourceModel.GenerateModel (Nothing, PdPDM.cls_Model)
' Attach generated model to current cell
Set modelDoc = targetModel.SourceModelDocument
targetCell.AttachDocument(modelDoc)
' Set current action as source for the new model document
obj.SetAsSource(modelDoc)
Else
' In this sample, the action is supposed to be non-multiple
' Therefore, CanExecute fails if it's already a source action for an existing document
output "The action has already been executed"
End If
End Sub
' FindCellByCode function (Global Script function):
Function FindCellByCode (fmx, Code)
Set FindCellByCode = Nothing
Dim Cell
For Each Cell In fmx.cells
If Cell.Code = Code Then
Set FindCellByCode = Cell
Exit For
End If
Next
End Function
>>