包关系存储在哪里?

时间:2016-04-17 11:35:04

标签: dependencies relationship packages enterprise-architect

我想测量EA包在模型中其他包中的依赖程度。

因此我循环t_connector以识别我的包中的元素是源的记录,而目标是来自其他包的元素。

一切都适用于元素之间的关系,但包之间的关系是不同的:
我的包中的子包有时依赖于模型中的外部包。 很遗憾,t_connector不存储此数据!
那么,包关系存储在哪里?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

所有连接器都存储在t_connector表中。但是,t_connector.Start_Object_IDt_connector.End_Object_ID中的引用引用了t_object.Object_ID - 而不是t_package.Package_ID

在EA数据模型中,UML包具有双重表示:t_package中的一行和t_object中的一行,t_object.Object_Type = 'Package't_object.PDATA1 = t_package.Package_ID。 (请注意,t_object.PDATA列是字符串。)

严格地说,只有元素在EA中有连接符。但API中的Package类隐藏了这一点,并允许您使用Package.Connectors集合循环遍历包元素的连接器,就好像它们属于包本身一样 - 但是如果你看Connector.ClientIDConnector.SupplierID,你会发现两个人都没有匹配你正在循环的连接器的Package.PackageID

如果连接器从当前包运行到某个其他包,那么为了检索连接器的另一端,您需要做的是查询存储库以查找元素 - 而不是package - 使用连接器的客户端ID,如

connectedPackageElement = Repository.GetElementByID(connector.ClientID)

好消息是包本身及其包元素都具有相同的名称。但是如果你需要从包中提取更多信息,你需要发出另一个电话,如

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

因为你说过你是"循环过来"连接器,我假设您正在使用API​​而不是发出SQL查询。但结构是一样的; t_object对应Element班级,t_package对应Package班级,t_connector对应Connector班级。