13

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

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

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

4

4 回答 4

9

在示例代码中,我刚刚发现了一个函数 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

您可能需要稍微微调一下(iE 不会将所有内容都写入 C:\Temp),但这是一个好的开始。

于 2012-02-02T10:43:35.230 回答
1

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

于 2009-09-17T22:12:38.290 回答
1

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

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

于 2009-09-17T22:17:05.887 回答
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
于 2011-07-28T11:48:48.953 回答