2

Я хотел бы измерить количество зависимостей моего пакета EA в других пакетах модели.Где хранятся отношения пакета?

Поэтому я зацикливаюсь на t_connector, чтобы идентифицировать записи, в которых элементы из моего пакета являются источником, а адресаты - это элементы из других пакетов.

Все отлично работает с отношениями между элементами, но отношения между пакетами различны:
Суб пакеты в моем пакете иногда зависят от внешних пакетов в модели. К сожалению, t_connector не сохраняет эти данные!
Где хранятся отношения пакета?

+0

Что вы подразумеваете под внешними пакетами? – Uffe

+0

@Uffe. Внешние пакеты - это другие пакеты в модели, не связанные с иерархией выбранного пакета. – user3165438

ответ

2

Все разъемы хранятся в таблице 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.

+0

Спасибо! Просто уточнить: есть два варианта для получения информации о соотношении пакетов: через t_connector (внутреннее соединение с t_package). или: через package.connectors (внутреннее соединение с t_object). Верный? – user3165438

+0

Нет, вы не можете напрямую присоединиться к t_package. Вы должны пойти t_connector.Start/End_Object_ID => t_object.Object_ID => t_object.PDATA1 => t_package.Package_ID. И вы можете делать только последние два, если t_object.Object_Type = 'Package'. – Uffe

+0

Я немного смущен: у меня есть пакет в руке. Сначала я получаю свой соответствующий элемент из t_object (используя PDATA). Затем я ищу t_connectors, ссылающиеся на этот элемент. Имеет смысл? – user3165438

2

Они хранятся в иерархии. t_package.parent_id связывает дочерние пакеты с родителями. Коннектор создается, только если вы его явно создаете. Если это так, источник/цель соединителя связывает идентификатор элемента пакета.

Смежные вопросы