网上关于PD里面Code/Name自动调整的文章中转载的最多是一篇《PowerDesigner Name/Code自动调整》,可文章里面的脚本是有问题的,很多人应该都试过,无法使用。此文章转载的很多,百度直接搜索完整的文章标题有21,200条记录!不知道为啥没人指出其问题,让这个并不是正确的代码在网上流行这么多年。
原文如下:
这个功能虽然好用,但是我需要在Name这一项加上一个中文的注释,这个时候怎么办呢?
下面两个例子,相信对你相当有用.
Examples
· Script 1:
.set_value(_First, true, new)
.foreach_part(%Name%, "'#'")
.if (%_First%)
.delete(%CurrentPart%)
.set_value(_First, false, update)
.else
%CurrentPart%
.endif
.next
这个例子是把Name内容的#号后边的内容当作Code.
如:在Name列输入 用户名#user_name 则在Code列自动会变成 user_name
· Script 2:
.set_value(_First, true, new)
.foreach_part(%Name%, "'#'")
.if (%_First%)
%CurrentPart%
.set_value(_First, false, update)
.endif
.next
这个例子是把Name内容的#号前边的内容当作Code.
如:在Name列输入 user_name#用户名 则在Code列自动会变成 user_name
具体操作方法是:
1、打开powerDesigner菜单的Tools->Model Options....->Naming Convention
2、选中Name,并勾选Enable name/code conversions.
3、选择Name To Code,把上面任意一个例子的代码(红色部分)贴到conversion script内容框中即可。
注:用这个script的时候,必须先设置,才会转换的。
如果你已经设计好了,再设置是不会对之前的东西改变的。
这个文章里面的第二段式正确的,第一段语法有问题。
.delete(%CurrentPart%)这句语法不对。少了结束语法。修改成下面的代码就可以了。
.delete(%CurrentPart%)
.enddelete
其实我上面的语法也不是很标准。再严谨一点是:
.delete(%CurrentPart%)
%CurrentPart%
.enddelete
最后整理一下正确的是:
脚本1:
.set_value(_First, true, new)
.foreach_part(%Name%, "'#'")
.if (%_First%)
.delete(%CurrentPart%)
.enddelete
.set_value(_First, false, update)
.else
%CurrentPart%
.endif
.next
这个例子是把Name内容的#号后边的内容当作Code.
脚本2:
.set_value(_First, true, new)
.foreach_part(%Name%, "'#'")
.if (%_First%)
%CurrentPart%
.set_value(_First, false, update)
.endif
.next
这个例子是把Name内容的#号前边的内容当作Code.
另外在使用这个功能时候最好把name/code自动复制功能打开。Tool——Genneral——Options Dialog——Name to Code mirroring.默认就是打开的。