Все разъемы хранятся в таблице t_connector
. Однако ссылки в 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. Но класс Package
в API скрывает это и позволяет вам контактировать с коннекторами пакета элемента, как если бы они принадлежали к самому пакету с использованием коллекции Package.Connectors
, но если вы посмотрите на и Connector.SupplierID
, вы увидите, что ни один из них не соответствует Package.PackageID
пакета, разъемы которого вы перебираете.
Если коннектор работает с текущим пакетом на какой-либо другой пакет, то, что вам нужно сделать для извлечения другого конца соединителя, является запрос к репозиторию для элемента - не пакет - с идентификатор клиента соединителя, как в
connectedPackageElement = Repository.GetElementByID(connector.ClientID)
Хорошей новостью является то, что сам пакет и его элемент пакета имеют одинаковое имя. Но если вам нужно тянуть больше информации из пакета, вам необходимо оформить еще один вызов, как
connectedPackage = Repository.GetPackageByID(connectedPackageElement.MiscData(0)
Поскольку вы сказали, что вы были «зацикливание над» разъемы, я предполагал, что вы с помощью API, а не выдавать SQL-запросы. Но структуры одинаковы; t_object
соответствует классу Element
, t_package
классу Package
и t_connector
классу Connector
.
Что вы подразумеваете под внешними пакетами? – Uffe
@Uffe. Внешние пакеты - это другие пакеты в модели, не связанные с иерархией выбранного пакета. – user3165438