Автоматизированный метод экспорта диаграмм Enterprise Architect?
-
10-07-2019 - |
Вопрос
Проблема: большая часть нашей документации по проектированию и архитектуре была создана и размещена в Enterprise Architect - для лучшего или хуже, так оно и есть. Эти документы хранятся в нашем репозитории subversion - что очень хорошо подходит для тех, кто их создает и обновляет - поскольку у нас есть лицензии на EA - но многие разработчики (как внутренние, так и внешние) работают над нашей базой кода и должны использование диаграмм, но не у всех есть лицензии EA. Р>
Плохое решение: мы могли бы вручную экспортировать документы EA в переносимый формат, а затем зарегистрировать их, но могут быть случаи, когда версия переносимого формата устарела с документом EA, поскольку она полагается на человека. выполните шаги для ручного преобразования.
Лучшее решение: мы искали метод для автоматизации преобразования. Это может быть выполнено как ловушка после фиксации или как часть нашей системы непрерывной интеграции. Часть, которую нам не хватает, это часть, которая позволяет нам автоматизировать преобразование. Есть идеи?
Решение
В примере кода я только что обнаружил функцию, которая будет делать именно то, что вы хотите. Но скрыто не очень полезным именем ProjectInterfaceExample :
option explicit
!INC Local Scripts.EAConstants-VBScript
'
' Examples of how to access and use the Project Interface.
'
' Related APIs
' =================================================================================
' Project Interface API - http://www.sparxsystems.com/uml_tool_guide/sdk_for_enterprise_architect/project_2.html
'
' Global reference to the project interface
dim projectInterface as EA.Project
sub ProjectInterfaceExample()
' Show the script output window
Repository.EnsureOutputVisible "Script"
Session.Output( "VBScript PROJECT INTERFACE EXAMPLE" )
Session.Output( "=======================================" )
set projectInterface = Repository.GetProjectInterface()
' Iterate through all model nodes
dim currentModel as EA.Package
for each currentModel in Repository.Models
' Iterate through all child packages and save out their diagrams
dim childPackage as EA.Package
for each childPackage in currentModel.Packages
DumpDiagrams childPackage
next
next
Session.Output( "Done!" )
end sub
'
' Recursively saves all diagrams under the provided package and its children
'
sub DumpDiagrams ( thePackage )
' Cast thePackage to EA.Package so we get intellisense
dim currentPackage as EA.Package
set currentPackage = thePackage
' Iterate through all diagrams in the current package
dim currentDiagram as EA.Diagram
for each currentDiagram in currentPackage.Diagrams
' Open the diagram
Repository.OpenDiagram( currentDiagram.DiagramID )
' Save and close the diagram
Session.Output( "Saving " & currentDiagram.Name )
projectInterface.SaveDiagramImageToFile "c:\\temp\\" + currentDiagram.Name + ".emf"
Repository.CloseDiagram( currentDiagram.DiagramID )
next
' Process child packages
dim childPackage as EA.Package
for each childPackage in currentPackage.Packages
DumpDiagrams childPackage
next
end sub
ProjectInterfaceExample
Возможно, вам придется немного его настроить (т.е. не записывать все в C: \ Temp), но это хорошее начало.
Другие советы
Я не знаком с этим продуктом, но на веб-сайте, на который вы ссылаетесь, упоминается интерфейс автоматизации. Это должно позволить вам управлять Enterprise Architect с помощью языка сценариев, такого как VBScript или JavaScript. Это может быть возможно для печати через этот интерфейс; если это так, вы можете установить драйвер принтера PDF (или распечатать на файл с помощью универсального драйвера принтера PostScript и используйте GhostScript для преобразования его в PDF. р>
У нас есть Enterprise Architect, и он прекрасно интегрирован с Word. Мы написали наше собственное приложение Wicket / Jetty WebApp, которое публикует ссылки на диаграммы EA в виде URL-адреса HTTP, который мы затем «вставляем и вставляем». в наши документы UCR (или что-нибудь еще). Веб-приложение отображает древовидную структуру ссылок, по одной для каждого пакета, а затем мы просто копируем ссылку в текстовый документ.
Это работает очень хорошо. Мы можем сделать столько изменений, сколько захотим в EA, а затем в документе Word просто нажмите CTRL + A, чтобы выбрать все, и нажмите F9, чтобы обновить все ссылки. К сожалению, я не написал код, поэтому не могу точно сказать, как он опубликован в EA. Я думаю, что есть некоторый Java-код, который просто опрашивает сервер EA и высасывает все, если он обнаруживает изменения.
VBScript - это действительно простая и быстрая возможность. Я разобрался с небольшим скриптом, который позволяет экспортировать диаграмму. Единственное, что вам нужно знать - это GUID.
Set MyRep = CreateObject("EA.Repository")
If NOT MyRep.OpenFile("D:\Repository.eap") Then
MsgBox("Error opening file")
WScript.Quit -1
End If
Set Project = MyRep.GetProjectInterface
My_Diagram_GUID = "{2256B231-99F6-4c78-9AB0-72E24486D578}"
'Vector export emf/wmf
Project.PutDiagramImageToFile My_Diagram_GUID,"D:\Test.emf",0
'Bitmap export png/bmp/...
Project.PutDiagramImageToFile My_Diagram_GUID,"D:\Test.png",1