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 "Methods (Profile)" in the Extending your Models with Profiles chapter of the Customizing and Extending PowerDesigner manual.
Before you can specify a script action, you have to create a method script on the FrameworkAction metaclass in an extended model definition, 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
>>