Я работаю над очень большим проектом документации UML для моей компании. Мы пытаемся смоделировать существующую программу в Enterprise Architect, чтобы лучше ее документировать. Из-за размера приложения мы решили разбить диаграммы на отдельные пакеты в основном пакете (такие как GUI, GPS, Removable Media и т. Д.). Это прекрасно работает для отдельных диаграмм классов каждой части. Однако я хотел бы перетащить диаграммы классов из каждого пакета на основную диаграмму, чтобы показать, как они все соединяются как система.
Можно ли написать функцию сценариев, чтобы взять связанные диаграммы и автоматически связать их все так же, как это делает импорт кода разработки? Я заметил, что на последнем этапе импорта кода добавляются ассоциации и обобщения. Я подумал, что если Sparx сможет это сделать при импорте кода, я смогу потом связать их в своем мастер-документе. Есть идеи, как этого добиться?
Если это невозможно, есть ли способ связать созданные диаграммы из разработки кода с уже существующими в моих пакетах? Я думаю, что было бы полезно иметь возможность щелкнуть правой кнопкой мыши диаграмму классов и «найти в пакетах» из основного документа, чтобы увидеть больше деталей.
В основном вы будете создавать обзорную диаграмму и просто перетаскивать соответствующую диаграмму из браузера. Это предлагает поле выбора
где вы просто оставляете первый выбор Diagram Frame
, EA создаст новый объект с именем, предложенным по имени диаграммы (вы можете оставить это, но также и изменить его, если вам это нужно). Теперь перетаскиваемая диаграмма появится внутри именной рамки на обзорной диаграмме. Вы не можете масштабировать эту диаграмму, поэтому она будет иметь размер оригинальной плюс рамка вокруг нее.
Примечание: вы можете использовать Hyperlink
в приведенном выше диалоге, чтобы создать красивые и короткие ссылки между диаграммами для навигации.
Теперь для части сценариев. Я буду использовать мета-язык, но вы, вероятно, догадаетесь, как использовать его на предпочитаемом вами языке. Первым делом нужно найти обзорную диаграмму. Вы можете запросить его руководство диаграммы, щелкнув его правой кнопкой мыши в браузере и используя Copy/Copy Node GUID...
, Теперь с этим идентификатором вы можете найти его (пример руководства приведен ниже):
overview = rep.GetDiagramByGUID("{A006B95E-1237-4778-A339-D1B407C6FD5C}")
Далее нужно найти отдельные диаграммы, которые вы хотите показать в обзоре. Это зависит от вас, как их найти. В конце концов они будут в определенных местах в хранилище. Чтобы статически загрузить первую диаграмму в первом пакете в первом представлении первого корня, вы бы назвали
model = repository.Models.GetAt(0)
view = model.Packages.GetAt(0)
package1 = view.Packages.GetAt(0)
dia1 = package1.Diagrams.GetAt(0)
Скорее всего, вы будете использовать более умные способы итерации и поиска соответствующих диаграмм.
Теперь с этими объектами диаграммы вы можете создать рамку диаграммы. Это должно быть размещено где-то в пакете. Для простоты я использую package1
но вы в конечном итоге поместите их в пакет обзорной диаграммы.
frame = package1.Elements.AddNew(dia1.Name, "UMLDiagram")
frame.Update()
sql = "UPDATE t_object SET PDATA1=" + str(dia1.DiagramID) + " WHERE Object_ID=" + str(overview.diagramID
repository.Execute(sql)
Это вуду, я знаю. API не предлагает способ связать элемент UMLDiagram со ссылочной диаграммой. Так что это должно быть занесено в базу данных напрямую.
Наконец, вновь созданный объект кадра может быть помещен в обзорную диаграмму:
diagramObj = overview.DiagramObjects.AddNew("l=10;r=110;t=-20;b=-80","")
diagramObj.ElementID = frame.ElementID
diagramobj.Update()
Начиная с этого советника, координаты для оси y направлены в сторону отрицания сверху (l, r, t, b обозначают, угадайте). Советник расширит кадр до минимума выше указанного размера.
Чтобы увидеть результат, вам нужно закрыть / открыть обзорную диаграмму. Я оставлю это как упражнение для вас 🙂
Других решений пока нет …