如何使用 PowerDesigner VBScript 创建触发器并分配 TriggerTemplate?
How to create a Trigger and assign a TriggerTemplate using PowerDesigner VBScript?
我使用的是 PowerDesigner v16,我创建了一个 Extension
;在此 Extension
中添加了 Table 类型的 MetaClass
;在此 MetaClass
中,使用 VBScript 创建了一个事件处理程序,以遍历所有 table 并在所有 table 中创建一些默认字段/列(属性)。
但现在我想利用我正在经历所有 table 和 VBScript
来创建一个标准 Trigger
,它位于 [=17] =],我不知道如何通过 VBScript 执行此操作。
我的主要问题是:如何使用 VBScript
创建 Trigger
并分配 TriggerTemplate
?
你能举个例子吗?
可能相关的问题:
PowerDesigner - Assign a TriggerTemplate to a trigger through VBScript?
下面是我用来遍历整个 table 并检查是否有标准列的函数:
注意:此功能是在 PowerDesigner
Extencion
中使用 PDM 建模执行的。而这个扩展的路径如下:DEFAULT COLUMNS::Profile\Table\Event Handlers\Initialize
'******************************************************************************
' Função para checar se a coluna já existe na tabela.
'******************************************************************************
function ColumnExists(tab, name)
'output "ClassName: " + tab.ClassName
'Checa se a o objeto passano no parâmetro "tab" é do tipo Table (tabela)
if tab.ClassName = "Table" then
dim col
'Passa por todas as colunas da tabela
for each col in tab.Columns
'Checa se o nome da coluna atual já existe igual ao passado por parâmetro ("name")
if col.Name = name then
'output "... já existe " + col.Name
ColumnExists = true
exit function
end if
next
end if
ColumnExists = false
end function
'******************************************************************************
' Função responsável por criar as colunas padrao de uma tabela.
'******************************************************************************
Sub DoCreateColumns(tab)
' Checa se o objeto passado no parâmetro ("tab") é do tipo "Table"
if not tab.ClassName = "Table" then exit sub
dim c
dim myColumns, column
' Executa função "DefaultColumns()" serve para criar um array com todas as colunas padrão
myColumns = DefaultColumns()
'Passa por todas as colunas salvas'
for each column in myColumns
'Checa se esta coluna é um ID
if column.Name = "ID_" then
' Adiciona o nome da tabela junto com a palavra ID
column.Name = "ID_" + tab.Name
column.Code = column.Name
end if
'Checa se a coluna ja existe
if not ColumnExists(tab, column.Name) then
set c = tab.Columns.CreateNewAt(column.Position)
c.Name = column.Name
c.Code = column.Code
c.domain = column.Domain
c.Mandatory = column.Mandatory
output "... adding column " + column.Name + " table " + tab.Name
end if
next
End Sub
我用一个 table 创建了一个 SAP SQL Anywhere 17 PDM,将其保存为 .pdm 文件;然后在此 table 上添加基于模板的触发器,并将模型另存为新的 .pdm 文件。通过比较文件,我得到了触发器+模板表示的一些提示。
特别是触发器模板附加到触发器。通过快捷方式,因为模板在 DBMS 中,而触发器在模型中。
<o:Table Id="o9">
<a:Name>Table_1</a:Name>
<a:Code>TABLE_1</a:Code>
<c:Triggers>
<o:Trigger Id="o10">
<a:Name>Trigger_1</a:Name>
<a:Code>TRIGGER_1</a:Code>
<c:BaseTrigger.TriggerItems>
<o:Shortcut Ref="o5"/>
<o:Shortcut Ref="o6"/>
</c:BaseTrigger.TriggerItems>
<c:TriggerTemplate> <===
<o:Shortcut Ref="o4"/> <===
</c:TriggerTemplate>
</o:Trigger>
</c:Triggers>
查看帮助文件 SAP PowerDesigner 16 OLE Help
,我看到 TriggerTemplate 是 BaseTrigger
class 的 属性,Trigger
从中派生。
这是一个使用它的例子。
option explicit
' create model
dim mdl : set mdl = CreateModel(PDPdm.cls_PdmModel, "|DBMS=SAP SQL Anywhere 17")
' create table and trigger
dim tbl : set tbl = mdl.CreateObject(PDPdm.cls_Table)
dim trig : set trig = tbl.CreateObject(PDPdm.cls_Trigger)
' set trigger template
SetTemplate trig, "BeforeUpdateTrigger"
function SetTemplate(trg, typ)
SetTemplate = false
' find template
dim db : set db = trg.Model.DBMS
' in case of shared DBMS instead of embedded one
if db.IsShortcut() then set db = db.TargetObject
dim tm, found
for each tm in db.TriggerTemplates
if tm.name = typ then
set found = tm
exit for
end if
next
if IsEmpty(found) then exit function
' create shortcut alongside the table
dim fld : set fld = trg.Parent.Folder
dim short : set short = found.CreateShortcut(fld)
' assign, and initialize
set trg.TriggerTemplate = short
trg.InitFromTemplate
SetTemplate = true
end function
我使用的是 PowerDesigner v16,我创建了一个 Extension
;在此 Extension
中添加了 Table 类型的 MetaClass
;在此 MetaClass
中,使用 VBScript 创建了一个事件处理程序,以遍历所有 table 并在所有 table 中创建一些默认字段/列(属性)。
但现在我想利用我正在经历所有 table 和 VBScript
来创建一个标准 Trigger
,它位于 [=17] =],我不知道如何通过 VBScript 执行此操作。
我的主要问题是:如何使用 VBScript
创建 Trigger
并分配 TriggerTemplate
?
你能举个例子吗?
可能相关的问题:
PowerDesigner - Assign a TriggerTemplate to a trigger through VBScript?
下面是我用来遍历整个 table 并检查是否有标准列的函数:
注意:此功能是在 PowerDesigner
Extencion
中使用 PDM 建模执行的。而这个扩展的路径如下:DEFAULT COLUMNS::Profile\Table\Event Handlers\Initialize
'******************************************************************************
' Função para checar se a coluna já existe na tabela.
'******************************************************************************
function ColumnExists(tab, name)
'output "ClassName: " + tab.ClassName
'Checa se a o objeto passano no parâmetro "tab" é do tipo Table (tabela)
if tab.ClassName = "Table" then
dim col
'Passa por todas as colunas da tabela
for each col in tab.Columns
'Checa se o nome da coluna atual já existe igual ao passado por parâmetro ("name")
if col.Name = name then
'output "... já existe " + col.Name
ColumnExists = true
exit function
end if
next
end if
ColumnExists = false
end function
'******************************************************************************
' Função responsável por criar as colunas padrao de uma tabela.
'******************************************************************************
Sub DoCreateColumns(tab)
' Checa se o objeto passado no parâmetro ("tab") é do tipo "Table"
if not tab.ClassName = "Table" then exit sub
dim c
dim myColumns, column
' Executa função "DefaultColumns()" serve para criar um array com todas as colunas padrão
myColumns = DefaultColumns()
'Passa por todas as colunas salvas'
for each column in myColumns
'Checa se esta coluna é um ID
if column.Name = "ID_" then
' Adiciona o nome da tabela junto com a palavra ID
column.Name = "ID_" + tab.Name
column.Code = column.Name
end if
'Checa se a coluna ja existe
if not ColumnExists(tab, column.Name) then
set c = tab.Columns.CreateNewAt(column.Position)
c.Name = column.Name
c.Code = column.Code
c.domain = column.Domain
c.Mandatory = column.Mandatory
output "... adding column " + column.Name + " table " + tab.Name
end if
next
End Sub
我用一个 table 创建了一个 SAP SQL Anywhere 17 PDM,将其保存为 .pdm 文件;然后在此 table 上添加基于模板的触发器,并将模型另存为新的 .pdm 文件。通过比较文件,我得到了触发器+模板表示的一些提示。
特别是触发器模板附加到触发器。通过快捷方式,因为模板在 DBMS 中,而触发器在模型中。
<o:Table Id="o9">
<a:Name>Table_1</a:Name>
<a:Code>TABLE_1</a:Code>
<c:Triggers>
<o:Trigger Id="o10">
<a:Name>Trigger_1</a:Name>
<a:Code>TRIGGER_1</a:Code>
<c:BaseTrigger.TriggerItems>
<o:Shortcut Ref="o5"/>
<o:Shortcut Ref="o6"/>
</c:BaseTrigger.TriggerItems>
<c:TriggerTemplate> <===
<o:Shortcut Ref="o4"/> <===
</c:TriggerTemplate>
</o:Trigger>
</c:Triggers>
查看帮助文件 SAP PowerDesigner 16 OLE Help
,我看到 TriggerTemplate 是 BaseTrigger
class 的 属性,Trigger
从中派生。
这是一个使用它的例子。
option explicit
' create model
dim mdl : set mdl = CreateModel(PDPdm.cls_PdmModel, "|DBMS=SAP SQL Anywhere 17")
' create table and trigger
dim tbl : set tbl = mdl.CreateObject(PDPdm.cls_Table)
dim trig : set trig = tbl.CreateObject(PDPdm.cls_Trigger)
' set trigger template
SetTemplate trig, "BeforeUpdateTrigger"
function SetTemplate(trg, typ)
SetTemplate = false
' find template
dim db : set db = trg.Model.DBMS
' in case of shared DBMS instead of embedded one
if db.IsShortcut() then set db = db.TargetObject
dim tm, found
for each tm in db.TriggerTemplates
if tm.name = typ then
set found = tm
exit for
end if
next
if IsEmpty(found) then exit function
' create shortcut alongside the table
dim fld : set fld = trg.Parent.Folder
dim short : set short = found.CreateShortcut(fld)
' assign, and initialize
set trg.TriggerTemplate = short
trg.InitFromTemplate
SetTemplate = true
end function