2009-09-17 65 views
12

問題:很多我們的設計和體系結構文檔都是在Enterprise Architect中創建和維護的 - 無論好壞,都是如此。這些文檔存儲在我們的Subversion存儲庫中 - 對於創建和更新它們的人員來說,這非常合適 - 因爲我們擁有EA的許可證 - 但是許多開發人員(包括內部和外部)在我們的代碼庫工作並需要製作使用圖表,但並不都擁有EA許可證。導出Enterprise Architect圖表的自動化方法?

糟糕的解決方案:我們可以手動將EA文檔導出爲便攜式格式,然後檢查這些文檔,但是肯定有時候便攜式格式版本與EA文檔過時了,因爲它依賴於人類採取步驟手動轉換。

更好的解決方案:我們一直在尋找一種方法來自動化轉換。這可以作爲後提交鉤子或作爲我們持續集成系統的一部分運行。我們缺少的部分是允許我們自動化轉換的一部分。有任何想法嗎?

回答

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

我對此產品並不熟悉,但您鏈接到的網站提到了自動化界面。這應該允許您從腳本語言(如VBScript或JavaScript)控制Enterprise Architect。可以通過此界面打印;如果是的話,你可以使用一個通用的PostScript打印機驅動程序安裝PDF printer driver(或者打印到文件,並使用GhostScript將其轉換爲PDF。

1

我們有企業架構師,我們把它很好地集成與Word。我們寫我們自己Wicket/Jetty WebApp,發佈EA diragrams鏈接作爲HTTP URL,然後「插入&鏈接」到我們的UCR(或任何其他)文檔中。Web應用程序顯示一個樹狀結構鏈接,每個包一個,然後我們只需將鏈接複製到word文檔中即可

它的功能非常好,我們可以在EA中進行儘可能多的更改,然後在Word文檔中按CTRL + A選擇全部,然後按F9更新所有鏈接不幸的是我沒有w因爲我不能確切地告訴你EA是如何發佈的。我認爲有一些Java代碼只是輪詢EA服務器,如果它檢測到變化就會把所有東西都剔除。

+0

這很有意思,我想說的是,我們可以使用至少一些Java API。但是,我們並沒有運行EA服務器 - 只是獨立的應用程序。 – 2009-09-18 00:13:46

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 
+0

好的開始。但是,需要的是一次性導出所有圖的方法。應該可以使用An VBA腳本。 – Martin 2012-01-09 08:58:43

相關問題