ER/Studio [API활용] 자동 조작 API 사용하기
2012.04.10 21:58
ER/Studio의 자동 조작 API 도움말 파일명은 AIRef.chm 이며 ER/Studio 설치 폴더에 있습니다.
ER/Studio 의 자동조작 API 를 Delphi 2009 에서 사용하기 - Getting Started
Pawel Glowacki 작성 (블로그 : http://blogs.embarcadero.com/pawelglowacki/2008/08/13/38513
( 역자 주 : 2008 년 8 월에 작성된 아티클 이지만 , 2011 년 5 월 현재 버전인 ER/Studio XE 와 Delphi XE 에서도 여전하므로 번역함 )
지난달 (2008 년 7 월 ) 토론토의 엠바카데로 기술 킥오프 행사에서는 소프트웨어 컨설턴트 , 제품 책임자를 비롯한 모든 엔지니어들이 모여 코드기어 개발툴과 데이터베이스 기어 DB 툴에 대한 지식 , 계획 , 제품 , 로드맵에 대해 공유하였다 . 무엇보다 중요한 것은 통합으로 인해 새롭게 더욱 커진 기술팀의 팀워크를 가족처럼 다지는 일이었다 . 킥오프 행사 후 나는 바로 여름 휴가를 위해 크로아티아로 떠나야 했기에 이 아티클을 다소 늦게 올리게 되었다 .
아마 델파이와 C++ 빌더에서 95% 는 어떤 형태이든 데이터베이스를 사용하고 있을 것이다 . 비록 여러분이 원하는 데이터베이스 애플리케이션 개발에 필요한 모든 것을 델파이가 이미 제공하고 있지만 , 델파이는 ER/Studio 처럼 크로스 - 플랫폼 데이터베이스 모델링을 위한 모든 기능을 제공하기 위해 만들어진 DB 모델링 도구는 아니다 . 따라서 지금까지 나는 데이터베이스 생성 작업을 위해서 써드 파티 프로그램을 사용해왔다 . 내가 본 하지만 ER/Studio 의 기능은 정말 인상적이었다 .
나는 코드기어 / 엠바카데로에 합류하기 전에 약 5 년간 폴란드에서 가장 큰 시중 은행의 재무 관리 팀에서 사용하는 커다란 DW( 데이터 웨어하우스 ) 의 데이터를 Excel 매크로 자동조작 API를 이용하여 보기 좋은 스프레드 시트로 만드는 델파이 3~5 애플리케이션을 구축 관리하였다 . 당시 일부 동료들은 델파이를 이용하여 엄청난 규모로 엑셀 파일을 생성하는 것이 충분하지 않을 수도 있다고 우려했었다 . :-)
내가 델파이로 이런 자동조작 코드를 쓰게 된 것은 Charlie Calvert ( 지금은 마이크로소프트에서 C# Evangelist 로 재직중 ) 가 쓴 "Delphi and Microsoft Office: Automating Excel and Word"라는 글 덕분이다 . 당시 또 하나의 좋은 소스는 Binh Ly 의 "Techvanguards" 사이트였다 . 요즘에는 델파이와 Automation 자동조작 자료에 대한 링크가 "OLE/COM/DCOM/Automation/ActiveX - Delphi knowledge base" 에 잘 정리되어 있다 .
코드기어와 데이터베이스기어의 제품들이 서로 밀접하게 통합되는데는 시간이 걸릴 것이다 . 하지만 , 지금 당장 할 수 있는 것들도 있다 . ER/Studio 는 OLE Automation 을 통해 자동조작 될 수 있고 , 이미 ER/Studio 의 풍부한 오브젝트 모델을 잘 활용한 VBA 매크로 스크립트 코드도 많다 . 지금 바로 델파이를 이용해서 ER/Studio 의 자동조작 API 를 시작하지 못할 이유가 없다 .
이 글에서는 델파이 VCL 폼 Win32 애플리케이션에서 ER/Studio 를 바로 구동하는 예제를 스텝 - 바이 - 스텝으로 보여주고자 한다 . 딱히 멋진 내용은 없으나 , 많은 유사한 연동 요구 사항에 대한 시작점이 되기에는 충분할 것이다 . 예제는 ER/Studio 7.6.0 와 Delphi 2009 Tiburon 을 사용하여 진행된다 (2011 년 현재의 Delphi XE 와 ER/Studio XE 에서도 유효함 , 또한 마이크로소프트 C# 과 VB 등을 통해서도 연동됨 : 역자 주 )
델파이의 "Components" 메뉴의 "Import Component" 마법사는 COM 타입 라이브러리를 가져오면 해당 타입 라이브러리에 정의된 클래스들을 웹핑 (wrap) 한 VCL 컴포넌트를 만들어 준다 .만약 "Tool Pallette" 에 설치하고자 한다면 "Package" 를 생성한 후 마법사를 통해 이미 생성된 델파이 유닛 (unit) 에 추가하고 , 개발툴에 패키지를 설치하기만 하면 된다 . Delphi 2009 의"Import Component" 마법사는 예전 보다 더욱 쉬워졌다 . ( Chris Bensen 이쓴 블로그 "Tiburon Sneak Peek: Import Component Wizard" 참조 ). 마법사에서 패키지 프로젝트까지 바로 생성해주기 때문이다 . 또한 "Registered Type Libraries" 탭에서 검색 기능을 제공하기 때문에 등록된 타입 라이브러리를 찾기 위해 스크롤 할 필요가 없다 . ( 대부분 많은 타입 라이브러리를 추가하므로 스크롤 목록이 매우 길 것이다 )
델파이로 ER/Studio 의 타입 라이브러리 임포트 (Import) 하기
먼저 ER/Studio 와 RAD Studio 가 컴퓨터에 설치되어 있는지 확인한다 . 그리고 "CodeGear RAD Studio" 를 시작하고 메인 메뉴의 "Components" 에서 "Import Component" 를 선택하면 아래와 같은 "Import Component" 마법사가 나타난다 .
맨 처음 나타나는 "Personality, Framework and Platform" 탭에서 "VCL for Delphi Win32" 를 선택하고 "Next >>" 버튼을 클릭한다 . 만약 "Delphi 2009" 바로가기를 통해서 RAD Studio 를 실행하면 (IDE 에서 델파이로 이미 지정되어 있다면 ) 아래 화면은 생략된다 .
다음 탭에서 "Import a Type Library" 옵션을 선택하고 "Next >>" 를 클릭한다 .
다음은 "Registered Type Libraries" 탭이다 . 여기에서 Delphi 2009 에서 새로 추가된 검색 기능을 활용하여 "ER/Studio Type Library" 의 위치를 찾는다 . "C:\Program Files\Embarcadero\ERStudioX.X\ERSTUDIO.exe" 파일이다 .
다음 탭에서 Palette Page 의 이름을 지정한다 . 이곳에 컴포넌트들이 설치되게 된다 . 여기에서는 "ER Studio" 라고 입력하겠다 ( 원하는 이름을 넣으면 된다 ). "Generate Component Wrappers" 가 체크되었는지를 확인하고 "Next>>" 를 클릭한다 .
다음 탭에서는 Delphi 2009 에서 추가된 옵션인 "Install to New Package" 를 선택한다 . 그러면 , 새 패키지 프로젝트를 만드는 단계를 직접 하지 않아도 된다 .
다음 화면에서 새 패키지 프로젝트의 이름과 위치를 지정하면 설치된 패키지 목록에 추가된다 . 여기에서는 "D2009ERS76" 라고 프로젝트 이름을 주고 Delphi 2009 demos 폴더를 지정하였다 ( 역시 원하는 데로 지정하기 바란다 )
마법사의 마지막 화면에서 정보를 확인하고 "Finish 버튼을 클릭하면 , 새로운 "Package" 프로젝트가 만들어지고 여기에 ER/Studio 타입 라이브러리가 임포트되어 the "ERStudio_tlb.pas" 델파이 유닛이 만들어진다 . 이제 "File \ Save" 메뉴나 "Ctrl+S" 를 통해서 프로젝트를 저장한다
우선 생성된 유닛의 "Structure" 뷰의 "Errors" 섹션에서 "//" 로 시작되지 않게 시작된 주석에 대한 에러가 몇 개 보일 것이다 . 이 에러는 간단히 고칠 수 있다 . 주석 처리되어야 함에도 “ // ” 로 시작되지 않는 해당 코드 라인을 선택한 후 "Ctrl+/" 을 통해서 주석 처리하면 된다 . 문제가 되는 소스 코드 라인을 파악하는 가장 빠른 방법은 프로젝트를 컴파일 해 보는 것이다 . 프로젝트를 컴파일 하려면 메뉴에서 "Project \ Compile" 을 클릭하거나 Project Manager" 의 해당 프로젝트에서 오른쪽 클릭을 한 후 "Compile" 을 선택하거나 "Ctrl+F9" 를 누르면 된다 . 문제가 되는 모든 코드 라인을 주석 처리하고 나면 "Done: Compiled" 메시지가 표시된다 .
IDE 에 패키지를 설치하기 위해 한가지 더 알아둘 것이 있다 .
"Tool Palette" 에는 동일한 이름을 가진 컴포넌트가 허용되지 않는다 . 델파이에 이미 "TShape" 라는 컴포넌트가 있기 때문에 ER/Studio 의 "TShape" 컴포넌트는 동일한 이름은 사용될 수 없다 . ER/Studio 패키지를 "Tool Palette" 로 가져오려면 생성된 "TShape" 컴포넌트의 이름을 "TShapeERS" 처럼 다른 이름으로 바꾸어야 한다 . 이름 바꾸기는 델파이의 리팩토링 기능 중 하나인 "Rename" 을 사용하면 매우 간단하다 .
먼저 , 생성된 유닛에서 "TShape = class(TOleServer)" 선언부로 가보자 . 여기에서 "Ctrl+F" 를 통해 구문 검색 대화상자를 띄우고 "TShape = class" 를 입력한 후 OK 를 클릭한다 . "TShape"식별자에 커서를 올려 두고 , 오른쪽 클릭하여 "Refactoring \ Rename" 옵션을 선택하면 Rename" 대화상자가 나타난다 ( "Shift+Ctrl+E" 을 해도 된다 ).
"New name" 에 "TShapeERS" 를 입력하고 OK 를 클릭하면 "Refactoring" 탭이 표시되면서 리팩토링의 영향을 받는 모든 위치가 나열된다 . 루비 큐브 모양의 아이콘을 클릭하거나 "Ctrl+R"를 누르면 이름바꾸기 리펙토링이 수행되고 모든 TShape" 이 "TShapeERS" 로 바뀌게 된다 .
이제 "Tool Palette" 에 컴포넌트를 설치할 준비가 되었으므로 "Ctrl+S" 를 통해 저장한다 . Project Manager 창에서 프로젝트명 ("D2009ERS78.bpl") 을 오른쪽 클릭하고 "Install" 을 선택한다 .프로젝트가 컴파일되어 패키지가 성공적으로 설치되었으며 , 아래와 같은 모든 컴포넌트를 활용할 수 있다는 확인 창이 표시된다 .
엄청나게 많은 컴포넌트를 볼 수 있다 . 아마 208 개의 컴포넌트가 설치 될 것이다 . 이만큼 많은 자동 조작이 가능하다는 의미이다 ;-)
개발툴에 ER/Studio 타입 라이브러리를 임포트하는 작업이 완료되었다 . 이제 델파이 VCL Forms 애플리케이션을 만들어 보자 . "File \ Close All" 를 통해 패키지 프로젝트를 닫는다 .
간단한 델파이 ER/Studio Automation 자동조작 예제
델파이 애플리케이션에서 ER/Studio 의 자동조작 을 구현해 보자 . "File \ New \ VCL Forms Application - Delphi" 를 선택하여 빈 애플리케이션을 생성한다 . "File \ Save All" 을 선택하여 메인 폼에 원하는 이름을 지정한다 . 여기에서는 프로젝트 명을 "ERSVersionInfo" 로 하고 메인폼은 "Unit1" 으로 그냥 두겠다 .
"Tool Palette" 의 "ER Studio" 탭을 펼치면 폼에서 사용될 수 있는 모든 새 컴포넌트가 표시된다 . 이제 무엇부터 시작해야 할까 ?
ER/Studio 설치 폴더에는 우리가 바로 개발하기 위해 필요한 모든 정보가 들어있는 "ERStudio 자동조작 API 레퍼런스 (ERStudio Automation Interface Reference ) " (AIRef.chm) 도움말 파일이 있다 . ER/Studio 의 automation 자동조작 API 는 외부 애플리케이션이나 ER/Studio 내부의 매크로를 통해서 활용될 수 있다 . 외부 애플리케이션의 경우 Application" 오브젝트의 인스턴스를 생성하는 것부터 시작된다 .
폼에서 간단히 "TApplication" 컴포넌트를 끌어다 놓는 것에서부터 시작해보자 . Tool Palette 의 상단에 "Application" 이라고 타이핑하면 쉽게 "TApplication" 컴포넌트를 찾을 수 있으며 , 더블 클릭하면 폼에 추가된다 . 설치된 ER/Studio 의 버전을 표시하는 간단한 예제를 만들어 보자 .
Import Component" 를 통해 생성된 모든 웹퍼 컴포넌트들은 "TOleServer" 클래스로부터 상속받으며 디자인 타임 ( 개발 환경 ) 에서 Object Inspector 에 오픈된 속성이 나타난다 ."TApplication” 컴포넌트를 폼 위에 떨어뜨리고 나서 "AutoConnect" 와 "AutoQuit" 를 "false" 에서 "true" 로 바꾸어 보자 . 이렇게 하면 델파이 애플리케이션이 시작하거나 멈출 때 ER/Studio 도 같이 시작되고 멈추게 된다 .
폼에 ER/Studio 의 버전을 표시하려면 , 버튼을 하나를 끌어다 놓은 후 , OnClick" 이벤트에 간단히 소스 한 줄을 추가하면 된다 .
이제 다되었다 ! 녹색 화살표 아이콘을 ( 또는 "F9") 을 통해서 애플리케이션을 구동하면 버튼 하나가 달린 간단한 폼을 보여질 것이다 . 이 델파이 애플리케이션이 시작되면 ER/Studio 도 자동으로 같이 시작된다 . "Show Version" 버튼을 클릭하면 아래와 같은 메시지가 보여진다 .
델파이 애플리케이션을 닫으면 , ER/Studio 도 같이 닫힌다 .
요약
델파이는 네이티브 윈도우 애플리케이션을 작성하는 최고의 도구이다 . COM 자동조작 지원은 Delphi 3 이후 십수년간 지속적으로 향상되고 있다 . ER/Studio 는 외부 애플리케이션에서ER/Studio 의 기능을 활용할 수 있도록 매우 풍부한 오브젝트 모델을 오픈하고 있다 . 이 아티클에서는 ER/Studio 타입라이브러리를 델파이로 임포트하는 방법과 매우 간단한 애플리케이션 생성을 해 보았다 . 이것이 여러분이 자동조작 요구사항을 구현할 때 좋은 시작점이 되기를 바란다 .
ER/Studio VCL 컴포넌트 웹퍼 ( wrapper ) 가 포함된 델파이 패키지는 Code Central 에서 다운받아서 설치할 수 있다 .
.
Go 델파이 ! Go ER 스튜디오 ! Go 엠바카데로 !
위의 예제를 따라 애플리케이션을 만든 후
1. 실행 시, "Exception EOleSysError in Module [프로젝트명].exe at 00110462. 클래스가 등록되지 않았습니다, ClassID:...." 라는 오류 메시지가 나오거나
2. 실행 후 버튼을 클릭 시, "서버 실행이 실패했습니다, ClassID: ...." 라는 오류 메시지가 나온다면,
델파이에서 사용하는 ER/Studio 타입 라이브러리와 PC에 설치되어있는 ER/Studio의 버전이 서로 상이하여 생기는 오류 메시지입니다.