在使用Enterprise Architect API时,我注意到当您将EA项目导出到XMI时,几种不同类型的元素会得到一个名为ea_localid
的属性。这意味着您将在XMI中找到一个以ea_localid
为属性的标记。该属性似乎用于引用连接元素的源和目标(至少这对"转换"有效,因为我们正在处理状态机图(。
到目前为止,一切都很好。现在,我打算使用的问题是,每次导入和导出时,这些值似乎都是新分发的。编辑:
这意味着在导出项目后,重新导入项目,不做任何更改,然后再次导出,将为生成的XMI文档提供一组不同的ea_localid
值。此外,一些曾经属于一个元素的值现在似乎可以用于完全不同的元素。
有人知道分配机制吗?或者,更好的是,一种模仿它的方式?或者重置所有计数器的方法?
据我所见,通常似乎有不同类别的元素,在这些类别中,通过计数+1生成下一个元素的新ea_localid
。所以第一个值为1,然后下一个值为2,依此类推
我的目标是进行"往返"(XMI->项目->XMI…(,并始终获得相同的ea_localid
值,可能是在导出后编辑XMI文档。如有任何帮助或建议,我们将不胜感激。干杯
ea_localid
表示元素的elementID
(或属性等的AttributeID
(
在EA中;事物;有两个身份证。一个数字ID和一个GUID。
在大多数关系中,数字ID(例如t_object.object_ID(被用作键,但这并不稳定。
像导入XMI文件这样的事情可以重置数字ID。这就解释了ea_localID
发生变化的原因。
如果您正在寻找一个稳定的ID,您应该使用GUID。即使在导出和导入到其他型号后,这一款也保证保持不变。(只要导入时不设置Strip GUIDs
标志(
在xmi文件中,您将在属性xmi.id
中找到那些稳定的id例如
<UML:Class name="Aannemer" xmi.id="EAID_04A526DF_7F07_4475_8E65_16D2D88CEECD" visibility="public" namespace="EAPK_0345C8A9_9E8F_42c5_9931_CB842233B11B" isRoot="false" isLeaf="false" isAbstract="false" isActive="false">
该值对应于每个表中的ea_guid
列。
因此,经过一些测试,我发现对于前面提到的往返(xmi->导入EA->xmi(并始终获得完全相同的文档的目标,最简单的解决方案是。。。
在xmi上运行一个过滤器,该过滤器只删除包含ea_localid
、ea_sourceID
(原文如此!(和ea_targetID
值的所有节点。
在重新导入时,EA只会为它们分配新的值。有关"转换"的源和目标以及其他连接元素的信息也与GUID一起存储,因此不会丢失信息。