Python 如何通过脚本从XMI正确导入完整的企业架构师项目?
从一个正在运行的EA实例和一个打开的空项目(只包含一个空的根节点)开始,我试图编写一个简单的脚本,从.xmi文件导入一个完整的EA项目。我知道使用GUI可以很容易地完成,但我需要将该功能用于另一个问题 当我用GUI导入EA项目的.xmi时,我收到一条消息说 'XMI包含一个可以放置在项目浏览器根级别的模型。按“是”以根模型导入,按“否”以放置在所选包的下 并且可以选择这样做。(通过将项目从EA导出到.xmi,创建了.xmi文件) 当我运行脚本(见下文)时,它似乎选择了其中一个选项,这取决于我不知道的内容。主要是将导入项目的根节点置于已存在的空根节点下的节点。因此,项目结构混乱不堪 以下是脚本:Python 如何通过脚本从XMI正确导入完整的企业架构师项目?,python,xml,scripting,enterprise-architect,Python,Xml,Scripting,Enterprise Architect,从一个正在运行的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编写的。我刚刚测试了这个。为了加载XMI,您需要运行
newPkgGUID = projectInterface.ImportPackageXMI(root.PackageGUID, XMISourcePath, 1, 0)
所以条带GUID为零!这将在不询问的情况下替换模型的内容。完成后,浏览器中的模型将折叠,所有内容都将被替换。做那种事时你应该小心
现在,如果您的导入包含一个根节点,您将被迫执行一些额外的工作。EA将根作为视图放置在空的新根下。不太好
作为一些解决方法,您可能首先读取XMI并修改其中的根GUID,使其与新模型相同。该GUID为(例如,在该导出中)
如果结果返回一行,您就知道目标alread存在,并且您已经做出相应的反应。这意味着您必须导入到找到的包中。你也可以做一个
p = repository.getPackageByGUID(guid)
以确定正确的导入包
让我感到奇怪的是,您使用的是Strip GUID,在任何情况下,它都应该创建一个与您放置位置无关的导入的新副本。我认为如果选中了Strip guid,对话框不会弹出
注意:条带GUID意味着EA将为任何内容创建新元素。这是用于创建副本(如模式)。如果要恢复,则必须而不是启用条带GUID!这将使EA使用该GUID替换现有元素(事实上,这有点复杂,但基本上就是这样)。您可能需要一些变通方法来完成此操作
- 创建一个临时包以在其中进行导入
- 在这个临时包中导入您的xmi文件
- 导入后,在临时包
集合中获取新包Packages
- 将新包的父ID设置为0
您的新软件包Update()
以在项目浏览器中查看新模型结构刷新模型视图(0)
repository.SQLQuery("SELECT ea_guid FROM t_packages WHERE ea_guid = '%s'" % guid)
p = repository.getPackageByGUID(guid)