包关系存储在哪里?
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_ID
和 t_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.ClientID
和 Connector.SupplierID
你会发现两者都不匹配你正在循环其连接器的包的 Package.PackageID
结束了。
如果连接器从当前包运行到其他包,您需要做的是检索存储库中的 元素 元素 -- 不是包 -- 使用连接器的客户端 ID,如
connectedPackageElement = Repository.GetElementByID(connector.ClientID)
好消息是包本身及其包元素都具有相同的名称。但是,如果您需要从包中提取更多信息,则需要发出另一个调用,例如
connectedPackage = Repository.GetPackageByID(connectedPackageElement.MiscData(0)
既然你说你是 "looping over" 连接器,我假设你使用的是 API 而不是发出 SQL 查询。但是结构是一样的; t_object
对应Element
class,t_package
对应Package
class,t_connector
对应Connector
class.
我想测量模型中其他包中我的 EA 包的依赖项数量。
因此,我循环 t_connector
来识别记录,其中我的包中的元素是源,目标是其他包中的元素。
所有元素之间的关系都很好,但包之间的关系不同:
我的包中的子包有时依赖于模型中的外部包。 很遗憾,t_connector 不存储此数据!
那么,包关系存储在哪里?
它们存储在层次结构中。 t_package.parent_id links 子包到它们的父包。仅当您明确创建连接器时才会创建连接器。如果是这样,连接器 source/target link 包元素的 ID。
所有连接器都存储在 t_connector
table 中。但是,t_connector.Start_Object_ID
和 t_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.ClientID
和 Connector.SupplierID
你会发现两者都不匹配你正在循环其连接器的包的 Package.PackageID
结束了。
如果连接器从当前包运行到其他包,您需要做的是检索存储库中的 元素 元素 -- 不是包 -- 使用连接器的客户端 ID,如
connectedPackageElement = Repository.GetElementByID(connector.ClientID)
好消息是包本身及其包元素都具有相同的名称。但是,如果您需要从包中提取更多信息,则需要发出另一个调用,例如
connectedPackage = Repository.GetPackageByID(connectedPackageElement.MiscData(0)
既然你说你是 "looping over" 连接器,我假设你使用的是 API 而不是发出 SQL 查询。但是结构是一样的; t_object
对应Element
class,t_package
对应Package
class,t_connector
对应Connector
class.