ERWIN API使用

近期在使用ERWIN软件做ER图,相关的表,视图和备注(就是中文说明啦)信息在数据库(Oracle)中都有,使用reverse engineer(反向工程)将数据库中的信息导出。导出后发现逻辑模型的Entity和Attribute为英文名(数据库中的表名和字段名,为方便叙述,后面就统一使用中文名和英文名名称),原来做ERWIN模型的时候都是手工修改逻辑模型,或者用按键精灵等工具来处理,很繁琐。后来了解ERWIN软件有提供API接口来操作,经过一天的摸索和试验,终于搞定。这里将相关信息记录如下。

1、ERWIN API介绍
ERWIN的API叫SCAPI ,全称是Script Client API,是ALLFUSION DM 的一部分,可用于客制化插件开发和第三方工具。
SCAPI的逻辑分层如下:
Application Tier
Model Directory Tier
Session Layer
Model Data Tier

相关文档如下:
ERWIN安装目录下的Doc\ERwin_API_Ref.pdf,里面的介绍很全面,并有用C#和VB操作的相关代码,英文文档。
[url=http://dl.iteye.com/topics/download/e5ef8847-d155-36a7-a3e2-154fcf00b9de]ERPWIN API 使用指南[/url],中文文档,不过里面的示例代码看着有点乱

2、相关细节
由于导出的模型中的Definition属性中已经有中文名(从数据库中的comment导出的),这里实现只需将对应的Entity和Attribute的名字改为对应的definition中的内容即可。
我是使用的python和pywin32调COM接口来实现的

#创建COM对象
scapi = win32.Dispatch('AllFusionERwin.SCAPI')
#建立与持久装置中模型的连接
scPUnit = scapi.PersistenceUnits.Add(filename,"RDO=yes")
#建立存取内存中模型数据的连接
scSession = scapi.Sessions.Add()
scSession.Open(scPUnit,0,0)
#事务控制
scTranId = scSession.BeginTransaction()
#获取所有Entity模型对象
scMObjects = scSession.ModelObjects.Collect(scSession.ModelObjects.Root,'Entity',1)
for scObj in scMObjects:
#取Definition属性的值
scDefineName = scObj.Properties('Definition').Value
#对象名赋值
scObj.Properties('Name').Value = scDefineName
#获取该Entity的所有Attribute对象
scAttrObjects = scSession.ModelObjects.Collect(scObj,'Attribute',1)
#Attribute名的修改与上面类似
...
scSession.CommitTransaction(scTranId)
#另存为一个新的文件
scPUnit.Save(newfilename,'OVF=yes')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值