包关系存储在哪里?

Where are package relations stored?

我想测量模型中其他包中我的 EA 包的依赖项数量。

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

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

它们存储在层次结构中。 t_package.parent_id links 子包到它们的父包。仅当您明确创建连接器时才会创建连接器。如果是这样,连接器 source/target link 包元素的 ID。

所有连接器都存储在 t_connector table 中。但是,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 class 隐藏了这一点,并允许您遍历包 element 的连接器,就好像它们属于包一样本身使用 Package.Connectors 集合——但是如果你查看 Connector.ClientIDConnector.SupplierID 你会发现两者都不匹配你正在循环其连接器的包的 Package.PackageID结束了。

如果连接器从当前包运行到其他包,您需要做的是检索存储库中的 元素 元素 -- 不是包 -- 使用连接器的客户端 ID,如

connectedPackageElement = Repository.GetElementByID(connector.ClientID)

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

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

既然你说你是 "looping over" 连接器,我假设你使用的是 API 而不是发出 SQL 查询。但是结构是一样的; t_object对应Elementclass,t_package对应Packageclass,t_connector对应Connectorclass.