2009-09-17 6 views
12

Problème: Une grande partie de notre documentation de conception et d'architecture a été créée et maintenue en Enterprise Architect - pour le meilleur ou pour le pire, c'est comme ça. Ces documents sont stockés dans notre dépôt subversion - ce qui fonctionne bien pour les gens qui les créent et les mettent à jour - puisque nous avons des licences pour EA - mais beaucoup de développeurs (internes et externes) qui travaillent sur notre code et doivent faire utilisation des diagrammes, mais pas tous ont des licences EA.Méthode automatisée pour exporter des diagrammes Enterprise Architect?

Mauvaise solution: Nous pourrions exporter manuellement les documents d'évaluation environnementale dans un format portable, puis vérifier ceux-ci, mais il y a des moments où la version au format portable est obsolète avec le document d'évaluation environnementale puisqu'elle repose sur l'humain prendre les mesures pour convertir manuellement.

Mieux Solution: Nous avons cherché une méthode pour automatiser la conversion. Cela pourrait être exécuté en tant que hook post-commit ou dans le cadre de notre système d'intégration continue. La pièce qui nous manque est la pièce qui nous permet d'automatiser la conversion. Des idées?

Répondre

8

Dans l'exemple de code, je viens de découvrir une fonction qui fera exactement ce que vous voulez. Mais caché par le pas de nom helpfull 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 pourriez avoir à affiner un litte (pas tout écrire à savoir dans C: \ Temp), mais il est un bon début.

1

Je ne connais pas ce produit, mais le site Web auquel vous liez 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 oui, vous pouvez installer un PDF printer driver (ou imprimer dans un fichier en utilisant un pilote d'imprimante PostScript générique et utiliser GhostScript pour le convertir en PDF

1

Nous avons Enterprise Architect et nous l'avons bien intégré avec Word. Wicket/Jetty WebApp qui publie des liens vers les diragrammes d'EA sous la forme d'une URL HTTP que nous insérons ensuite dans nos documents UCR (ou autre chose) en insérant le lien &.L'application web affiche une arborescence de liens, une pour chaque paquet, puis nous Il suffit de copier le lien dans le document Word

Cela fonctionne très bien.Nous pouvons faire autant de changements que nous aimons dans EA, puis dans le document Word aller CTRL + A pour sélectionner tout et appuyez sur F9 pour mettre à jour tous les liens Malheureusement je n'ai pas Rite le code, donc je ne peux pas vous dire exactement comment il est publié par EA. Je pense qu'il y a du code Java qui ne fait qu'interroger le serveur EA et aspire tout s'il détecte des changements.

+0

Ceci est intéressant, je suppose que le point à emporter est qu'il existe au moins une API Java que nous pouvons utiliser. Cependant, nous n'utilisons pas un serveur EA - juste l'application autonome. –

1

VBScript est vraiment une possibilité facile et rapide. J'ai trouvé un petit script qui permet d'exporter un diagramme. Le seul que vous devez savoir, c'est que c'est 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

Bon début. Mais ce qu'il faudrait, c'est un moyen d'exporter tous les diagrammes en une fois. Cela devrait être possible en utilisant un script VBA. – Martin

Questions connexes