Автоматизированный метод для экспорта диаграмм Enterprise Architect?

Проблема: большая часть нашей документации по дизайну и архитектуре была создана и поддерживается в Enterprise Architect - к лучшему или худшему, вот как это делается, Эти документы хранятся в нашем репозитории subversion, который хорошо подходит для людей, которые создают и обновляют их, поскольку у нас есть лицензии для EA, но многие из разработчиков (как внутренних, так и внешних), которые работают на нашей кодовой базе и должны сделать использование диаграмм, но не все имеют лицензии EA.

Плохое решение. Мы могли вручную экспортировать документы EA в переносимый формат, а затем проверить их, но неизбежно будут случаи, когда версия портативного формата устарела с документом EA, поскольку она полагается на человека выполните шаги для преобразования вручную.

Лучшее решение: мы искали способ автоматизации преобразования. Это можно запустить как крюк после фиксации или как часть нашей системы непрерывной интеграции. Нам не хватает части, которая позволяет нам автоматизировать преобразование. Любые идеи?

Ответ 1

В примере кода я только что открыл функцию, которая сделает то, что вы хотите. Но спрятанное не очень полезным именем 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

Возможно, вам придется настроить его на litte (i.E. не записывать все в C:\Temp), но это хороший старт.

Ответ 2

Я не знаком с этим продуктом, но на веб-сайте, на который вы ссылаетесь, упоминается интерфейс автоматизации. Это должно позволить вам контролировать Enterprise Architect с языка сценариев, такого как VBScript или JavaScript. Возможно, это можно будет распечатать через этот интерфейс; Если это так, вы можете установить драйвер принтера PDF (или распечатать файл с помощью общего драйвера принтера PostScript и использовать GhostScript, чтобы преобразовать его в PDF.

Ответ 3

У нас есть Enterprise Architect, и у нас он хорошо интегрирован с Word. Мы написали собственный Wicket/Jetty WebApp, который публикует ссылки на EA diragrams в качестве URL-адреса HTTP, которые мы затем "вставляем и добавляем" в наши документы UCR (или что-то еще). Веб-приложение отображает дерево как структуру ссылок, по одному для каждого пакета, а затем мы просто копируем ссылку в документ слова.

Это работает очень хорошо. Мы можем внести столько изменений, сколько нам нравится в EA, а затем в документе Word просто перейдите CTRL + A, чтобы выбрать все, и нажмите F9, чтобы обновить все ссылки. К сожалению, я не написал код, поэтому не могу точно сказать, как он опубликован в EA. Я думаю, что есть какой-то Java-код, который просто проверяет сервер EA и высасывает все, если обнаруживает изменения.

Ответ 4

VBScript - это действительно легкая и быстрая возможность. Я вычислил небольшой script, который позволяет экспортировать диаграмму. Единственное, что вам нужно знать, это 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