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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top