[原创]通过编写PowerDesigner脚本功能批量修改属性
在设计的时候经常会碰到注释和Name不统一,需要手工复制的问题。其实PD提供了很好的方法可以批量进行调整。
我写了一个递归的修改方法,如下所示:可做为参考。
[2008年5月1日]如果需要对name 进行赋值的时候可能会出现同名的错误,所以可以利用 VBS中的On Error Resume Next这个语句进行跳过。如
我写了一个递归的修改方法,如下所示:可做为参考。
1 '******************************************************************************
2 '* File: CommentVsName.vbs
3 '* Purpose: 把字段及表注释为空的用name来代替
4 '* Title: 保证每个字段及表都有注释
5 '* Category: 注释
6 '* Author: lbq(buddy) liubiqu@sina.com
7 '* Created: 2008年3月24日
8 '* Modified: 2008年4月24日
9 '* Use: 打开PDM,运行本脚本(Ctrl+Shift+X)
10 '* Version: 1.0
11 '* Comment: 遍历PDM中的所有包,把数据表及字段的注释为空的部分用Name来替换
12 '* Copyright (C) 2008 topsthink Inc.
13 '******************************************************************************
14
15 Option Explicit
16 ValidationMode = True
17 InteractiveMode = im_Abort
18
19
20 Dim mdl ' 定义当前的模型
21
22 '通过全局参数获得当前的模型
23 Set mdl = ActiveModel
24 If (mdl Is Nothing) Then
25 MsgBox "没有选择模型,请选择一个模型并打开."
26 ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
27 MsgBox "当前选择的不是一个物理模型(PDM)."
28 Else
29 ProcessFolder mdl
30 End If
31
32
33 '--------------------------------------------------------------------------------
34 '功能函数
35 '--------------------------------------------------------------------------------
36 Private Sub ProcessFolder(folder)
37 Dim Tab '定义数据表对象
38 for each Tab in folder.tables
39 if not tab.isShortcut then
40 if tab.comment = "" then tab.comment = tab.name '进行判断并赋值
41 Dim col '定义列对象
42 for each col in tab.columns
43 if col.comment = "" then col.comment = col.name '进行判断并赋值
44 next
45 end if
46 next
47
48 '对子包进行递归,如果不使用递归只能取到第一个模型图内的表
49 dim subfolder
50 for each subfolder in folder.Packages
51 ProcessFolder subfolder
52 next
53
54 'msgbox "完成把comment为空的内容用name代替"
55 End Sub
2 '* File: CommentVsName.vbs
3 '* Purpose: 把字段及表注释为空的用name来代替
4 '* Title: 保证每个字段及表都有注释
5 '* Category: 注释
6 '* Author: lbq(buddy) liubiqu@sina.com
7 '* Created: 2008年3月24日
8 '* Modified: 2008年4月24日
9 '* Use: 打开PDM,运行本脚本(Ctrl+Shift+X)
10 '* Version: 1.0
11 '* Comment: 遍历PDM中的所有包,把数据表及字段的注释为空的部分用Name来替换
12 '* Copyright (C) 2008 topsthink Inc.
13 '******************************************************************************
14
15 Option Explicit
16 ValidationMode = True
17 InteractiveMode = im_Abort
18
19
20 Dim mdl ' 定义当前的模型
21
22 '通过全局参数获得当前的模型
23 Set mdl = ActiveModel
24 If (mdl Is Nothing) Then
25 MsgBox "没有选择模型,请选择一个模型并打开."
26 ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then
27 MsgBox "当前选择的不是一个物理模型(PDM)."
28 Else
29 ProcessFolder mdl
30 End If
31
32
33 '--------------------------------------------------------------------------------
34 '功能函数
35 '--------------------------------------------------------------------------------
36 Private Sub ProcessFolder(folder)
37 Dim Tab '定义数据表对象
38 for each Tab in folder.tables
39 if not tab.isShortcut then
40 if tab.comment = "" then tab.comment = tab.name '进行判断并赋值
41 Dim col '定义列对象
42 for each col in tab.columns
43 if col.comment = "" then col.comment = col.name '进行判断并赋值
44 next
45 end if
46 next
47
48 '对子包进行递归,如果不使用递归只能取到第一个模型图内的表
49 dim subfolder
50 for each subfolder in folder.Packages
51 ProcessFolder subfolder
52 next
53
54 'msgbox "完成把comment为空的内容用name代替"
55 End Sub
[2008年5月1日]如果需要对name 进行赋值的时候可能会出现同名的错误,所以可以利用 VBS中的On Error Resume Next这个语句进行跳过。如
1Private Sub ProcessFolder(folder)
2 Dim Tab '定义数据表对象
3 for each Tab in folder.tables
4 if not tab.isShortcut then
5 if tab.comment <> "" then tab.name = tab.comment&"(" &tab.name&")" '进行判断并赋值
6 Dim col '定义列对象
7 for each col in tab.columns
8 if col.comment <> "" then
9 On Error Resume Next '增加此句
10 col.name = col.comment '进行判断并赋值
11 end if
12 next
13 end if
14 next
2 Dim Tab '定义数据表对象
3 for each Tab in folder.tables
4 if not tab.isShortcut then
5 if tab.comment <> "" then tab.name = tab.comment&"(" &tab.name&")" '进行判断并赋值
6 Dim col '定义列对象
7 for each col in tab.columns
8 if col.comment <> "" then
9 On Error Resume Next '增加此句
10 col.name = col.comment '进行判断并赋值
11 end if
12 next
13 end if
14 next