엔터프라이즈 아키텍트 다이어그램을 내보내는 자동화 된 방법?
-
10-07-2019 - |
문제
문제 : 많은 디자인 및 건축 문서가 만들어지고 유지되었습니다. 엔터프라이즈 아키텍트 - 더 나은 또는 더 나쁘게 그렇습니다. 이 문서는 EA에 대한 라이센스를 가지고 있기 때문에이를 만들고 업데이트하는 사람들에게 잘 작동하지만 코드베이스에서 작업하고 만들어야하는 많은 개발자 (내부 및 외부)가 있기 때문에이를 통해 Subversion Repository에 저장됩니다. 다이어그램을 사용하지만 모두 EA 라이센스가 없습니다.
불쌍한 해결책 : EA 문서를 휴대용 형식으로 수동으로 내보낼 수있는 다음 확인을 확인할 수 있지만 휴대용 형식 버전이 EA 문서와 의존하여 인간에게 의존하여 단계를 수행하기 때문에 시간이 지남에 따라야합니다. 수동으로 변환합니다.
더 나은 해결책 : 우리는 변환을 자동화하는 방법을 찾고 있습니다. 이것은 커밋 후 후크 또는 지속적인 통합 시스템의 일부로 실행될 수 있습니다. 우리가 놓친 부분은 변환을 자동화 할 수있는 조각입니다. 어떤 아이디어?
해결책
예제 코드에서 방금 함수를 발견했습니다. Whish는 원하는 것을 정확하게 수행 할 것입니다. 그러나 그렇게 도움이되지 않는 이름으로 숨겨져 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
당신은 그것을 미세 조정해야 할 수도 있습니다 (즉, 모든 것을 c : temp에 쓰지 않음). 그러나 그것은 좋은 시작입니다.
다른 팁
이 제품에 익숙하지는 않지만 자동화 인터페이스를 언급하기 위해 링크 된 웹 사이트입니다. 이를 통해 VBScript 또는 JavaScript와 같은 스크립팅 언어에서 Enterprise Architect를 제어 할 수 있습니다. 이 인터페이스를 통해 인쇄 할 수 있습니다. 그렇다면 설치할 수 있습니다 PDF 프린터 드라이버 (또는 일반 Postscript 프린터 드라이버를 사용하여 파일에 인쇄하여 사용 고스트 스크립트 PDF로 변환합니다.
우리는 엔터프라이즈 아키텍트를 보유하고 있으며 Word와 잘 통합되었습니다. 우리는 EA Diragrams에 대한 링크를 HTTP URL로 게시 한 다음 UCR (또는 다른) 문서에 "삽입 및 링크"를 게시하는 자체 개찰구/Jetty WebApp을 작성했습니다. 웹 앱은 각 패키지마다 하나씩 링크 구조와 같은 트리를 표시 한 다음 링크를 Word 문서에 복사합니다.
정말 잘 작동합니다. 우리는 EA에서 원하는만큼 많은 변경을 할 수 있으며 Word Document에서 CTRL+A로 이동하여 모두를 선택하고 F9를 칠하여 모든 링크를 업데이트합니다. 불행히도 나는 코드를 작성하지 않았으므로 코드가 EA에서 어떻게 게시되는지 정확히 말할 수 없습니다. EA 서버를 폴링하고 변경 사항을 감지하면 모든 것을 빨아내는 Java 코드가 있다고 생각합니다.
VBScript는 실제로 쉽고 빠른 가능성입니다. 다이어그램을 내보낼 수있는 작은 스크립트를 알아 냈습니다. 당신이 알아야 할 유일한 생각은 그것이 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