2009-09-17 20 views
12

Problema: gran parte de nuestra documentación de diseño y arquitectura se creó y mantuvo en Enterprise Architect - para bien o para mal, así es como es. Estos documentos se almacenan en nuestro repositorio de subversión, que funciona muy bien para las personas que los crean y actualizan, ya que tenemos licencias para EA, pero muchos de los desarrolladores (internos y externos) que trabajan en nuestra base de código y necesitan hacer uso de los diagramas, pero no todos tienen licencias de EA.Método automatizado para exportar diagramas de Enterprise Architect?

Mala solución: podríamos exportar manualmente los documentos de EA a un formato portátil y luego verificarlos, pero hay ocasiones en que la versión de formato portátil está desactualizada con el documento de EA, ya que depende del humano para tomar los pasos para convertir manualmente.

Mejor solución: hemos estado buscando un método para automatizar la conversión. Esto podría ejecutarse como un enlace posterior a la confirmación o como parte de nuestro sistema de integración continua. La parte que nos falta es la pieza que nos permite automatizar la conversión. ¿Algunas ideas?

Respuesta

8

En el código de Ejemplo acabo de descubrir una función que hará exactamente lo que usted desea. Pero escondido por el nombre no tan servicial 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 

Puede que tenga que afinar un litte (es decir, no escribir todo en C: \ Temp), pero es un buen comienzo.

1

No estoy familiarizado con este producto, pero el sitio web que enlaza menciona una interfaz de Automatización. Esto debería permitirle controlar Enterprise Architect desde un lenguaje de scripting como VBScript o JavaScript. Puede ser posible imprimir a través de esta interfaz; Si es así, usted podría instalar una (o imprimir PDF printer driver en un archivo utilizando un controlador de impresora PostScript genérico y utilizar GhostScript para convertirlo a PDF.

1

Tenemos EA y lo tenemos muy bien integrado con Word. Escribimos nuestro propio Wicket/Jetty WebApp que publica enlaces a diragrams de EA como una URL HTTP que luego "Insertar & Enlace" en nuestros documentos UCR (o cualquier otra cosa). La aplicación web muestra una estructura de enlaces tipo árbol, una para cada paquete y luego simplemente copie el enlace en el documento de Word.

Funciona muy bien. Podemos hacer todos los cambios que queramos en EA y luego en el documento de Word solo vaya a CTRL + A para seleccionar todo y presione F9 para actualizar todos los enlaces . Desafortunadamente no lo hice rite el código, así que no puedo decirle exactamente cómo se publica desde EA. Creo que hay un código Java que simplemente sondea el servidor de EA y lo absorbe todo si detecta cambios.

+0

Esto es interesante, supongo que el punto para llevar es que hay al menos alguna API de Java que podemos usar. Sin embargo, no estamos ejecutando un servidor EA, solo la aplicación independiente. –

1

VBScript es realmente una posibilidad fácil y rápida. Descubrí un pequeño script que permite exportar un diagrama. Lo único que debes saber es su 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

Buen comienzo. Pero lo que se necesita es una forma de exportar todos los diagramas de una vez. Debería ser posible usar un script de VBA. – Martin

Cuestiones relacionadas