【问题标题】:Automated method to export Enterprise Architect diagrams?导出 Enterprise Architect 图表的自动化方法?
【发布时间】:2009-09-17 21:39:47
【问题描述】:

问题:我们的许多设计和架构文档都是在Enterprise Architect 中创建和维护的——无论好坏,就是这样。这些文档存储在我们的 subversion 存储库中——这对于创建和更新它们的人来说非常有效——因为我们有 EA 的许可证——但是许多在我们的代码库上工作并需要制作的开发人员(内部和外部)使用图表,但并非都拥有 EA 许可证。

糟糕的解决方案:我们可以手动将 EA 文档导出为可移植格式,然后将其签入,但有时可移植格式版本与 EA 文档已过时,因为它依赖于人工采取步骤手动转换。

更好的解决方案:我们一直在寻找一种自动化转换的方法。这可以作为提交后挂钩或作为我们持续集成系统的一部分运行。我们缺少的部分是允许我们自动转换的部分。有什么想法吗?

【问题讨论】:

    标签: enterprise-architect


    【解决方案1】:

    在示例代码中,我刚刚发现了一个函数 whish 将完全按照您的意愿进行操作。但是被 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),但这是一个好的开始。

    【讨论】:

      【解决方案2】:

      我不熟悉此产品,但您链接到的网站提到了自动化界面。这应该允许您从脚本语言(如 VBScript 或 JavaScript)控制 Enterprise Architect。或许可以通过该界面进行打印;如果是这样,您可以安装 PDF printer driver(或使用通用 PostScript 打印机驱动程序打印到文件并使用 GhostScript 将其转换为 PDF。

      【讨论】:

        【解决方案3】:

        我们有 Enterprise Architect,我们将它与 Word 很好地集成在一起。我们编写了自己的 Wicket/Jetty WebApp,它将指向 EA 图表的链接作为 HTTP URL 发布,然后我们将其“插入和链接”到我们的 UCR(或任何其他)文档中。 Web 应用程序显示一个树状的链接结构,每个包一个,然后我们只需将链接复制到 word 文档中。

        效果很好。我们可以在 EA 中进行尽可能多的更改,然后在 Word 文档中只需按 CTRL+A 全选并按 F9 更新所有链接。不幸的是,我没有编写代码,所以我无法准确告诉您它是如何从 EA 发布的。我认为有一些 Java 代码只是轮询 EA 服务器并在检测到更改时吸出所有内容。

        【讨论】:

        • 这很有趣,我想要点是至少有一些我们可以使用的 Java API。但是,我们没有运行 EA 服务器 - 只是独立的应用程序。
        【解决方案4】:

        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
        

        【讨论】:

        • 不错的开始。但是需要一种一次性导出所有图表的方法。应该可以使用 VBA 脚本。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多