从一个正在运行的EA实例和一个打开的空项目(只包含一个空的根节点)开始,我试图编写一个简单的脚本,从.xmi文件导入一个完整的EA项目。我知道使用GUI可以很容易地完成,但我需要将该功能用于另一个问题
当我用GUI导入EA项目的.xmi时,我收到一条消息说
'XMI包含一个可以放置在项目浏览器根级别的模型。按“是”以根模型导入,按“否”以放置在所选包的下
并且可以选择这样做。(通过将项目从EA导出到.xmi,创建了.xmi文件)
当我运行脚本(见下文)时,它似乎选择了其中一个选项,这取决于我不知道的内容。主要是将导入项目的根节点置于已存在的空根节点下的节点。因此,项目结构混乱不堪
以下是脚本:
repo = eaApp.Repository
root = repo.Models[0]
projectInterface = repo.GetProjectInterface()
newPkgGUID = projectInterface.ImportPackageXMI(root.PackageGUID, XMISourcePath, 1, 1) # actual import
我基本上想做的是,我总是想将导入项目的根节点放在根级别,但似乎无法访问从GUI操作时弹出的对话框
对这个问题有什么建议吗
脚本是用Python编写的
要做到这一点,您可能需要一些变通方法
Packages
集合中获取新包ParentID
设置为0Update()
您的新软件包RefreshModelView(0)
以在项目浏览器中查看新模型结构李>我刚刚测试过这个。为了加载XMI,您需要运行
所以条带GUID为零!这将在不询问的情况下替换模型的内容。完成后,浏览器中的模型将折叠,所有内容都将被替换。做那种事时你应该小心
现在,如果您的导入包含一个根节点,您将被迫执行一些额外的工作。EA将根作为视图放置在空的新根下。不太好
作为一些解决方法,您可能首先读取XMI并修改其中的根GUID,使其与新模型相同。该GUID为(例如,在该导出中)
在上面的最后一行(在XMI的最开始)。使用Python很容易做到。您只需要创建一个临时文件,以便在以后的导入中使用。还请注意,格式与本机EA GUID不同。因此,原始EA GUID应该是
{16B64057-C8E3-4697-A31B-3ABB87DB4D64}
旧答案
基本上,这是一个半生不熟的Sparx典型API。但是,您需要通过发出查询在包中查找目标GUID
如果结果返回一行,您就知道目标alread存在,并且您已经做出相应的反应。这意味着您必须导入到找到的包中。你也可以做一个
以确定正确的导入包
让我感到奇怪的是,您使用的是Strip GUID,在任何情况下,它都应该创建一个与您放置位置无关的导入的新副本。我认为如果选中了Strip guid,对话框不会弹出
注意:条带GUID意味着EA将为任何内容创建新元素。这是用于创建副本(如模式)。如果要恢复,则必须而不是启用条带GUID!这将使EA用该GUID替换现有元素(事实上,它有点复杂,但基本上就是这样)
相关问题 更多 >
编程相关推荐