Metodo automatizzato per esportare i diagrammi di Enterprise Architect?
-
10-07-2019 - |
Domanda
Problema: molta documentazione di progettazione e architettura è stata creata e gestita in Enterprise Architect - in meglio o peggio, è così. Questi documenti sono archiviati nel nostro repository di sovversione - che funziona abbastanza bene per le persone che li creano e li aggiornano - dal momento che abbiamo licenze per EA - ma molti degli sviluppatori (sia interni che esterni) che lavorano sul nostro codice e devono fare uso degli schemi ma non tutti hanno le licenze EA.
Soluzione scadente: potremmo esportare manualmente i documenti EA in un formato portatile e quindi archiviarli, ma ci sono sicuramente momenti in cui la versione in formato portatile non è aggiornata con il documento EA poiché si basa sull'essere umano per fai i passaggi per convertire manualmente.
Soluzione migliore: abbiamo cercato un metodo per automatizzare la conversione. Questo potrebbe essere eseguito come hook post-commit o come parte del nostro sistema di integrazione continua. La parte che ci manca è il pezzo che ci consente di automatizzare la conversione. Qualche idea?
Soluzione
Nel codice di esempio ho appena scoperto una funzione che farà esattamente quello che vuoi. Ma nascosto dal nome non così utile di 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
Potrebbe essere necessario perfezionarlo in un litte (cioè non scrivere tutto in C: \ Temp) ma è un buon inizio.
Altri suggerimenti
Non ho familiarità con questo prodotto ma il sito Web a cui ti colleghi menziona un'interfaccia di automazione. Ciò dovrebbe consentire di controllare Enterprise Architect da un linguaggio di scripting come VBScript o JavaScript. Potrebbe essere possibile stampare tramite questa interfaccia; in tal caso, è possibile installare un driver della stampante PDF (o stampare su un file che utilizza un driver di stampante PostScript generico e utilizza GhostScript per convertirlo in PDF.
Abbiamo Enterprise Architect e l'abbiamo ben integrato con Word. Abbiamo scritto la nostra WebApp Wicket / Jetty che pubblica collegamenti ai diragrammi EA come un URL HTTP che quindi "inseriamo & amp; Link". nei nostri documenti UCR (o qualsiasi altra cosa). L'app Web visualizza un albero come una struttura di collegamenti, uno per ciascun pacchetto e quindi copiamo semplicemente il collegamento nel documento word.
Funziona davvero bene. Possiamo apportare tutte le modifiche che vogliamo in EA e quindi nel documento di Word basta andare CTRL + A per selezionare tutto e premere F9 per aggiornare tutti i collegamenti. Purtroppo non ho scritto il codice, quindi non posso dirti esattamente come è stato pubblicato da EA. Penso che ci sia del codice Java che esegue il polling del server EA e succhia tutto se rileva modifiche.
VBScript è davvero una possibilità facile e veloce. Ho capito un piccolo script che consente di esportare un diagramma. L'unica cosa che devi sapere è 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