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语法;在编写的过程中请教了一些高手,用了半天也没搞好;经仔细分析发现“高手”技术很牛,但思路不清晰,逻辑搞不通;后来自己细想了一下,改了点东西,虽然不甚专业,但也能解决些问题。