自动化方法导出Enterprise Architect图表?

13
问题:我们的许多设计和架构文档都是在Enterprise Architect中创建和维护的 - 不管好坏,这就是现实。这些文档存储在我们的子版本库中 - 对于创建和更新它们的人来说非常方便 - 因为我们有EA许可证 - 但许多开发人员(内部和外部)需要使用图表,但并没有EA许可证。
不良解决方案:我们可以手动将EA文档导出为便携式格式,然后进行检查,但由于它依赖于人工转换,便携式格式版本肯定会过时。
更好的解决方案:我们一直在寻找一种自动化转换的方法。这可以作为提交后钩子或连续集成系统的一部分运行。我们缺少的部分是允许我们自动化转换的部分。有什么想法?
4个回答

9
我刚刚发现了一个函数,它可以完全满足你的要求。但是它的名字不太有帮助,叫做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),但这是一个很好的开始。


1

我不熟悉这个产品,但你提供的网站提到了一个自动化接口。这应该允许你使用脚本语言(如VBScript或JavaScript)控制Enterprise Architect。如果可能的话,你可以通过这个接口进行打印;如果是这样的话,你可以安装PDF打印机驱动程序(或使用通用的PostScript打印机驱动程序打印到文件,然后使用GhostScript将其转换为PDF格式。


1
我们有Enterprise Architect,并且已经很好地与Word集成了。我们编写了自己的Wicket/Jetty WebApp,将EA图表作为HTTP URL发布链接,然后将其“插入和链接”到我们的UCR(或任何其他)文档中。Web应用程序显示链接的树形结构,每个包都有一个链接,然后我们只需将链接复制到Word文档中即可。
它运行得非常好。我们可以在EA中进行任意更改,然后在Word文档中只需按CTRL+A选择所有内容,然后按F9更新所有链接。不幸的是,我没有编写代码,所以无法告诉您它是如何从EA发布的。我认为有一些Java代码只需轮询EA服务器并在检测到更改时提取所有内容。

这很有趣,我想要的结论是我们至少可以使用一些Java API。然而,我们没有运行EA服务器 - 只是独立应用程序。 - Shane C. Mason

1

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

不错的开始。但需要的是一种批量导出所有图表的方法。这可以使用An VBA脚本实现。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接