PowerDesigner中从注释生成Name的两个升级VBS脚本

1、原始脚本
Create_chn_From_Comment.vbs

Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch

Dim mdl 'the current model

'get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model" 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model." 
Else 
ProcessFolder mdl 
End If

'This routine copy name into code for each table, each column and each view 
'of the current folder 
Private sub ProcessFolder(folder) 
Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
tab.name =  tab.comment

Dim col 'running column 
for each col in tab.columns
if len(col.comment)<>0 then   'add by nisj
col.name= MID(col.comment,instr(col.comment,"-")+1)
end if
next 
end if 
next

Dim view 'running view 
for each view in folder.Views 
if not view.isShortcut then 
view.name =  view.comment
end if 
next

'go into the sub-packages 
Dim f 'running folder 
For Each f In folder.Packages 
if not f.IsShortcut then 
ProcessFolder f 
end if 
Next 
end sub 


以上脚本可以实现一般的注释转化到Name,但对于注释中有空、有重复的问题,脚本运行时便会报错;所以需要进行相应的升级。
2、改进脚本之一
Create_chn_From_Comment(重复信息后缀行号).vbs

Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch

Dim mdl 'the current model

'get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model" 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model." 
Else 
ProcessFolder mdl 
End If

'This routine copy name into code for each table, each column and each view 
'of the current folder 
Private sub ProcessFolder(folder) 
Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
tab.name =  tab.comment

Dim col 'running column 
Dim count
count=1
for each col in tab.columns
On Error Resume Next '忽略错误,继续执行
if len(col.comment)<>0 then   'add by nisj
col.name= MID(col.comment,instr(col.comment,"-")+1)
'On Error Resume Next '忽略错误,继续执行
If Err.Number<>0 then
 col.name = "重复的列名-"&col.comment&count
end if
On Error Goto 0
count = count + 1
end if
next 
end if 
next

Dim view 'running view 
for each view in folder.Views 
if not view.isShortcut then 
view.name =  view.comment
end if 
next

'go into the sub-packages 
Dim f 'running folder 
For Each f In folder.Packages 
if not f.IsShortcut then 
ProcessFolder f 
end if 
Next 
end sub 


3、改进脚本之二
Create_chn_From_Comment(重复信息后缀ObjectId).vbs

Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch

Dim mdl 'the current model

'get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model" 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model." 
Else 
ProcessFolder mdl 
End If

'This routine copy name into code for each table, each column and each view 
'of the current folder 
Private sub ProcessFolder(folder) 
Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
tab.name =  tab.comment

Dim col 'running column 
for each col in tab.columns
On Error Resume Next '忽略错误,继续执行
if len(col.comment)<>0 then   'add by nisj
col.name= MID(col.comment,instr(col.comment,"-")+1)
'On Error Resume Next '忽略错误,继续执行
If Err.Number<>0 then
 col.name = "重复的列名-"&col.comment&"-"&col.ObjectId
end if
On Error Goto 0
end if
next 
end if 
next

Dim view 'running view 
for each view in folder.Views 
if not view.isShortcut then 
view.name =  view.comment
end if 
next

'go into the sub-packages 
Dim f 'running folder 
For Each f In folder.Packages 
if not f.IsShortcut then 
ProcessFolder f 
end if 
Next 
end sub 


4、后记
(1)、
在编码调试的过程中,可以查看帮助文档,如下图所示:


查找列及表的对象元素,在文档中搜索“Column Mapping”进行相应对象的查看。
(2)、脚本中进行相应的更改,也可以实现Name到Comment、Name到Code等,稍作修改即可。
(3)、在此VBS脚本中,主要用到了“On Error Resume Next '忽略错误,继续执行”等一些不知道VB语法;在编写的过程中请教了一些高手,用了半天也没搞好;经仔细分析发现“高手”技术很牛,但思路不清晰,逻辑搞不通;后来自己细想了一下,改了点东西,虽然不甚专业,但也能解决些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值