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 >>