método automatizado para exportar diagramas de Enterprise Architect?
-
10-07-2019 - |
Pergunta
Problema: Um monte de nossa documentação de design e arquitetura foram criados e mantidos em Enterprise Architect - para melhor ou pior, que é como ele é. Estes documentos são armazenados em nosso repositório Subversion - que funciona muito bem para as pessoas que criam e atualizá-los - já que temos licenças para EA - mas muitos dos desenvolvedores (internos e externos) que trabalham em nossa base de código ea necessidade de fazer usar dos diagramas, mas não todos têm licenças EA.
Pobre Solução: Poderíamos exportar manualmente os documentos da EA para um formato portátil e, em seguida, verificar aqueles em, mas não estão vinculados a ser tempos quando a versão formato portátil está fora de data com o documento EA, uma vez que conta com o humano para tomar as medidas para converter manualmente.
Melhor Solução: Temos sido à procura de um método para automatizar a conversão. Isso pode ser executado como um gancho post-commit ou como parte de nosso sistema de integração contínua. A parte que está faltando é a peça que nos permite automatizar a conversão. Alguma idéia?
Solução
No código Exemplo Acabei de descobrir uma função whish vai fazer exatamente o que você quer. Mas escondido pelo nome não é tão ú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
Você pode ter que afinar uma litte (ou seja, não escrever tudo em C: \ Temp). Mas é um bom começo
Outras dicas
Eu não estou familiarizado com este produto, mas o Web site que você conectar-se a menciona uma interface Automation. Isso deve permitir que você controle Enterprise Architect a partir de uma linguagem de script como VBScript ou JavaScript. Pode ser possível imprimir através desta interface; Se assim for, você poderia instalar um driver de impressora PDF (ou imprimir um arquivo usando um driver genérico de impressora PostScript e uso GhostScript para convertê-lo em PDF.
Temos Enterprise Architect e nós tê-lo bem integrado com o Word. Nós escrevemos nossa própria Wicket / Jetty WebApp que publica links para diragrams EA como um HTTP URL que, depois, "Inserir e Ligação" em nosso UCR (ou qualquer outra coisa) documentos. O aplicativo web exibe uma árvore como a estrutura de links, um para cada pacote e então nós apenas copiar o link para o documento do Word.
Ele funciona muito bem. Podemos fazer tantas mudanças como gostamos em EA e, em seguida, no documento do Word basta ir CTRL + A para selecionar todos e bateu F9 para atualizar todos os links. Infelizmente eu não escrever o código, então não posso dizer exatamente como ele é publicado a partir de EA. Eu acho que há algum código Java que apenas as pesquisas o servidor EA e suga tudo se detectar alterações.
VBScript é realmente uma possibilidade fácil e rápido. Eu descobri um pequeno script que permite exportar um diagrama. A única coisa que você tem que saber é que do 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