PowerDesigner增强
把注释显示出来
选定编辑的表,右键- >Properties- >Columns- >Customize Columns and Filter(或直接用快捷键Ctrl+U)- >Comment(前面打勾)- >OK
把Name的值变成comment(注释) 参照<powerdesigner逆向工程生成PDM时的列注释解决方案的补充>
改进脚本:Powerdesigner界面-Database-Edit Current DBMS
将表的Name换为Comment
将列的Name换为Comment
Name/Code自动填写
大家都清楚在用PowerDesigner的时候,当你输入Name的时候Code是会自动帮你按照Name的内容填上的.
这个功能虽然好用,但是我需要在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
//////////////////////据说上面是错的
.set_value(_First, true, new)
.foreach_part(%Name%, "'#'")
.if (%_First%)
.delete(%CurrentPart%)
.enddelete
.set_value(_First, false, update)
.else
%CurrentPart%
.endif
.next
////////////////
· 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的时候,必须先设置,才会转换的。
如果你已经设计好了,再设置是不会对之前的东西改变的。
另外在使用这个功能时候最好把name/code自动复制功能打开。Tool——Genneral——Options Dialog——Name to Code mirroring.默认就是打开的。
当生成的PDM,用pdmreader来读取,增加查询链接后,很强悍
Power Designer导出实体类和NHibernate xml文件
今天研究了一下通过PowerDesigner生成实体类和NHibernate所需要的xml文件,方法是通过Power Designer的向对象模型 (OOM) 导出并配置相关模板,具体操作步骤如下:
第一步:创建OOM
在PowerDesigner中创建面向对象模型 (OOM)。
我首先创建物理数据模型 (PDM),然后在 Tools → Generate Object-Oriented Model 做了转换。
第二步:配置导出实体模板文件
菜单位置:Language → Edit Current Object Language
General:C# 2::Profile\Attribute\Templates\definition
我对模板进行了简单修改,添加了一行空格和 { get; set; }。又对文件头和字段描述的格式做了修改。
.if (%isGenerated%) and (%isValidAttribute%)
[%comment%\n]\
[%oidDocTag%\n]\
[%customAttributes%\n]\
.if (%Multiple% == false) and (%isIndexer% == false)
[%visibility% ][%flags% ]%dataType%
.convert_name(%fieldCode%,,"_",FirstUpperChar) //首字母变大写
[ = %InitialValue%] { get; set; }
.else
[%visibility% ][%flags% ]%dataType%[%arraySize%]
.convert_name(%fieldCode%,,"_",FirstUpperChar) //首字母变大写
[ = %InitialValue%] { get; set; }
.endif
.endif
DefaultHeader
位置在:C# 2::Profile\Classifier\Templates\DefaultHeader
写自己的代码:
按 Ctrl+C 复制代码
// -------------------------------------------------------------------------------------------------------------------- // <copyright file="%sourceFilename%" company=""> // XXXX系统 // </copyright> // <summary> // %Comment% // </summary> // --------------------------------------------------------------------------------------------------------------------
按 Ctrl+C 复制代码
[%comment%\n]\
位置在:C# 2::Profile\Shared\Templates\comment
写自己的代码:
/// <summary>
/// %CurrentLine%
/// </summary>
提示:在做类时只有把Comment字段填上,导出是才会有字段描述。
对命名空间进行配置,我直接写到了 source 里面感觉不是太合适。
C# 2::Profile\Classifier\Templates\source
现在就可以将实体导出了。
菜单位置:Language → Generate C# 2 Code
第二步:配置导出NHibernated的xml模板文件
这个是通过在网上查资料学来的,
感谢:用Powerdesigner生成NHebernate的MAP文件
只是他没有附图,让人找不到位置,我也研究了一个下午才找到的,以下参数命名仍采用他的。
1.还是打开 Object Language Properties
菜单位置:Language → Edit Current Object Language
在 C# 2::Profile\Classifier\Generated Files ,创建一个 hbm.xml 文件。
Name: hbm.xml
FileName:%topContainerCode%.hbm.xml
Comment:
.if (%isGenerated%)
.set_object(_usingContext,,new)
[\ %NHebernateHead%\n]\
%NHebernateBody% \n
%NHebernateFoot%
.endif
%NHebernateBody%
2.设置%NHebernateBody%模板的内容
在 C# 2::Profile\Classifier\Templates ,新建一个模板 NHebernateBody
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="%Parent.path%" namespace="%Parent.path%">
<class name="%sourceFilename%" table="%sourceFilename%" lazy="true" >
<id name="ID" column="ID" type="Guid" >
<generator class="assigned" />
</id> \n
.foreach_item(Attributes)
.if(%dataType% == "string")
<property name="%Code%" type="String">
<column name="%Code%" />
</property> \n
.endif
.if(%dataType% == "int")
<property name="%Code%" type="Int32">
<column name="%Code%" />
</property> \n
.endif
.next
</class>
</hibernate-mapping>
具体里面的配置我还没写好,需要再查帮助。
3.配置输出NHibernate的xml文件
在 C# 2::Profile\BasePackage\Templates\Visual Studio ,将模板修改为:
.// Declare classifiers of the package
.foreach_item(Classifiers,,,%IsShortcut%==false)
.if (%IsSelected%) and (%isInner% == false)
<File
RelPath = "%sourceFilePath%"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "%sourceFilePath%\\%topContainerCode%.hbm.xml"
BuildAction = "EmbeddedResource"
/>
.endif(\n)
.next
.// Declare classifiers of the subpackages
.foreach_item(Packages,,,%IsShortcut%==false)
.if (%isAssembly% == false)
%ProjectSourceFiles%
.endif
.next
NHibernate的xml配置完成。最后,一起导出实体和NHibernate的.xml文件
菜单位置:Language → Generate C# 2 Code
生成的两个文件:Customers.cs 和 Customers.hbm.xml
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="Customers.cs" company="">
// XXXX系统
// </copyright>
// <summary>
// 账户信息
// </summary>
// --------------------------------------------------------------------------------------------------------------------
namespace
XXXX.Domain.Model
{
using
System;
/// <summary>
/// 账户信息
/// </summary>
public
class
Customers
{
/// <summary>
/// 账户ID
/// </summary>
public
string
customerId {
get
;
set
; }
dd
/// <summary>
/// 账户名称
/// </summary>
public
string
customerName {
get
;
set
; }
/// <summary>
/// 性别
/// </summary>
public
bool
gender {
get
;
set
; }
/// <summary>
/// 地址
/// </summary>
public
string
address {
get
;
set
; }
/// <summary>
/// 电话号码
/// </summary>
public
string
phoneNumber {
get
;
set
; }
}
}
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="" namespace="">
<class name="Customers.cs" table="Customers.cs" lazy="true" >
<id name="ID" column="ID" type="Guid" >
<generator class="assigned" />
</id>
<property name="CustomerId" type="String">
<column name="CustomerId" />
</property>
<property name="CustomerName" type="String">
<column name="CustomerName" />
</property>
<property name="Address" type="String">
<column name="Address" />
</property>
<property name="PhoneNumber" type="String">
<column name="PhoneNumber" />
</property>
</class>
</hibernate-mapping>
今天的学习只是找到了实现方法,想要把模板做好,还要再看看帮助。
不怎么会写博客,望前辈批评指正。
PowerDesigner PDM生成OOM问题?
从PDM转到OOM的时候
Name 是中文
Code 是英文
可是只要一转就出现在 Name=Code都成中文了。
现在从网上找了一个解决办法,挺好用的。
菜单栏Tools --> 选择 Generate Object-Oriented Model 的时候弹出下图窗体
在OOM Generation Options 界面中的
选择detail标签中,将Convert name into code,前面打钩去掉 保存就可能了。
如图所示:
PowerDesigner中NAME和COMMENT的互相转换,需要执行语句
使用说明: 在【Tools】-【Execute Commands】-【Edit/Run Script】 下。输入下面你要选择的语句即可,也可以保存起来,以便下次使用,后缀为.vbs。
需要注意的问题是:运行语句时必须在Module模式下,如果是导出报表时执行会出现错误提示。
1.Name转到Comment注释字段。一般情况下只填写NAME,COMMENT可以运行语句自动生成。
将该语句保存为name2comment.vbs
'把pd中那么name想自动添加到comment里面
'如果comment为空,则填入name;如果不为空,则保留不变,这样可以避免已有的注释丢失.
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 comment 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
if trim(tab.comment)="" then'如果有表的注释,则不改变它.如果没有表注释.则把name添加到注释里面.
tab.comment = tab.name
end if
Dim col ' running column
for each col in tab.columns
if trim(col.comment)="" then '如果col的comment为空,则填入name,如果已有注释,则不添加;这样可以避免已有注释丢失.
col.comment= col.name
end if
next
end if
next
Dim view 'running view
for each view in folder.Views
if not view.isShortcut and trim(view.comment)="" then
view.comment = view.name
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
2.将Comment内容保存到NAME中,comment2name.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
Private sub ProcessFolder(folder)
On Error Resume Next
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 col.comment="" then
else
col.name= col.comment
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
PowerDesigner增强的更多相关文章
- PowerDesigner下载安装破解
power designer是Sybase公司为开发人员推出的一款常用的数据库建模工具集,它能对管理信息系统进行分析设计,几乎能完成数据库模型设计的全过程,利用Power Designer不仅可以制作 ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- ES5对Array增强的9个API
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
- Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)
背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- 真正的汉化-PowerDesigner 16.5 汉化
一.背景 经常使用PowerDesigner,之前使用15版本,后来16出来后,就一直在使用16,不过一直是英文.一些同事对使用英文版总显示有些吃力. 遍寻百度.必应,都没有找到真正的针对版本16的汉 ...
- 升讯威ADO.NET增强组件(源码):送给喜欢原生ADO.NET的你
目前我们所接触到的许多项目开发,大多数都应用了 ORM 技术来实现与数据库的交互,ORM 虽然有诸多好处,但是在实际工作中,特别是在大型项目开发中,容易发现 ORM 存在一些缺点,在复杂场景下,反而容 ...
- 用VB脚本批到导入字段到PowerDesigner
在PowerDesigner使用脚本批量导入excel中记录的表结构信息,由于需要通过powerdesigner逆向工程创建一些sybase IQ的表,由于是接口数据,只有excel表,手动导入太耗时 ...
- PowerDesigner(数据建模)使用大全
什么是PowerDesigner 引入百度百科的说法是: power designer是能进行数据库设计的强大的软件,是一款开发人员常用的数据库建模工具.使用它可以分别从概念数据模型(Conceptu ...
随机推荐
- JavaScript笔记基础篇(一)
一. 常用正则表达式汇总以及部分问题解决方案 正则匹配: var str = "This is my test"; var test = new RegExp("test ...
- SQLServer日志无法收缩原因分析及解决
SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事 ...
- 【原】JS原型的动态性及实例与原型的关系
今天再读了<JS高程>的第六章,有了些深入的感悟和理解,总结分享一下. 创建对象的方式有很多,有一种是动态原型模式,最实用的是构造函数与原型组合的模式,原型的动态性在这两个模式里都有所体现 ...
- WPS项目编号问题
问题:文档需要编号如下: 1.(标题1) 1.1(标题2) 1.1.1(标题3) 1.2 1.2.1 2.(标题1) 2.1(标题2) 2.1.1(标题3) 2.2 2.2.1 方法一: 第一步,打开 ...
- ssh 互通脚本
实现了 主机到指定机器的ssh免密码登录. 若要实现互通, 则在机器列表的每台机器上执行该脚本. 192.168.1.22 root test 192.168.1.25 root test 192.1 ...
- Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK fla
转载于 http://blog.csdn.net/wike163/article/details/6678073 从一个Activity中要通过intent调出另一个Activity的话,需 ...
- 用python监控Linux,CPU,内存,硬盘
#!/usr/local/bin/python3.5 #coding:utf-8 import mailll, linecache, re, socket, os, time hostname = s ...
- C# webApi 与 AngularJs 实现增删改Demo 讲解(一)
公司在使用webAPI+AngularJs+SlcikGrid进行产品开发,自己也是初学Angular,就做了一个Demo,实现增删改功能,希望可以帮助大家. 界面如同所示: 数据库一张单表很简单, ...
- Vmware /CentOS访问Windows中的文件
1.将该文件设为共享文件夹 2.确定你的windows IP地址,用户名及密码 3.CentOS终端输入以下内容: [root@*** mnt]# mkdir winD [root@*** m ...
- linux 系统下,如何清空文件内容
最近用 crontab命令 做了一些 同步任务,可后期同步任务的代码没用了,于是,我就直接删除了 代码(对应的jar包),但是 crontab -e 的命令行没有删除 ,以后,每天我的Azure vm ...