问题:我们的许多设计和架构文档都是在Enterprise Architect中创建和维护的 - 无论好坏,就是这样。这些文档存储在我们的subversion存储库中 - 这对于创建和更新它们的人来说效果非常好 - 因为我们拥有EA的许可证 - 但许多开发人员(内部和外部)都在我们的代码库上工作并且需要制作使用图表,但都没有EA许可证。
糟糕的解决方案:我们可以手动将EA文档导出为可移植格式,然后检查它们,但是有时候便携式格式版本与EA文档已经过时,因为它依赖于人类来采取步骤手动转换。
更好的解决方案:我们一直在寻找一种自动化转换的方法。这可以作为提交后挂钩或作为我们的持续集成系统的一部分运行。我们缺少的部分是允许我们自动化转换的部分。有什么想法吗?
答案 0 :(得分:8)
在示例代码中,我刚刚发现了一个函数,它将完全按照您的要求执行。但隐藏在 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 :(得分:1)
我不熟悉此产品,但您链接的网站提到了自动化界面。这应该允许您从脚本语言(如VBScript或JavaScript)控制Enterprise Architect。可以通过这个界面打印;如果是这样,您可以安装PDF printer driver(或使用通用PostScript打印机驱动程序打印到文件,并使用GhostScript将其转换为PDF。
答案 2 :(得分:1)
我们有Enterprise Architect,我们很好地与Word集成。我们编写了自己的Wicket / Jetty WebApp,它将EA diragrams的链接发布为HTTP URL,然后我们将其“插入并链接”到我们的UCR(或其他任何)文档中。 Web应用程序显示树状链接结构,每个包一个,然后我们只需将链接复制到word文档中。
效果很好。我们可以在EA中进行尽可能多的更改,然后在Word文档中只需按CTRL + A选择全部,然后按F9更新所有链接。不幸的是我没有编写代码,所以我无法确切地告诉你它是如何从EA发布的。我认为有一些Java代码只是轮询EA服务器并在检测到变化时将所有内容都删掉。
答案 3 :(得分: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