Enterprise Architectダイアグラムをエクスポートする自動化された方法?
-
10-07-2019 - |
質問
問題:多くの設計およびアーキテクチャのドキュメントは、 Enterprise Architect で作成および管理されています。さらに悪いことに、それはそうです。これらのドキュメントは、サブバージョンリポジトリに保存されます。これは、EAのライセンスがあるため、作成および更新する人にとっては非常にうまく機能しますが、コードベースで作業し、作成する必要がある開発者の多く(内部および外部)ダイアグラムを使用しますが、すべてがEAライセンスを持っているわけではありません。
悪い解決策:EAドキュメントを手動でポータブル形式にエクスポートしてからチェックインすることはできますが、ポータブル形式のバージョンが人間に依存しているため、EAドキュメントが古くなっている場合があります手動で変換する手順を実行します。
より良い解決策:変換を自動化する方法を探していました。これは、コミット後のフックとして、または継続的統合システムの一部として実行できます。不足している部分は、変換を自動化できる部分です。アイデアはありますか?
解決
サンプルコードで、私はちょうど関数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に書き込むわけではありません)が、良いスタートです。
他のヒント
私はこの製品に精通していませんが、リンク先のWebサイトにはオートメーションインターフェイスが記載されています。これにより、VBScriptやJavaScriptなどのスクリプト言語からEnterprise Architectを制御できます。このインターフェイスを介して印刷できる場合があります。その場合は、 PDFプリンタードライバー(または印刷してください)一般的なPostScriptプリンタードライバーを使用するファイルで、 GhostScript を使用してPDFに変換します。
Enterprise Architectがあり、Wordとうまく統合されています。 EAダイラグラムへのリンクをHTTP URLとして公開する独自のWicket / Jetty WebAppを作成し、それを「Insert& Link」; UCR(またはその他の)ドキュメントに追加します。 Webアプリは、各パッケージに1つずつ、リンクの構造のようなツリーを表示し、リンクをWordドキュメントにコピーします。
それは本当にうまくいきます。 EAで好きなだけ変更を加え、Word文書でCtrl + Aを押してすべてを選択し、F9を押してすべてのリンクを更新します。残念ながら、私はコードを書いていないので、EAからどのように公開されているかを正確に伝えることはできません。 EAサーバーをポーリングし、変更を検出するとすべてを吸い取るJavaコードがあると思います。
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