代码之家  ›  专栏  ›  技术社区  ›  Shane C. Mason

导出企业架构图的自动化方法?

  •  12
  • Shane C. Mason  · 技术社区  · 15 年前

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

    糟糕的解决方案:我们可以手动将EA文档导出到可移植格式,然后签入,但由于它依赖于人类采取手动转换步骤,因此在某些时候,可移植格式版本会与EA文档一起过期。

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

    4 回复  |  直到 11 年前
        1
  •  8
  •   Martin    12 年前

    在示例代码中,我刚刚发现了一个函数,它可以完全满足您的需要。但隐藏在不那么有用的名字 项目接口示例 :

    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
  •  1
  •   Ken Keenan    15 年前

    我不熟悉这个产品,但你链接的网站提到了一个自动化界面。这将允许您从脚本语言(如vbscript或javascript)控制企业架构师。可以通过此接口打印;如果可以,可以安装 PDF printer driver (或使用通用PostScript打印机驱动程序打印到文件并使用 GhostScript 转换成PDF格式。

        3
  •  1
  •   Richard Perfect    15 年前

    我们有一个企业架构师,它与Word很好地集成在一起。我们编写了自己的wicket/jetty webapp,将指向ea diragrams的链接作为HTTP URL发布,然后将其“插入”到UCR(或任何其他)文档中。Web应用程序显示了一个类似树的链接结构,每个包一个,然后我们将链接复制到Word文档中。

    它真的很管用。我们可以在ea中进行尽可能多的更改,然后在Word文档中,只需按ctrl+a选择“全部”,然后按F9更新所有链接。不幸的是,我没有编写代码,所以我不能确切地告诉你它是如何从EA发布的。我认为有一些Java代码,只是轮询EA服务器,如果发现变化,就把所有东西都吸出来。

        4
  •  1
  •   Robert    13 年前

    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