<p>我刚刚测试过这个。为了加载XMI,您需要运行</p>
<pre><code>newPkgGUID = projectInterface.ImportPackageXMI(root.PackageGUID, XMISourcePath, 1, 0)
</code></pre>
<p>所以条带GUID为零!这将在不询问的情况下替换模型的内容。完成后,浏览器中的模型将折叠,所有内容都将被替换。做那种事时你应该小心</p>
<p>现在,如果您的导入包含一个根节点,您将被迫执行一些额外的工作。EA将根作为视图放置在空的新根下。不太好</p>
<p>作为一些解决方法,您可能首先读取XMI并修改其中的根GUID,使其与新模型相同。该GUID为(例如,在该导出中)</p>
<pre><code><XMI.content>
<UML:Model name="EA Model" xmi.id="MX_EAID_16B64057_C8E3_4697_A31B_3ABB87DB4D64">
<UML:Namespace.ownedElement>
<UML:Class name="EARootClass" xmi.id="EAID_11111111_5487_4080_A7F4_41526CB0AA00" isRoot="true" isLeaf="false" isAbstract="false"/>
<UML:Package name="Model" xmi.id="EAPK_16B64057_C8E3_4697_A31B_3ABB87DB4D64" isRoot="true" isLeaf="false" isAbstract="false" visibility="public">
</code></pre>
<p>在上面的最后一行(在XMI的最开始)。使用Python很容易做到。您只需要创建一个临时文件,以便在以后的导入中使用。还请注意,格式与本机EA GUID不同。因此,原始EA GUID应该是<code>{16B64057-C8E3-4697-A31B-3ABB87DB4D64}</code></p>
<hr/>
<p><strong>旧答案</strong></p>
<p>基本上,这是一个半生不熟的Sparx典型API。但是,您需要通过发出查询在包中查找目标GUID</p>
<pre><code>repository.SQLQuery("SELECT ea_guid FROM t_packages WHERE ea_guid = '%s'" % guid)
</code></pre>
<p>如果结果返回一行,您就知道目标alread存在,并且您已经做出相应的反应。这意味着您必须导入到找到的包中。你也可以做一个</p>
<pre><code>p = repository.getPackageByGUID(guid)
</code></pre>
<p>以确定正确的导入包</p>
<p>让我感到奇怪的是,您使用的是Strip GUID,在任何情况下,它都应该创建一个与您放置位置无关的导入的新副本。我认为如果选中了Strip guid,对话框不会弹出</p>
<p>注意:条带GUID意味着EA将为任何内容创建<em>新</em>元素。这是用于创建副本(如模式)。如果要恢复,则必须<strong>而不是<strong>启用条带GUID!这将使EA用该GUID替换现有元素(事实上,它有点复杂,但基本上就是这样)</p>