【问题标题】:enterprise architect scripting: missed method in java api eaapi.jar企业架构师脚本:java api eaapi.jar 中的缺失方法
【发布时间】:2014-06-09 18:06:12
【问题描述】:

在 Enterprise Architect 对象模型的参考中,我找到了 Element 类: http://www.sparxsystems.com/enterprise_architect_user_guide/9.3/automation/element2.html

类Element 包含属性IsComposite。我使用了 Sparx Systems 的 Java API (eaapi.jar),但找不到该属性的 Setter(myElement.SetIsComposite(true) 是不可能的)。

有人知道这个问题的解决方案吗?例如更新的 eaapi.jar 库或解决方法?

问候, 菲尔

【问题讨论】:

  • 如果属性是公开的(也标记为读/写),直接使用即可:myElement.IsComposite = true;
  • Getter 和 setter 方法只是使用 OOP 的一般方法,但在某些情况下它们不是必需的。
  • 您好 Jari,感谢您的快速评论。我已经尝试以这种方式设置此属性。但似乎该属性不是公开的。对于类 Element 的其他布尔属性,Getter&Setter 可用:/ 我猜库的作者忘记了这一点:(

标签: java enterprise-architect


【解决方案1】:

EA 的 Java API 是底层 COM API 的包装器,帮助文件中对此进行了说明。 Java 版本一般比 COM 版本落后一两步。

这个方法似乎已被排除在 Java API 之外。 COM 类中的其他属性在 Java API 中有 getter/setter,但这个没有。在 10.0.1009 版本中也是如此。

在 EA 11.0.1105(EA 11 的第一个通用版本)中,添加了 Element.SetCompositeDiagram(),但这似乎也仅限于 COM API:逆向工程 eaapi.jar 没有发现相应的方法。

从这里开始,您似乎可以选择三种选择:

  1. 将问题报告给 Sparx Systems 并要求他们将相关方法添加到 Java API。
  2. 用 C# 重写您的代码以使用完整的 API。
  3. 使用未记录的Repository.Execute() 方法直接操作底层数据库。

一个元素的“复合性”由t_object.NType 列中的值8 表示,但是该列是重载的,也就是说它的值的解释也取决于其他列,而且没有记录。因此,如果您想要可维护性,这不是一个好的解决方案。

如果你想这样做,首先添加图表,然后执行以下操作:

repository.Execute("update t_object set NType = 8 where Object_ID = " +
                   element.ElementID);

我认为这可行,但我还没有测试过。如果元素中有多个图表,我认为第一个会被选中。但这一切本质上都是猜测,所以如果你想构建一些你知道会工作的东西,请切换到 C#。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多