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操作的相关代码,英文文档。
ERPWIN API 使用指南,中文文档,不过里面的示例代码看着有点乱

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')

你可能感兴趣的:(oracle,python,vb)