엔터프라이즈 아키텍트 다이어그램을 내보내는 자동화 된 방법?

StackOverflow https://stackoverflow.com/questions/1441479

  •  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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top