Dependencies 包关系存储在哪里?

Dependencies 包关系存储在哪里?,dependencies,relationship,packages,enterprise-architect,Dependencies,Relationship,Packages,Enterprise Architect,我想测量我的EA包在模型中的其他包中的依赖性的数量 因此,我在t_连接器上循环,以识别记录,其中来自我的包的元素是源,而目标是来自其他包的元素 所有元素之间的关系都很好,但包之间的关系不同: 我的包中的子包有时依赖于模型中的外部包。不幸的是,t_连接器不存储此数据! 那么,包关系存储在何处?它们存储在层次结构中。t_package.parent_id将子包链接到其父包。仅当显式创建连接器时,才会创建连接器。如果是,连接器源/目标链接包元素的id。所有连接器都存储在t_连接器表中。但是,t_con

我想测量我的EA包在模型中的其他包中的依赖性的数量

因此,我在t_连接器上循环,以识别记录,其中来自我的包的元素是源,而目标是来自其他包的元素

所有元素之间的关系都很好,但包之间的关系不同: 我的包中的子包有时依赖于模型中的外部包。不幸的是,t_连接器不存储此数据!
那么,包关系存储在何处?

它们存储在层次结构中。t_package.parent_id将子包链接到其父包。仅当显式创建连接器时,才会创建连接器。如果是,连接器源/目标链接包元素的id。

所有连接器都存储在t_连接器表中。但是,t_connector.Start_Object_ID和t_connector.End_Object_ID中的引用是指t_Object.Object_ID,而不是指t_package.package_ID

在EA数据模型中,UML包具有双重表示:t_包中有一行,t_对象中有一行,t_对象.object_Type='package',t_对象.PDATA1=t_包.package_ID。请注意,t_对象.PDATA列是字符串

严格来说,EA中只有元素有连接器。但是API中的Package类隐藏了这一点,并允许您使用Package.connectors集合在Package元素的连接器上循环,就像它们属于包本身一样-但是如果查看Connector.ClientID和Connector.SupplierID,您会发现两者都不匹配其连接器所在包的Package.PackageID你在绕圈子

如果连接器从当前包运行到其他包,那么要检索连接器的另一端,需要做的是使用连接器的客户端ID查询存储库中的元素(而不是包),如中所示

connectedPackageElement = Repository.GetElementByID(connector.ClientID)
好消息是包本身及其包元素都具有相同的名称。但是如果您需要从包中获取更多信息,则需要发出另一个调用,如

connectedPackage = Repository.GetPackageByID(connectedPackageElement.MiscData(0)

既然您说过要在连接器上循环,我就假设您使用的是API,而不是SQL查询。但结构是相同的;t_对象对应于元素类,t_package对应于package类,t_connector对应于connector类。

外部包是什么意思?@Uffe,外部包是模型中的其他包,不包含所选包的层次结构。谢谢!只是澄清一下:有两个选项可以检索包关系信息:通过t_连接器内部连接到t_包。或:通过package.connectors内部连接到t_对象。对吗?不,你不能直接加入t_包。你必须去t_connector.Start/End_Object_ID=>t_Object.Object_ID=>t_Object.PDATA1=>t_package.package_ID。如果t_Object.Object_Type='package',你只能做最后两个。我有点困惑:我手里有一个包。首先,我使用PDATA从t_对象获取其对应的元素。然后我搜索引用此元素的t_连接器。有道理吗?是的。这些连接器的另一端还引用了t_对象行,这些行可能有也可能没有object_Type='Package',在这种情况下,您可以找到如上所述的包。