Pregunta

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

Mala solución: Podríamos exportar manualmente los documentos de EA a un formato portátil y luego registrarlos, pero es probable que haya ocasiones en que la versión de formato portátil no esté actualizada con el documento de EA, ya que depende de siga 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. ¿Alguna idea?

¿Fue útil?

Solución

En el código de ejemplo, acabo de descubrir una función que hará exactamente lo que quieres. Pero oculto por el nombre no tan útil 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 ajustarlo un poco (es decir, no escribir todo en C: \ Temp), pero es un buen comienzo.

Otros consejos

No estoy familiarizado con este producto, pero el sitio web al que se vincula menciona una interfaz de automatización. Esto debería permitirle controlar Enterprise Architect desde un lenguaje de script como VBScript o JavaScript. Es posible imprimir a través de esta interfaz; si es así, puede instalar un controlador de impresora PDF (o imprimir en un archivo con un controlador de impresora PostScript genérico y use GhostScript para convertirlo a PDF.

Tenemos Enterprise Architect y lo tenemos muy bien integrado con Word. Escribimos nuestra propia aplicación web Wicket / Jetty que publica enlaces a diragramas de EA como una URL HTTP que luego "Insertamos & Enlace;" en nuestros documentos UCR (o cualquier otra cosa). La aplicación web muestra un árbol como estructura de enlaces, uno para cada paquete y luego simplemente copiamos el enlace en el documento de Word.

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

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top