Enterprise Architectダイアグラムをエクスポートする自動化された方法?

StackOverflow https://stackoverflow.com/questions/1441479

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top