使用Enterprise Architect Java API连接到正在运行的EA实例

时间:2015-11-03 09:56:51

标签: java enterprise-architect

我们正在对EA存储库中的数据进行一些自定义报告 - 即我们直接从存储库数据库中获取数据。问题是,我们还需要将绑定到指定元素的图表导出到单独的文件中 - 我正在尝试使用Java API来执行此操作。我想知道的是,我是否可以使用api连接到当前正在运行的EA实例,或者是否需要启动一个新实例(这会显着降低速度)。

或者还有其他方法可以实现这一目标吗?我是EA自动化界面的新手,所以我很感激任何提示。

3 个答案:

答案 0 :(得分:2)

似乎可以使用JACOB和这个黑客:

爪哇:

import java.lang.reflect.Constructor;
import org.sparx.App;
import com.jacob.activeX.ActiveXComponent;

public class TestJava {

public static void main(String[] args) throws Exception {
    ActiveXComponent c=ActiveXComponent.connectToActiveInstance ("EA.App");
    Constructor<?> appConstructor=Class.forName("org.sparx.App").getDeclaredConstructor(long.class);
    appConstructor.setAccessible(true);
    App app=(App)appConstructor.newInstance(c.m_pDispatch);
    app.GetRepository().GetConnectionString();
    System.out.println(app.GetRepository().GetPackageByGuid("{9C9D301B-B54D-44fb-898A-0412497D39AA}").GetName());
}

}

Groovy的:

import org.sparx.App
import com.jacob.activeX.ActiveXComponent

ActiveXComponent c=ActiveXComponent.connectToActiveInstance ("EA.App")
println c.m_pDispatch
App app=new App(c.m_pDispatch);
println app.GetRepository().GetConnectionString()
println app.GetRepository().GetPackageByGuid("{9C9D301B-B54D-44fb-898A-0412497D39AA}").GetName()

答案 1 :(得分:1)

使用.Net,您可以使用System.Runtime.InteropServices连接到正在运行的实例我不确定是否存在与Marshal.getActiveObject()相当的Java

这是repository wrapper EA Addin Framework中连接到当前正在运行的实例的代码。

using System.Runtime.InteropServices;
/// Creates a model connecting to the first running instance of EA
public Model(){
  object obj = Marshal.GetActiveObject("EA.App");
  global::EA.App eaApp = obj as global::EA.App;
  this.initialize(eaApp.Repository);
}

如果您有多个正在运行的实例,那么它似乎连接到第一个打开的实例。

答案 2 :(得分:0)

没有办法在EA API中连接EA客户端的运行实例。 EA的设计是客户端/服务器(服务器是数据库),因此没有多大意义。

但是,使用EA的脚本引擎也可以从EA内部获得自动化界面。相同的API,支持VBScript,JavaScript和JScript。

如果您在API中使用DocumentGenerator类,则可以结合您提到的两个任务 - 创建报告并将图表导出到文件。本身无法导出任何文件,但是如果您使用它意味着您自己遍历模型结构而不是让EA的内置文档生成工具为您执行此操作,并且您可以轻松添加一些图表 - 将文件导出到该代码。