Question

Problème: une grande partie de notre documentation de conception et d’architecture a été créée et gérée dans Enterprise Architect - pour le meilleur ou pour le meilleur pire, c'est comme ça. Ces documents sont stockés dans notre référentiel de subversion - ce qui convient assez bien aux personnes qui les créent et les mettent à jour - car nous avons des licences pour EA - mais beaucoup de développeurs (internes et externes) qui travaillent sur notre base de code et doivent créer utilisation des diagrammes mais n’ont pas tous les licences EA.

Mauvaise solution: nous pourrions exporter manuellement les documents EA dans un format portable, puis les archiver, mais la version du format portable ne correspondra pas forcément à la date du document EA, car elle repose sur la suivez les étapes pour convertir manuellement.

Meilleure solution: nous recherchions une méthode pour automatiser la conversion. Cela peut être exécuté en tant que hook post-commit ou dans le cadre de notre système d'intégration continue. La partie qui nous manque est celle qui nous permet d’automatiser la conversion. Des idées?

Était-ce utile?

La solution

Dans l'exemple de code, je viens de découvrir une fonction qui fera exactement ce que vous voulez. Mais caché par le nom pas très utile de 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

Vous devrez peut-être affiner le réglage un peu (c'est-à-dire ne pas tout écrire dans C: \ Temp), mais c'est un bon début.

Autres conseils

Je ne connais pas ce produit, mais le site Web auquel vous créez un lien mentionne une interface d'automatisation. Cela devrait vous permettre de contrôler Enterprise Architect à partir d'un langage de script tel que VBScript ou JavaScript. Il peut être possible d’imprimer via cette interface; Si tel est le cas, vous pouvez installer un pilote d'imprimante PDF (ou imprimer sur fichier utilisant un pilote d’imprimante PostScript générique et utilisez GhostScript pour le convertir au format PDF.

Nous avons Enterprise Architect et nous l'avons bien intégré à Word. Nous avons écrit notre propre application Web Wicket / Jetty qui publie des liens vers des diragrammes EA sous forme d’URL HTTP que nous avons ensuite insérés "Insertion & Lien". dans nos documents UCR (ou quoi que ce soit d'autre). L’application Web affiche une arborescence de liens, une pour chaque paquet, puis il suffit de copier le lien dans le document Word.

Cela fonctionne vraiment bien. Nous pouvons apporter autant de modifications que nous le souhaitons dans EA et dans le document Word, il suffit d'aller dans CTRL + A pour tout sélectionner et d'appuyer sur F9 pour mettre à jour tous les liens. Malheureusement, je n'ai pas écrit le code, je ne peux donc pas vous dire exactement comment il est publié à partir de EA. Je pense qu'il existe un code Java qui interroge simplement le serveur EA et qui aspire tout s'il détecte des modifications.

VBScript est vraiment une possibilité simple et rapide. J'ai imaginé un petit script qui permet d'exporter un diagramme. La seule chose que vous devez savoir, c’est son 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top