湮顾千古 2019-04-04 14:40 采纳率: 0%
浏览 392
已结题

erwin提供了api,但没有说明Java如何调用erwin,可以能得到详细的帮助和解答,谢谢。

erwin提供了api,但没有说明Java如何调用erwin,怎么通过Java程序调用Erwin的api,需要能给出具体详细的方案

  • 写回答

2条回答 默认 最新

  • damonzhong 2019-04-04 15:09
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决