257
ReportExpress 사용자 매뉴얼 문서 번호 : CAB-03-20020320 2002 All right reserved Cabsoftware

ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

ReportExpress 사용자 매뉴얼

문서 번호 : CAB-03-20020320

2002 All right reserved Cabsoftware

Page 2: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

ReportExpress 소프트웨어 사용자 사용권 계약서

중요한 내용이므로 자세히 읽으시기 바랍니다.

본 (주)캡소프트 사용자 사용권 계약서("사용권 계약서")는 본 사용권 계약서와 함께 제공된 ReportExpress 제품에

대하여 귀하(기관, 개인 혹은 단일 업체)와 (주)캡소프트 간에 체결되는 계약서입니다. 본 ReportExpress

소프트웨어 제품에는 컴퓨터 소프트웨어뿐만 아니라, 관련 매체, 인쇄물 및 "온라인" 또는 전자 문서("소프트웨어

제품")도 포함될 수 있습니다. 귀하는 소프트웨어 제품을 설치, 복사, 또는 사용함으로써 본 사용권 계약서 내용에

동의하게 됩니다. 본 사용권 계약서 내용에 동의하지 않을 경우에는 소프트웨어 제품을 설치하거나 복사하거나

달리 사용할 수 없습니다. 또한, 소프트웨어 제품의 일부로써 별도 수령한 소프트웨어 제품의 업데이트나 기타

패치 프로그램들을 설치 사용하는 것도 별도의 계약으로 명시하지 않더라도 본 계약서와 동등하게 동의한 것으로

간주됩니다.

소프트웨어 제품 사용권

본 소프트웨어 제품은 저작권법, 국제 저작권 협약 및 기타 지적 재산권 법률 및 협정에 의해 보호됩니다.

소프트웨어 제품은 판매되는 것이 아니고 그 사용이 허가되는 것입니다.

1. 소프트웨어 제품 사용 허가.

1.1 일반 사용 허가.

귀하가 구입하신 본 제품은 PC 또는 Server 등의 제품군에서 설치하여 사용하실 수가 있습니다. 본 사용 허가는

귀하(기관, 개인 혹은 단일 업체)만 제품을 사용할 경우에 한하여 무한대(디자이너 제외)의 컴퓨터에 소프트웨어

제품을 설치할 수 있습니다. 귀하가 업체인 경우, (주)캡소프트는 귀하에게 귀하의 업체 내의 한 개인을 지정하여

위에 명시된 방식대로 소프트웨어 제품을 사용할 수 있도록 하는 권리를 드립니다.

1.2 문서.

본 사용권 계약서는 귀하(기관, 개인 혹은 단일 업체) 개인에게 본 제품의 복사본을 만들어 사용할 수 있는

비독점적 개인 사용권을 드립니다. 단 그러한 복사본은 개인적인 목적으로만 사용해야 하며 귀하의 구내나 구내

밖에서 재발행하거나 배포(종이 또는 전자 문서)할 수는 없습니다.

1.3 저장/네트워크 사용.

귀하는 네트워크 서버와 같은 저장 장치에 소프트웨어 제품을 한 개 저장하거나 설치할 수 있습니다. 여기에서

말하는 네트워크 서버는 제 1.1 절에 따라 사용권을 취득한 최종 사용자가 사용하는 컴퓨터에 소프트웨어 제품을

설치하거나 동 컴퓨터에서 실행하기 위한 목적으로만 사용되어야 합니다. 소프트웨어 제품의 사용권 한 개를 다른

최종 사용자들이 공유하거나 동시에 사용할 수 없습니다.

Page 3: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

2. 소프트웨어 사용 지원 서비스.

(주)캡소프트는 귀하에게 본 소프트웨어 제품에 관련된 지원 서비스를 제공할 수 있습니다. 이는 본 제품을

설치하신 후에 http://www.cabsoftware.com 에서 사용자 등록을 하신 후에 패치 프로그램이나 Q&A 코너를

통해서 받으실 수 있습니다. 그리고 사용자 등록 시에 귀하가 입력하는 e-mail 을 통하여 본 제품의 업데이트나

패치 프로그램은 수시로 보내 드립니다.

3.소프트웨어 양도.

소프트웨어 제품의 처음 사용자는 본 사용권 계약서와 소프트웨어 제품을 최종 사용자에게 직접 단 한번만

영구적으로 양도할 수 있습니다. 양도 시에는 소프 트웨어 제품의 모든 부분(모든 구성 요소, 매체, 인쇄물, 모든

업그레이드 및 본 사용권 계약서)을 포함해야 하며, 위탁이나 기타 간접 방식으로는 양도할 수 없습니다. 동

양도의 양수인은 본 사용권 계약서와 소프트웨어 제품을 더 이상 양도하지 않는 의무를 포함하여 본 사용권

계약서의 내용을 준수할 것에 동의해야 합니다.

4.저작권.

소프트웨어 제품(소프트웨어 제품에 포함된 모든 화상, 사진, 애니메이션, 비디오, 오디오, 음악, 텍스트등), 부속

인쇄물 및 소프트웨어 제품의 복사본들에 대한 소유권 및 저작권은 (주)캡소프트가 보유합니다.

5.책임 한도.

(주)캡소프트는 귀하(기관, 개인 혹은 단일 업체)가 본 소프트웨어 제품을 사용하거나 사용할 수 없음으로

인해,또는 지원 서비스를 받지 못함으로 인해 발생한 영업 이익 손실, 업무 중단, 사업 정보의 손실, 금전적인

손실 포함한 특별 손해, 부수적 손해, 간접 손해, 파생적 손해 등에 대해서 책임을 지지 않습니다. 본 제품은

대한민국 법률로 보호받고 있으며, 사용권 계약서에 관하여 의문 사항이 있을 경우에는 (주)캡소프트로 연락

주시기 바랍니다.

Page 4: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

목 차

ReportExpress의 구조 --------------------------------------------------------------- 1

ReportExpress 설치하기 ------------------------------------------------------------- 3

서버측 데이터소스로부터 XML 문서 생성방법 ------------------------------------------- 8

ReportExpress 디자이너 소개 -------------------------------------------------------- 13

사용자 인터페이스 소개 -------------------------------------------------------- 13

보고서 처리절차 -------------------------------------------------------------- 15

툴바 -------------------------------------------------------------------------- 17

ActiveX 와 OLE 컨트롤 ----------------------------------------------------- 35

여러 개의 컨트롤 선택하기 ---------------------------------------------------- 36

컨트롤 이동과 크기조절 ------------------------------------------------------- 37

섹션 크기 조절 --------------------------------------------------------------- 38

컨트롤 배치와 크기 조절 ------------------------------------------------------- 38

컨트롤 포맷하기 ---------------------------------------------------------------- 39

폰트 속성 설정하기 --------------------------------------------------- 39

포그라운드와 백그라운드 색상 설정하기 ------------------------------- 40

경계 스타일 설정하기 ------------------------------------------------- 40

출력 스타일 설정하기 ------------------------------------------------- 42

프린터와 페이지 설정 ---------------------------------------------------------- 43

페이지 설정 대화창 이용하기 ----------------------------------------- 43

프린터 설정 대화창 이용하기 ----------------------------------------- 44

페이지와 프린터 설정을 코드로 바꾸기 -------------------------------- 45

ReportExpress 디자이너에서 XML 데이터소스 연결시키기 ----------------------------- 51

간단한 예제 보고서 작성하기 ------------------------------------------------------------ 53

간단한 테이블 혹은 리스트형 보고서 -------------------------------------------- 54

보고서에서 매개변수 사용하기 -------------------------------------------------- 67

데이터 그룹핑을 사용한 보고서 ------------------------------------------------- 73

Page 5: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

계산식이 포함된 그룹핑을 사용한 보고서 ------------------------------------------ 76

그룹꼬리(GroupFooter)내에 요약정보를 사용한 보고서 -------------------------- 78

조건별 요약정보를 사용한 보고서 ------------------------------------------------- 82

계산식을 이용한 필드계산 보고서 ------------------------------------------------- 94

페이지꼬리(PageFooter)내에 페이지 번호 넣기 -------------------------------- 100

그룹헤더(GroupHeader)내에 페이지 번호 넣기 -------------------------------- 101

서브 리포트 사용하기 -------------------------------------------------------------------- 102

서브 리포트를 부모 리포트에 추가시키는 방법 ----------------------------------- 103

다양한 보고서 예제 ----------------------------------------------------------------------- 106

상위 n 보고서 ------------------------------------------------------------------ 106

마스터-디테일 보고서 ----------------------------------------------------------- 106

썸머리 보고서 ------------------------------------------------------------------- 107

컬럼방식의 보고서 ---------------------------------------------------------------- 107

조건에 따른 출력 변화 보고서 --------------------------------------------------- 108

그린바 출력 보고서 --------------------------------------------------------------- 109

여러 페이지에 걸치는 섹션 보고서 ----------------------------------------------- 109

차트가 포함된 보고서 ------------------------------------------------------------- 110

페이지끝까지 칸 채우기 ---------------------------------------------------------- 111

자동 번호 출력시키기 ------------------------------------------------------------- 113

보고서 코딩 팁 ----------------------------------------------------------------- 113

계층적 레코드셋 이용하기 ---------------------------------------------------------------- 114

데이터 셰이프 공급자 사용하기 -------------------------------------------------- 116

데이터 셰이프 공급자의 동작 방법 ----------------------------------------------- 116

계층적 쿼리 문자열 분석하기 ---------------------------------------------------- 117

계층 예제 ----------------------------------------------------------------------- 120

목차(TOC)와 프레임을 사용하기 --------------------------------------------------------- 127

목차 설정하기 ------------------------------------------------------------------- 127

그룹별 목차 사용하기 ----------------------------------------------------------- 127

Page 6: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

프레임 컨트롤 사용하기 --------------------------------------------------------- 131

프레임 컨트롤을 이용한 테이블 작성 --------------------------------------------- 131

하이퍼링크 사용하기 ---------------------------------------------------------------------- 133

HTML 링크 사용하기 ----------------------------------------------------------- 134

스크립트 사용하기 ------------------------------------------------------------------------ 135

스크립트로 작업하기 ------------------------------------------------------------ 136

XML(.RPX) 파일 -------------------------------------------------------------- 137

부 록 ------------------------------------------------------------------------------------ 138

ReportExpress 뷰어를 통한 웹상에서의 보고서 출력 구현 방법 ---------------- 140

ReportExpress 상수(Constants) --------------------------------------------- 143

범용 속성들(Common properties) --------------------------------------------- 159

범용 메쏘드 --------------------------------------------------------------------- 159

ActiveReport 속성값들 -------------------------------------------------------- 160

ActiveReport 이벤트들 -------------------------------------------------------- 163

경계선 속성 --------------------------------------------------------------------- 164

필드 컨트롤 속성 --------------------------------------------------------------- 164

라벨 컨트롤 속성 --------------------------------------------------------------- 167

XML 데이터 컨트롤 속성 ------------------------------------------------------- 168

XML 데이터 컨트롤 메쏘드 ----------------------------------------------------- 173

섹션 속성 ----------------------------------------------------------------------- 177

섹션 이벤트 --------------------------------------------------------------------- 179

오류 코드 ----------------------------------------------------------------------- 180

VBScripts --------------------------------------------------------------------- 185

VBScripts 데이터 형식 ----------------------------------------------- 188

VBScripts 변수 ------------------------------------------------------ 190

VBScripts 상수 ------------------------------------------------------- 193

VBScripts 연산자 ---------------------------------------------------- 194

조건문 사용 ----------------------------------------------------------- 195

Page 7: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

코드에 의한 루프처리 -------------------------------------------------- 199

VBScripts 프로시져 -------------------------------------------------- 205

VBScripts 코딩규칙 -------------------------------------------------- 207

XML 개요 ---------------------------------------------------------------------- 214

XSLT 및 Xpath ------------------------------------------------ 225

표준 ---------------------------------------------------------- 227

SOAP 이란 --------------------------------------------------- 230

특성에 대한 공백처리 방식 ---------------------------------------- 239

XML 선언 ------------------------------------------------------ 241

VisualBasic에서 XMLDSO 사용방법 ----------------------------- 245

Java에서 XMLDSO 사용방법 ------------------------------------ 247

Page 8: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 1 - 사용자 매뉴얼

본 사용자 매뉴얼은 ReportExpress 사용에 필요한 전반적인 과정을 모두 담고 있습니다.

ReportExpress는 Data Dynamics사의 ActiveReports를 기반으로 개발된 3계층 XML기반의 웹

보고서 솔루션입니다.

이 사용자 매뉴얼은 ReportExpress를 처음 사용하시는 분들을 위해 작성되었습니다.

본 문서의 저작권은 Cabsoftware에 있으며, ActiveReports는 Data Dynamics사의 고유 상표입니다.

ReportExpress의 구조

ReportExpress는 기존 웹 리포팅 솔루션과는 서버측 아키텍쳐가 매우 다릅니다. 마이크로소프트사와

IBM사에서 지원하고 있는 웹 서비스 기술을 기반으로 데이터베이스서버와 리포팅 뷰어가 HTTP

프로토콜을 기반으로 한 XML 메타 데이터형식으로 데이터를 주고 받게 됩니다. 이러한 기술을 웹

서비스라고 부르고 있으며 따라서, ReportExpress는 전용 리포팅 서버를 사용하지 않고, XML

표준을 지원하는 웹 서버 혹은 웹 어플리케이션 서버와 연동시켜 데이터베이스 소스를 이용하게

됩니다. 그림 1에는 ReportExpress의 아키텍쳐를 도식화한 그림입니다.

Page 9: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 2 - 사용자 매뉴얼

그림 1. ReportExpress의 아키텍쳐

그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle, MS-SQL등의

RDBMS)에서 제공하는 고유의 API를 통하여 연결되지 않습니다. 웹 서비스에서 제공하는

XML기반의 HTTP 프로토콜을 사용하기 때문에 데이터베이스 소스로의 연결은 웹 미들웨어 혹은

웹서버에서 제공하는 프로그래밍 방식으로 연결하고, 이 결과값을 XML로 표현해주면 됩니다.

이렇게 웹 서버단에서 표현층으로 구현된 XML 문서를 ReportExpress 뷰어가 표준 URL 표기

방식으로 지정하여 사용하게 됩니다.

이때, 데이터 처리방식은 일괄처리가 아닌 스트리밍 방식으로 처리되기 때문에 뷰어에서 보여지는

화면은 매우 효율적이며, 빠르게 처리됩니다.

Page 10: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 3 - 사용자 매뉴얼

ReportExpress 설치하기

본 문서에서는 ReportExpress의 설치에 대한 과정을 설명하고 있습니다. 본 문서에서는 윈도우

2000서버와 IIS 웹 서버의 경우에 대해서만 기술되어 있습니다. Unix버전과 Apache 웹 서버,

그리고 jsp와 php 버전의 경우에 대한 설치 과정은 부록을 참조하여 주십시오.

설치시 준비할 사항:

Window 2000 SP2

IIS 5.0

설치 단계 :

1. 제공되는 CD를 CDROM에 넣으십시오. 자동 설치 프로그램이 구동될 것입니다. 또는

CD안에 Setup.exe 파일을 수동으로 실행시키셔도 됩니다. ReportExpress는 여러분의

윈도우가 설치된 디스크의 Program Files 폴더아래에 Designer라는 폴더에 설치됩니다.

2. 설치과정에서 구입시 제공받은 시리얼키를 입력하십시오. 설치과정이 모두 종료되면,

ReportExpress의 디자이너가 설치된 폴더로 이동하십시오(기본 설치시 C:\Program

Files\Designer 입니다).

3. 그림 2에 ReportExpress가 설치된 폴더의 그림을 참조하십시오. 설치된 폴더안에는

report라는 폴더가 있습니다. 이 폴더에 들어있는 내용은 ReportExpress의 웹

컨트롤(ActiveX)과 매뉴얼에서 설명하는 각종 예제 및 매뉴얼입니다.

Page 11: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 4 - 사용자 매뉴얼

4. 제공되는 예제를 실행시키려면 report 폴더를 웹 서버의 문서디렉토리에 복사하십시오.

참고로, 제공되는 모든 예제가 정상적으로 동작되기위해서는 웹 서버의 문서디렉토리가

다음과 같아야만 합니다. (C:\Inetpub\wwwroot)

그림 2. ReportExpress 설치 완료후 설치된 폴더의 내용

Page 12: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 5 - 사용자 매뉴얼

5. 제공되는 예제 폴더(report)를 웹 문서 디렉토리에 복사했다면, 웹 브라우저(IE4.0이상)에서

제대로 동작되는지 확인하십시오.(URL: http://127.0.0.1/report)

그림 3. 제공되는 예제 화면

Page 13: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 6 - 사용자 매뉴얼

6. 처음 실행하게 될 경우에는 ReportExpress의 뷰어를 자동으로 설치하게 됩니다.

그림4. 처음 사용자를 위한 뷰어 컨트롤 인증 화면

7. 뷰어 인증을 한 후에는 자동으로 컴포넌트가 설치되고, 그 다음부터는 ReportExpress의

기능을 웹에서 동작시킬 수 있게 됩니다.

8. 제공되는 예제의 상단 메뉴에 있는 [구현 예제1]과 [구현 예제2]를 클릭하셔서 정상적으로

동작되는지 확인할 수 있습니다.

9. 이제 ReportExpress 설치가 완료되었습니다.

주의 : ReportExpress의 웹 구현시 설치 과정은 필요없습니다. 단지, 제공되는 ReportExpress.Cab

파일을 웹 서버의 보고서 동작 디렉토리내에 복사하는 것으로 구현이 가능하게 됩니다.

실제 사용하는 데이터베이스를 이용하여 테스트할 경우에는 다음과 같은 주의 사항을 살펴보십시오.

Page 14: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 7 - 사용자 매뉴얼

주의: Oracle을 사용할 경우, 반드시 Net8을 설치하고 Network Assistant를 사용하여 정확하게

alias명을 설정해주셔야만 합니다. MDAC 2.5이상이 설치되지 않은 윈도우 2000 에서는 오라클에서

제공하는 Oracle용 OLE 드라이브를 사용하셔도 XML 문서 생성이 가능하지만, MDAC에서 제공하는

Oracle용 OLE 드라이브를 사용하는 것을 권장합니다.

참고: Microsoft사의 SQL 서버 연결 문자열은 ReportExpress에서 제공하는 예제(getdata1.asp와

getdataxml1.asp)의 cnn_string을 참고하십시오.

Page 15: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 8 - 사용자 매뉴얼

서버측 데이터소스로부터 XML 문서 생성방법

ReportExpress에서 제공하는 예제 XML 생성 문서(getdata1.xml)를 통해 구현된 데이터 표현

계층은 사용된 데이터소스의 스키마와 데이터들이 포함되어 있습니다. 이를 표준 URL 방식으로

호출하여 보고서에 사용하기 위해서는 다음과 같은 과정을 거치면 됩니다:

1. 보고서 디자이너가 설치된 컴퓨터의 바탕화면에서 ReportExpress 디자이너 아이콘을

더블클릭하여 보고서 디자이너를 실행시킵니다.

2. 보고서 디자이너의 왼쪽 하단부의 xml 아이콘을 선택한 후, 캔바스의 Detail 섹션의 적당한

위치에 마우스를 사용하여 XML 데이터 컨트롤을 위치시키십시오.

그림 5. ReportExpress 디자이너에서 XML 데이터 컨트롤 위치시킨 모습

Page 16: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 9 - 사용자 매뉴얼

3. Detail 섹션에 위치시킨 xml 데이터 컨트롤을 선택하고, 마우스의 오른쪽 버튼을 눌러

등록정보(Properties)를 선택합니다.

그림 6. XML 데이터 컨트롤의 등록정보 메뉴를 선택

4. Properites 등록정보 창이 나타나면, FileURL 값으로 http://웹서버의 URL(또는

IP주소)/report/getdata1.asp 를 입력하십시오.

5. Recordset pattern에는 rs://data/z:row 를 입력하십시오. 이 값은 웹서버에서 제공하는

XML 문서의 데이터 스키마를 해석하는 방식(XPath)을 지정하는 것입니다.

Page 17: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 10 - 사용자 매뉴얼

그림 7. XML 데이터 컨트롤 등록정보에서 XML 데이터 서비스 URL과 XPath를 입력

6. 확인 버튼을 눌러 Properties 등록정보창을 닫습니다.

7. 디자이너의 Field창에서 데이터소스 연결 아이콘( )을 클릭하십시오.

8. 보고서 디자이너에서 웹서버의 XML데이터 문서를 연결하여 그 필드 정보를 보여주게 될

것입니다.

Page 18: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 11 - 사용자 매뉴얼

9. XML 데이터 소스 속성값을 정확하게 입력한 경우, 디자이너의 Field창에는 웹 서버의

getdata1.asp에서 질의한 결과셋의 필드들이 보여지게 됩니다.

그림 8. 동적으로 생성되는 XML 웹 페이지(asp의 save 메쏘드 사용)

Page 19: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 12 - 사용자 매뉴얼

그림 9. 동적으로 생성되는 XML 문서를 Xpath로 분석하여 요소와 속성 표시

10. 이제 보고서 레이아웃에서 데이터소스의 필드를 사용할 모든 준비가 끝났습니다. 이제

여러분이 출력을 원하는 위치에 Field 창에서 원하는 필드를 선택하고 드랙앤드롭하시면

됩니다.

Page 20: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 13 - 사용자 매뉴얼

ReportExpress 디자이너 소개

앞장에서는 ReportExpress를 설치하는 방법과 예제로 제공되는 XML문서(getdata1.asp)를

디자이너를 통해 바인딩하는 방법을 살펴보았습니다. 이번 장에서는 보고서를 제작하고, 테스트하며,

저장할 수 있는 보고서 디자이너에 대해 보다 자세한 설명을 하도록 하겠습니다.

사용자 인터페이스 소개

ReportExpress의 ReportExpress 디자이너는 Data Dynamics사의 ActiveReports’ COM 객체를

사용하고 있습니다. 개발자는 마이크로소프트사의 일관된 사용자 인터페이스와 동일한 환경에서

보고서를 제작하고 저장, 출력 그리고 미리보기를 하실 수 있습니다.

그림 10. ReportExpress의 보고소 개발 환경(Designer)

Page 21: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 14 - 사용자 매뉴얼

섹션

보고서 섹션은 한 개의 단위로써 동시에 처리되고 출력되는 컨트롤들을 포함 시킬 수 있습니다.

ReportExpress 디자이너는 다음과 같은 섹션들로 정의되고 있습니다:

ReportHeader (보고서 헤더)

보고서는 보고서 처음부분에 출력되는 한 개의 보고서 헤더 부분을 갖을 수 있습니다. 이것은 일반적

으로 보고서 제목, 테이블 요약, 차트나 문서 그리고 보고서 시작부분에서 한 번만 보여질 정보들과

같은 내용을 출력합니다.

ReportFooter(보고서 꼬리)

보고서는 보고서의 마지막 부분에 출력되는 한 개의 풋터 섹션을 가질 수 있습니다. 이것은 보고서의

요약, 최종 합계 혹은 보고서의 마지막 부분에 한번만 출력시킬 정보들을 사용할 수 있습니다.

PageHeader (페이지 헤더)

보고서는 각 페이지의 윗 부분에 출력시킬 페이지 헤더 섹션을 가질 수 있습니다. 보고서 헤더

섹션이 포함될 때를 제외한 페이지상에 출력되는 첫번째 섹션입니다. 페이지 헤더 섹션은 컬럼 헤더,

페이지 번호, 페이지 제목 혹은 각 페이지의 윗부분에 나타내야할 정보들을 사용할 수 있습니다.

PageFooter (페이지 꼬리)

보고서는 각 페이지의 하단부에 출력되는 페이지 풋터 섹션을 가질 수 있습니다. 페이지 합, 페이지

번호 혹은 각 페이지의 하단부에 출력해야 할 정보들을 사용합니다.

GroupHeader/GroupFooter (그룹 헤더/꼬리)

보고서는 한 개 이상의 중첩된 그룹들을 가질 수 있으며, 각 그룹은 자신들만의 헤더와 풋터 섹션을

가집니다. 헤더 섹션(들)은 디테일 섹션직전에 삽입되고 출력됩니다. 풋터 섹션(들)은 디테일 섹션 바

로 뒤에 삽입되어 출력됩니다.

각 그룹 섹션이 출력되는 횟수는 어떻게 데이터가 그룹핑되었는지에 따라 달라집니다.

ReportExpress 디자이너는 그룹의 경계 조건값이 바뀔 때마다 새로운 그룹(헤더, 디테일 그리고 풋

Page 22: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 15 - 사용자 매뉴얼

터)을 시작합니다.

Detail (디테일)

보고서는 하나의 디테일 섹션을 갖습니다. 디테일 섹션은 보고서의 몸통부분이며 보고서에서 각 레코

드에 대한 한 개의 인스턴스를 생성시킵니다.

보고서 처리 절차

빠른 처리와 출력을 위하여 ReportExpress는 지능적이며, 멀티쓰레딩, 단일경로 처리를 할 수 있는

특성을 보유하고 있습니다. ReportExpress는 모든 페이지를 처리한 후 보여주지 않고, 준비되는 페이

지별로 보여줄 수 있도록 처리하고 있습니다. ReportExpress에서 페이지를 렌더링하지 않는다면, 페

이지내의 데이터 요소가 불명확하기 때문이거나 레이아웃의 처리가 완전히 종료되지 않은 경우 또는

데이터가 사용가능 할 때까지 캐쉬 내에 페이지를 저장하기 때문입니다.

요약 필드들과 함께 묶기 위한 조건들은 즉각적으로 페이지가 출력되지 않는 경우의 주요한 원인들입

니다. 요약 필드들은 계산에 필요한 모든 데이터를 완전히 처리하기 전까지는 출력되지 않습니다. 보

고서 헤더 내에 총합과 같은 복잡한 단계의 요약 필드를 위치시킬 경우, 보고서의 헤더 섹션과 그 다

음에 오는 섹션들은 데이터가 모두 계산되기 전까지는 잠시 출력이 지연될 것입니다.

출력 처리

ReportExpress의 출력은 서로 다른 방식으로 구현이 가능합니다. 가장 간단한 방법은 PrintReport

메쏘드를 호출하는 것입니다. PrintReport 메소드가 호출될 경우, ReportExpress는 보고서가 이전에

처리되었었는지를 확인하게 됩니다. 만일 이전에 처리되지 않았다면, 페이지들을 만들기 위한 처리작

업이 시작됩니다. 그런후, 새로운 출력 작업과 함께 각 페이지들이 출력되면서 출력 작업은 끝나게 됩

니다.

여러분은 보고서가 처리되는 중 혹은 출력되는 중간에 출력을 중지시키거나 취소 시킬 수 있습니다.

중지 메쏘드는 출력 작업을 닫기 전까지는 계속해서 출력 처리작업을 수행하게 됩니다. 취소를 요청

하게 되면 출력작업을 즉시 닫고 저장된 페이지들을 삭제합니다.

더 나아가서, 보고서를 처리하기 위한 Run 메쏘드를 호출할 수 있으며 페이지들을 생성시킬 수 있습

니다. 그런 다음, Printer.StartJob 메쏘드를 사용하여 출력 작업을 시작할 수 있습니다. 그리고

Page 23: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 16 - 사용자 매뉴얼

Print.PrintPage 메쏘드를 사용하여 페이지들중에서 출력할 페이지만을 선택할 수 있습니다. 마지막

으로 Printer.EndJob 메쏘드를 사용하여 출력 작업을 닫습니다.

만일 Run(True)를 사용하여 배경 출력을 이용할 경우에는 PrintProgress 이벤트를 받게됩니다. 보고

서가 배경을 출력하는 동안 상태 속성이 갱신되게 됩니다.

섹션 이벤트들

섹션의 형태나 컨텐츠에 상관없이, 각 섹션은 세 개의 이벤트를 갖습니다 : Format, BeforePrint, 그

리고 AfterPrint.

보고서의 디자인 형태는 실로 다양하기 때문에, 이벤트가 발생되는 순서는 개별적인 보고서의 구성에

따라 달라지게 되기 때문입니다. 이 세 개의 이벤트중에서 BeforePrint 이벤트 다음에 오는 Format

이벤트가 가장 많이 사용되며, 간혹 AfterPrint 이벤트다음에도 올 수 있습니다.

주의: BeforPrint 이벤트가 발생된 다음 AfterPrint 이벤트가 발생하기 전에 Format 이벤트가 발생되

는 것에 대해서만 순서대로 이벤트 처리가 이루집니다. 그러나 여러 레코드들을 포함한 디테일 섹션

에서는 BeforPrint와 AfterPrint 이벤트가 발생하기 전에 몇몇 Format 이벤트가 발생할 수도 있습니

다.

Format

이 이벤트는 데이터가 적재된 후 발생되며 섹션내에 포함된 컨트롤들로 바운드됩니다만, 섹션이 캔바

스에 렌더링되기 전에 일어납니다.

Format 이벤트는 섹션의 높이가 변경될때만 발생됩니다. 이 섹션은 컨트롤들 혹은 서브리포트내에

적재된 컨트롤의 속성 변경이나 설정에 사용될 수 있습니다.

섹션내에 적재되는 컨트롤들의 CanGrow 혹은 CanShrink 속성값이나 섹션 그 자체는 이 섹션내에

적재된 컨트롤들 크기의 확대나 축소에 대해 true로 설정됩니다. 이와 같이 되는 이유는 컨트롤이나

섹션의 높이에 대한 정보가 이 이벤트로부터 획득될 수 없기때문입니다.

Page 24: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 17 - 사용자 매뉴얼

BeforePrint

이 이벤트는 섹션이 캔바스로 렌더링되기직전에 발생됩니다.

섹션의 확대와 축소 및 섹션내의 모든 컨트롤들은 이미 이 이벤트가 발생되면서 자기자리에 위치됩니

다. 이것을 사용하여 섹션내에 위치되는 컨트롤들의 크기를 조정할 수 있습니다.

모든 컨트롤들과 섹션의 크기가 이 이벤트가 발생되면서 정해지기 때문에, 섹션의 정확한 높이를 얻

거나 컨트롤들의 크기를 구하는데 사용될 수 있습니다. 이 이벤트내에서 컨트롤들의 크기를 재조정할

수 있으나 섹션 크기 자체를 조정할 수는 없습니다.

AfterPrint

이 이벤트는 섹션이 캔바스로 렌더링된 후에 발생됩니다.

비록 버전1 서비스팩 3 이전에는 매우 중요한 이벤트로써 디테일 AfterPrint라는 개념을 도입했지만,

더 이상 새로운 버전에서는 사용되는 일이 흔하지 않게되었습니다. 여러분이 섹션 이벤트내에 코드를

작성할 경우, Format이나 BeforePrint 이벤트내에 코드를 작성하게 될 것입니다. 하지만, 이 이벤트

는 이미 캔버스에 텍스트가 렌더링된 후에 캔버스에 무엇인가를 그리려고 할 때 유용하게 사용될 수

있습니다.

툴바

ReportExpress 디자이너의 툴바는 쉽게 커스터마이징하실 수 있습니다. ReportExpress 디자이너의

툴바는 보고서 개발자분들이 익숙하게 사용한 환경에 유사하게 조정하실 수 있는 기능을 제공하고

있습니다.

툴바이동시키기

도킹 툴바를 마우스로 누른채 새로운 위치로 옮기시면 됩니다.

Page 25: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 18 - 사용자 매뉴얼

툴바 커스터마이징 메뉴

툴바의 컨텍스트 메뉴를 보려면, 툴바의 영역내에서 마우스를 더블클릭하시면 됩니다. 컨텍스트

메뉴에서 여러분은 보기를 원하거나 보이지 않게 하려는 툴바의 이름을 선택하시여 추가혹은 제거

버튼을 누르시면 됩니다. 또한, 커스터마이징 옵션메뉴에서 새로운 툴바를 만들거나 기존 툴바를

커스터마이징 할 수 있습니다. 커스터마이징된 툴바 설정값은 user.tb 파일에 저장되고 다음번

ReportExpress 디자이너를 실행시키면 저장된 상태로 실행됩니다.

그림 11. 툴바 커스터마이징(도구 모음 사용자 정의) 창

프로그램 툴바

그림 12. 디자인 모드에서의 툴바

빈 보고서

컨트롤이 없는 빈 보고서를 한 개 생성시킨다.

보고서 만들기

내장된 보고서의 종류를 선택해서 보고서를 생성시킨다. (ADO, XML, RXWeb용 보고서)

로컬 데이터베이스 관리

사용자 컴퓨터상에서 관리되는 보고서 레포지터리의 관리를 한다.

새로만들기 – 처음 ReportExpress를 사용하는 사람이 자신의 로컬 컴퓨터상에 보고서

레포지터르를 운용하고자 할 경우 선택하며, mdb형태로 새로운 데이터베이스를 생성시킨다.

Page 26: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 19 - 사용자 매뉴얼

서버에서 가져오기 – 기존 서버쪽에서 운영되는 보고서 레포지터리 서버의 내용을 로컬

레포지터리 데이터베이스로 복제하고자 할 경우 사용한다.

보고서 데이터베이스 정리 – 로컬 레포지터리의 데이터베이스를 정리하고자 할 경우 사용.

로컬 데이터베이스 백업 – 로컬 레포지터리의 데이터베이스를 백업하고자 할 경우 사용.

보고서 불러오기

보고서 디자이너에 이전에 작업했던 보고서 레이아웃을 불러오고자 할 경우 사용하며, 이때

불러올 수 있는 모드는 3가지를 지원.

파일에서 불러오기 – 파일로 저장한 레이아웃을 불러오고자 할 때 사용

로컬 데이터베이스에서 불러오기 – 로컬 레포지터리에 저장된 보고서 레이아웃을 불러올 때

사용

데이터베이스 서버에서 불러오기 – 서버 레포지터리에 저장된 보고서 레이아웃을 불러올 때

사용

보고서 저장하기

현재 활성화된 보고서를 저장할 때 사용되며, 3가지 모드를 지원.

파일로 – 개발자 자신의 컴퓨터 하드디스크에 파일 형태로 저장

로컬 데이터베이스로 – 개발자 자신의 컴퓨터에서 운영하는 로컬 레포지터리에 저장

데이터베이스 서버로 – 서버쪽에 설치하여 운영하는 레포지터리 서버에 저장

다른 이름으로 저장하기

현재 활성화된 보고서를 다른 이름으로 저장할 때 사용되며, 역시 3가지 모드를 지원.

파일로 – 현재 활성화된 보고서를 다른 이름으로 하드디스크에 파일 형태로 저장

로컬 데이터베이스로 – 현재 활성화된 보고서를 로컬 레포지터리에 다른 이름으로 저장

데이터베이스 서버로 – 현재 활성화된 보고서를 서버 레포지터리에 다른 이름으로 저장

프린터 설정

프린터의 속성을 설정하고자 할 경우 사용

페이지 설정

보고서의 페이지 설정(위,아래,좌,우 여백), 프린터 설정, 캔바스의 그리스 설정등을 하고자

할 경우 사용하며, 클릭했을 때 그림 13의 보고서 설정 창이 나타남. 특히, 이곳에서

페이지 설정과 프린터 설정을 하게 되면 실제 최종 사용자가 출력하게 될 때의 설정 값으로

Page 27: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 20 - 사용자 매뉴얼

적용되며, 그리드 설정시 컨트롤을 그리드에 붙이지 않게 설정하면 Crtl+Shift 키를

사용하여 키보드로 컨트롤의 움직임을 미세하게 조정할 수 있게 됨.

그림 13. 보고서 페이지 설정창

페이지 설정 : 단위는 twip1으로 미리보기 모드나 실제 사용자가 출력하게 되는 용지의

마진 설정을 하는 곳.

1 인치나 센티미터와 같은 절대적인 측정단위계로 스크린에 독립적인 단위계입니다. 1 twip은 프린터의 1/20 포인터와 동일한 길이 단위이며, 프린터의 1 포인터는 1/72 인치와 동일합니다. 1인치는 대략 1440 twips이며 센티미터로는 567 twips가 됩니다(출력될 경우 1 인치 혹은 1 센티미터의 길이).

Page 28: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 21 - 사용자 매뉴얼

그림 14. 프린터 설정창

프린터 설정 : 실제 보고서가 프린터로 출력될 형태를 지정. 프린터의 기능에 따라 양면

출력이나 공급장치등도 이곳에서 설정할 수 있다.

Page 29: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 22 - 사용자 매뉴얼

그림 15. 그리드 설정창

그리드 설정 : 보고서를 디자인할 때 사용하며, 캔바스의 최소단위를 이곳에서 지정하여

디자인의 편이성을 도모하고, 룰러의 단위계를 설정할 수 있도록 하여 원하는 위치에

컨트롤들(텍스트나 이미지)이 정확하게 추가되고 출력될 수 있도록 한다.

Page 30: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 23 - 사용자 매뉴얼

그림 16. 스타일 편집 창

스타일 편집 : 보고서 캔바스에 위치시키는 컨트롤들의 외형을 보다 편리하게 설정할 수

있도록 미리 저장된 스타일로 이곳에서 제작해놓고, 속성창에서 적용시킬 수 있도록 한다.

현재, 한글 폰트에 대한 스타일 적용은 지원되지 않으며, 영문 폰트일 경우에 한해서

지원하고 있다.

툴박스 보이기/숨기기

화면 왼쪽에 보여지는 캔바스에 위치시킬 수 있는 컨트롤들의 아이콘을 보여주거나 숨길 때

사용

속성창 보이기/숨기기

화면 오른쪽에 보여지는 컨트롤의 속성창을 보여주거나 숨길 때 사용

데이터 필드창 보이기/숨기기

화면 왼쪽에 나타나는 데이터 필드창을 보여주거나 숨길 때 사용

인쇄 미리 보기

Page 31: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 24 - 사용자 매뉴얼

활성화된 보고서를 미리보기 모드로 전환하여 실제 보고서의 구현을 테스트하고, 다른

포맷으로 저장할 수 있도록 한다.

실행 취소(Undo)

이전 단계에서 실행시켰던 작업을 되돌릴 때 사용

오려두기(Cut)

컨트롤을 오려서 다른 곳에 붙일 때 사용

복사하기(Copy)

컨트롤을 복사해서 다른 곳에 붙일 때 사용

붙여넣기(Paste)

오려두었거나 복사해 놓은 컨트롤을 캔바스에 붙여넣을 때 사용

주의 : 현재 붙여넣기 기능에서는 오려두었거나 복사해놓은 컨트롤의 속성들 중에서 폰트나

폰트의 크기가 붙여넣기를 했을 때 굴림에 10포인트로 변경됩니다.

지우기

선택한 컨트롤을 지운다.

스크립트 코드 편집

보고서 미리보기에서 실행시킬 특정한 코드를 수행하는 편집 창을 띄운다. 현재,

ReportExpress에서는 이 편집창에서 지원하는 스크립트로 VBscript를 권장하고 있다.

보고서의 각 단계별로 발생되는 이벤트내에 특정한 작업을 수행하는 코드를 편집함으로써

보다 복잡한 보고서를 구현할 수 있도록 지원하고 있다.

눈금 보이기/숨기기

눈금(Grid)을 편집하는 캔바스내에 나타내거나 숨길 때 사용

데이터베이스 정렬

RXWeb형 보고서 디자인에서만 사용가능하며, 보고서에 보여지는 데이터의 특정 행을

원하는 형태로 정렬시킬 수 있다.

필드 필터링

RXWeb형 보고서 디자인에서만 사용가능하며, 보고서에 보여지는 데이터의 특정 행에 대한

조건을 입력하고, 이에 해당되는 데이터들만 볼 수 있게 한다.

파일 탐색기

Page 32: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 25 - 사용자 매뉴얼

디자이너 왼쪽에 위치된 파일 탐색기를 보이게 하거나 숨기는 기능.

데이터베이스 서버 연결 문자열 설정

보고서 레포지터리 서버쪽의 데이터베이스 연결을 위한 환경 설정 및 테스트

미리보기 모드의 툴바

그림 17. 미리보기 모드의 툴바

RDF 파일 읽기

보고서 미리보기 상태를 저장한 정적인 보고서 파일(확장명 RDF)을 불러오기

ReportExpress에서는 런타임시 보고서 생성을 하는 rpx파일과 정적으로 모든 자료를

레이아웃 형태로 가지고 있는 rdf파일을 저장하고 열람할 수 있다.

RDF 파일 저장

현재 활성화된 미리보기 상태의 보고서를 정적인 레이아웃 파일로 저장한다.

내보내기

다른 형태의 포맷으로 보고서를 내보내는 기능 수행. 현재 ReportExpress에서 지원하는

내보내기 포맷은 RTF(Rich Text Format), PDF(Potable Document Format),

HTML(HTML3.2와 DHTML), XLS(Excel Worksheet), TIF(Tagged Image Format)

그리고 Text 입니다.

인쇄하기

현재 활성화된 미리보기 상태의 보고서를 프린터로 출력할 때 사용

디자이너 보기

현재 활성화된 보고서의 미리보기 모드를 디자인 모드로 전환

목차 보기/숨기기

미리보기 상태의 보고서의 목차를 보거나 숨김

눈금자 보기/숨기기

화면 상단과 좌측의 눈금자를 보이게 하거나 숨김

Page 33: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 26 - 사용자 매뉴얼

찾기

보고서내에서 입력한 문자열을 찾기

한페이지씩 보기

보고서를 한장씩 보기

여러 페이지 보기

보고서를 여러 페이지씩 보기

화면 확대/축소하기

보고서를 확대해서 보거나 축소해서 보기

페이지 이동

보고서 페이지 이동(첫페이지로, 앞으로, 뒤로, 마지막페이지로)

히스토리 페이지 이동

메모리에 기억된 페이지들 사이의 이동(앞으로, 뒤로)

새로 고침

RXWeb용 디자인 파일에서만 가능한 기능으로, 기존 데이터를 무시하고 새로 서버쪽의

데이터베이스에 접속해서 데이터를 가져오도록 할 때 사용.

데이터베이스 정렬

RXWeb용 디자인 파일에서만 가능한 기능으로, 현재 데이터에서 원하는 행의 정렬을

지정해서 보기 원할 때 사용

필드 필터링

RXWeb용 디자인 파일에서만 가능한 기능으로, 현재 데이터에서 원하는 행의 조건을

입력해서 데이터를 추출하고자 할 경우 사용 (데이터베이스의 Where절과 유사)

파일 탐색기

디자이너 화면 왼편에 파일 탐색기를 보여주게 하거나 숨기고자 할 때 사용

포맷 툴바

Page 34: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 27 - 사용자 매뉴얼

그림 18. 포맷 툴바

스타일 지정

선택한 컨트롤에 적용시킬 스타일 설정

글꼴 지정

선택한 컨트롤에 적용시킬 글꼴 지정

글꼴 크기 지정

선택한 컨트롤에 적용시킬 글꼴 크기를 지정

굵게

선택한 컨트롤의 폰트를 굵게 함

기울림

선택한 컨트롤의 텍스트를 기울이게 함

밑줄

선택한 컨트롤의 텍스트에 밑줄을 침

글꼴 설정

선택한 컨트롤의 텍스트에 적용시킬 폰트를 설정 함.

주의 : 한글 폰트사용시 스크립트의 설정은 반드시 한글로 해야 함.

Page 35: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 28 - 사용자 매뉴얼

그림 19. 글꼴 설정 창

왼쪽 정렬

선택한 컨트롤의 텍스트를 왼쪽으로 정렬시킴

가운데 정렬

선택한 컨트롤의 텍스트를 가운데로 정렬시킴

오른쪽 정렬

선택한 컨트롤의 텍스트를 오른쪽으로 정렬시킴

위쪽 정렬

선택한 컨트롤의 텍스트를 윗쪽으로 정렬시킴

가운데 정렬

선택한 컨트롤의 텍스트를 가운데로 정렬시킴

아래 정렬

선택한 컨트롤의 텍스트를 아랫쪽으로 정렬시킴

Page 36: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 29 - 사용자 매뉴얼

배경색

선택한 컨트롤의 배경색을 칠함

글자색

선택한 컨트롤의 텍스트 색을 칠함

선색

선택한 선의 색을 칠함

선종류

선택한 선의 종류를 선택

테두리

선택한 컨트롤의 테두리를 선택

툴박스

그림 20. 툴 박스

개체 선택

활성화된 캔바스내에서 컨트롤을 선택합니다.

레이블

캔바스내에 새로운 레이블 컨트롤을 삽입합니다. 레이블은 텍스트 문자열을 사용할 경우에

삽입합니다.

필드

캔바스내에 새로운 필드를 삽입합니다. 필드는 데이터베이스 필드와 바운드(연결)시킬 때

사용합니다.

체크박스

Page 37: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 30 - 사용자 매뉴얼

캔바스내에 플드 체크박스를 삽입합니다. 데이터베이스 필드에 바운드시켜 사용할 수

있습니다.

이미지

캔바스내에 그림을 삽입합니다. 그림은 파일로부터 선택할 수 있으며, 삽입된 파일은 보고서

레이아웃내에 인코딩됩니다.

캔바스내에 선을 삽입합니다.

팁 : 수평으로 직선을 그릴경우에는 컨트롤키를 누르면서 마우스로 그리면 되며,

쉬프트키를 함께 누르면서 그리면 수직으로 그려지게 됩니다.

사각형

캔바스내에 모양(사각형, 둥근 모서리, 타원)을 그립니다.

리치 텍스트

캔바스내에 리치 에디터를 삽입하고, 텍스트들을 입력하게 합니다.

프레임

캔바스내에 프레임을 삽입하여, 테이블을 편집할 수 있도록 합니다.

서브 리포트

캔바스내에 서브 리포트를 삽입합니다. 서브 리포트를 이용하여 복잡한 양식이나 다단

편집에서 불가능한 보고서 레이아웃을 그릴 수 있습니다.

주의 : 서브 리포트를 삽입하면, 스크립트 편집기에서 해당 밴드의 Onformat 이벤트에

서브 리포트.Object = CreateSubreport(“리포트 이름”) 메쏘드를 호출해야만 합니다.

페이지 나눔

원하는 위치에서 다음 페이지로 넘김수 있는 컨트롤

OLE 객체

캔바스내에 OLE객체를 삽입합니다. ADO로 데이터를 연결한 경우 데이터베이스의 BLOB

형태로 저장된 이미지를 보여주고자 할 경우 사용할 수 있습니다.

Page 38: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 31 - 사용자 매뉴얼

ActiveX 객체

캔바스내에 ActiveX 객체를 삽입합니다. 라이센스를 필요로 하는 ActiveX 컨트롤의

경우에는 스크립트 편집기에서 다음과 같은 코드를 추가해야만 합니다.

Report.Sections("Detail").Controls.Add("<ActiveX 컨트롤 progid >")

현재 ReportExpress V3에서 지원되는 챠트는 MSChart이며, 이것 역시 ActiveX 컨트롤로

사용하게 됩니다.

바 코드

캔바스내에 바코드 컨트롤을 삽입합니다. ReportExpress에서는 총 23종류의 바코드 폰트를

지원하고 있습니다.

날짜 삽입

캔바스내에 현재 날짜를 삽입합니다. 속성창의 OutputFormat에서 그 형식을 지정할 수

있습니다.

예 : 2002년 8월 15일 -> yyyy년 m월 d일

2002년 08월 05일 -> yyyy년 mm월 dd일

페이지 번호

원하는 밴드에 페이지 번호를 삽입합니다.

ADO 데이터 컨트롤

보고서에서 바인딩(연결)시킬 데이터를 ADO 방식으로 설정합니다.

DAO 데이터 컨트롤

보고서에서 바인딩(연결)시킬 데이터를 DAO 방식으로 설정합니다.

RDO 데이터 컨트롤

보고서에서 바인딩(연결)시킬 데이터를 RDO 방식으로 설정합니다.

XML 데이터 컨트롤

Page 39: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 32 - 사용자 매뉴얼

보고서에서 바인딩(연결)시킬 데이터를 XML 방식으로 설정합니다. 웹 리포팅을 구현하고자

할 경우 사용되는 방식으로 XML 데이터소스에 연결할 때는 반드시 해당 XML 문서의

노드들을 파싱할 수 있는 XPath도 함께 지정해야만 합니다.

본 사용자 매뉴얼에서는 데이터컨트롤에 대한 자세한 기술적인 서술은 생략하겠습니다. 각 데이터

컨트롤에 대한 자세한 정보는 마이크로소프트사의 데이터베이스 기술 서적들을 참조하십시오.

정렬 툴바

그림 21. 정렬 툴바

앞으로 가져오기

선택한 컨트롤의 Z 순서(캔바스내에 위치된 모든 컨트롤들은 레이아웃내에 상하 위치가

배정되며 이 상하 위치의 축을 Z순서라고 부름)를 한 단계 윗쪽으로 조정.

뒤로 보내기

선택한 컨트롤의 Z 순서를 한 단계 아랫쪽으로 조정.

왼쪽 정렬

컨트롤키를 함께 누르면서 마우스로 선택한 컨트롤들 중에 맨 마지막으로 선택한 컨트롤의

수평방향으로 왼쪽 기준에 모든 컨트롤들을 정렬시킴.

가운데 정렬

컨트롤키를 함께 누르면서 마우스로 선택한 컨트롤들 중에 맨 마지막으로 선택한 컨트롤의

수평방향으로 가운데 기준에 모든 컨트롤들을 정렬시킴.

오른쪽 정렬

컨트롤키를 함께 누르면서 마우스로 선택한 컨트롤들 중에 맨 마지막으로 선택한 컨트롤의

수평방향으로 오른쪽 기준에 모든 컨트롤들을 정렬시킴.

위쪽 정렬

컨트롤키를 함께 누르면서 마우스로 선택한 컨트롤들 중에 맨 마지막으로 선택한 컨트롤의

수직방향으로 윗쪽 기준에 모든 컨트롤들을 정렬시킴.

Page 40: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 33 - 사용자 매뉴얼

가운데 정렬

컨트롤키를 함께 누르면서 마우스로 선택한 컨트롤들 중에 맨 마지막으로 선택한 컨트롤의

수직방향으로 가운데 기준에 모든 컨트롤들을 정렬시킴.

아래 정렬

컨트롤키를 함께 누르면서 마우스로 선택한 컨트롤들 중에 맨 마지막으로 선택한 컨트롤의

수직방향으로 아랫쪽 기준에 모든 컨트롤들을 정렬시킴.

모눈에 맞춤

선택한 컨트롤들이 위치한 곳에서 가장 가까운 모눈으로 붙임

모두 같은 크기로

선택한 컨트롤들중 맨 마지막으로 선택한 컨트롤의 높이와 너비와 같아지도록 설정

같은 높이로

선택한 컨트롤들중 맨 마지막으로 선택한 컨트롤의 높이와 같아지도록 설정

같은 너비로

선택한 컨트롤들중 맨 마지막으로 선택한 컨트롤의 넓이와 같아지도록 설정

컨트롤 잠그기

캔바스내의 컨트롤들의 조정을 하지 못하도록 설정

Page 41: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 34 - 사용자 매뉴얼

데이터 필드 항목

보고서 탐색기의 하단부에 위치한 두번째 창에서는 데이터 소스에 관련된 필드의 목록을 보여줍니다.

필드 목록은 여러분이 제작한 보고서에서 사용되는 데이터 컨트롤에 기반을 두고 있습니다. 일단

데이터 컨트롤이 데이터베이스로 연결되었다면, 항목 가져오기 버튼( )을 눌러 데이터 필드가

생성될 수 있도록 합니다.

이렇게 생성시킨 데이터 필드는 드랙앤드롭을 통해 보고서의 어떤 섹션에도 위치시킬 수 있습니다.

ReportExpress 디자이너는 드롭된 데이터 필드에 대한 텍스트박스 컨트롤을 자동으로 생성시키고,

데이터 소스에 연결 시킵니다.

XML 데이터 컨트롤 사용시 잘못된 Xpath가 입력되면 오류가 나게 됩니다.

보고서 디자이너에서 컨트롤 사용하기

보고서에 컨트롤들을 추가시키려면 :

1. 툴박스에서 여러분이 추가시키려는 컨트롤을 선택합니다.

2. 컨트롤을 추가시키고자 하는 섹션의 위치까지 마우스를 움직이십시오; 그러면 마우스의

포인터가 십자형의 모양으로 변하게 될 것입니다.

3. 컨트롤의 원하는 크기까지 마우스를 클릭한 상태에서 움직여 주십시오.

4. 이제 컨트롤은 여러분이 원하는 위치에 놓여지게 되고, 툴박스의 현재 선택된 부분은 선택

포인터( )가 될 것입니다.

팁 : 동일한 컨트롤을 여러 개 추가하고자 할 경우, 툴박스에서 컨트롤키(Ctrl)를 누른상태로

섹션내에 컨트롤들을 위치시켜주시면 됩니다.

팁 : 라인 컨트롤들은 Ctrl키를 누른상태에서 그리면 수평으로되며, Shift키를 누른 상태에서 그리면

수직으로 그려지게 됩니다.

Page 42: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 35 - 사용자 매뉴얼

ActiveX 와 OLE 컨트롤

ReportExpress 디자이너에서는 OLE 객체와 ActiveX 컨트롤의 모든 기능을 사용할 수 있습니다.

보고서에 OLE 컨트롤을 사용하기 위해서는:

1. 툴박스에서 OLE 컨트롤 아이콘을 선택합니다.

2. 컨트롤이 삽입될 영역을 선택합니다.

3. 캔바스에 삽입될 객체 대화창이 나타납니다.

그림 22. OLE 컨트롤 삽입 설정 창

4. 삽입될 OLE 객체의 형태를 선택하고 확인버튼을 눌러 대화창을 끝내십시오.

5. 또는, 취소버튼을 눌러 ReportExpress 디자이너에서 객체 클래스를 데이터 필드로부터

바운드시킬 수 있도록 합니다.

Page 43: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 36 - 사용자 매뉴얼

ActiveX 컨트롤을 보고서에 삽입하기 위해서는 :

1. 툴박스에서 ActiveX 컨트롤 아이콘을 선택하십시오.

2. 캔바스에 삽입될 ActiveX 대화창을 보여줍니다. 사용할 컨트롤을 선택하십시오.

그림 23. ActiveX 컨트롤 삽입 대화창

컨트롤의 영역을 그리십시오. ActiveX는 이 영역내에서만 프린트될 것입니다. ReportExpress

뷰어에서는 사용된 ActiveX 컨트롤의 내용에 따라 자동으로 크기를 조절해주지 않습니다. 보고서

미리보기를 사용하여 정확한 크기를 설정하여 주십시오.

여러 개의 컨트롤 선택하기

여러분은 여러 개의 컨트롤들을 선택하고 이동하거나, 복사 혹은 다른 작업들을 처리할 수 있습니다.

하나 이상의 컨트롤을 사용하는 방법은 다음의 세가지 방식이 지원됩니다:

1. Shift키나 Ctrl키를 누른상태에서 여러분이 원하는 컨트롤들을 선택하십시오.

2. 아무것도 없는 영역을 클릭하고, 선택하고자 하는 컨트롤들이 포함되는 영역을 사각형의

형태로 마우스로 포함시켜 주십시오. 이때 다른 섹션에 존재하는 컨트롤은 선택되지

않습니다.

3. 수평 혹은 수직 지시자(룰러)를 클릭하고 선택하고자 하는 컨트롤들이 포함되어 있는 영역을

Page 44: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 37 - 사용자 매뉴얼

포함하도록 그려나가면, 캔버스의 색깔이 회색으로 변하게 됩니다. 회색으로 변한 영역에

속한 컨트롤들은 모두 선택되게 됩니다.

그림 24. 여러 개의 컨트롤 선택하기

컨트롤 이동과 크기조절

선택한 컨트롤들을 이동시키고자 할 경우, 먼저 컨트롤을 선택하고 마우스로 이동시키시면 됩니다.

또한 여러분은 속성창내에서 좌표 속성이나 크기(높이와 넓이) 값을 조정하실 수도 있습니다.

주의: 컨트롤의 크기가 섹션의 경계이상으로 커질경우, 섹션은 컨트롤의 새로운 크기를 포함할 수

있도록 그 크기를 조정합니다.

Page 45: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 38 - 사용자 매뉴얼

섹션 크기 조절

여러분은 보고서에서 섹션의 폭과 넓이를 바꾸실 수 있습니다. 각 섹션의 높이는 개별적으로 수정이

가능합니다. 그러나, 모든 섹션의 폭은 동시에 바뀝니다. 섹션의 폭을 변화시키는 것은 보고서의

출력되는 넓이를 변화시키게 됩니다.

l 섹션의 폭을 변경하시기 위해서는 먼저 마우스의 포인터를 섹션의 오른쪽 모서리쪽으로

위치시키십시오. 그리고 마우스를 클릭한 상태에서 섹션의 폭을 넓히시기 위해서는

오른쪽으로 드래그하시고, 좁히시기 위해서는 왼쪽으로 드래그 하십시오.

l 섹션의 높이를 변경하시기 위해서는 먼저 마우스의 포인터를 섹션의 아랫쪽

모서리부분에 위치시키십시오. 그리고 마우스를 클릭한 상태에서 섹션의 높이를

확장시키시려면 아랫쪽으로 드래그하시고, 줄이실려면 윗쪽으로 드래그하십시오.

l 섹션의 높이를 조절하시는 다른 방법은 수직 룰러에 포함된 버튼을 사용하는

것입니다. 이 버튼을 윗쪽이나 아랫쪽으로 움직임으로써 높이를 조절할 수 있습니다.

l 을 더블 클릭함으로써 섹션의 높이를 그 안에 포함된 내용에 일치하도록

빠르게 조절할 수 있습니다.

l 섹션의 높이와 넓이를 모두 변경하실려면, 섹션의 오른쪽 하단부 모서리에 마우스의

포인터를 위치시키고 대각선 방향으로 마우스를 드래그하여 크기를 조정할 수 있습니다.

컨트롤 배치와 크기 조절

컨트롤의 배치와 크기조절 툴바 버튼은 여러분이 보고서를 만들 때 보다 쉽게 작업할 수 있도록

도와드립니다.

l 보고서에서 조정하고자 하는 여러 컨트롤들을 선택할 때, 배치와 크기를 기준으로 삼는

컨트롤이 마지막에 선택이 되었는지를 확인하십시오.

l 크기조절 툴바에서 여러분이 원하는 정렬 혹은 크기 버튼을 누르시면, 마지막에 선택된

컨트롤을 기반으로 나머지 선택된 컨트롤들의 배치 혹은 크기가 조정됩니다.

l 선택한 컨트롤들의 수직 배열 혹은 수직 크기의 변경도 위와 같은 방식으로 할 수

있습니다.

Page 46: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 39 - 사용자 매뉴얼

컨트롤 포맷하기

폰트 속성 설정하기

라벨이나 필드 컨트롤의 문자를 포맷하기 위해서는, 속성창의 버튼을 클릭합니다.

그림 25. 글꼴 설정 창

화면에 나타난 글꼴 설정 대화창에서 원하는 글꼴과 속성을 선택하시면 됩니다.

주의: 한글 폰트를 설정할 경우, 반드시 스크립트의 속성이 한글로 설정되어야만 정상적으로 한글이

구현됩니다. 글꼴만 한글 글꼴을 선택하고, 스크립트는 한글로 설정하지 않은 경우 처리속도가 매우

느려지는 현상이 나타납니다!

Page 47: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 40 - 사용자 매뉴얼

포그라운드와 백그라운드 색상 설정하기

전경색과 배경색은 포맷툴바의 색 팔레트 툴박스에 있는 컬러 드롭-다운을 사용하여 설정하실 수

있습니다. 포맷 툴바의 배경색 팔레트는 컨트롤들의 일반속성값을 검정색으로 설정할 수 있으며,

배경색을 다른 지정한 색으로 바꿀 수도 있습니다. 배경색은 컨트롤의 BackStyle이

Transparent(투명)로 설정된 경우 보이지 않습니다. 색 팔레트 툴박스는 윈도우 창의 어디서든지

빠르게 사용할 수 있도록 마우스로 드래그하여 띄우던지 도킹 시킬 수 있게 되어있습니다.

경계 스타일 설정하기

1. ReportExpress 디자이너에서는 대부분의 컨트롤들의 경계를 다양한 선 스타일과 옵션으로

설정할 수 있도록 하였습니다. 컨트롤의 컨텍스트 메뉴로부터 경계 속성 등록창을 사용하여

경계의 스타일을 선택하실 수 있습니다. 하나이상의 컨트롤들의 경계값을 동시에 설정하실

수 있습니다.

2. 라벨이나 필드를 선택하십시오.

3. 컨텍스트 메뉴를 보기위해 오른쪽 마우스 버튼을 클릭하고, Format Border를 선택하거나

4. 메인 툴바에서 테두리를 선택하십시오.

Page 48: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 41 - 사용자 매뉴얼

그림 26. 경계 설정 대화창

5. 선 스타일과 색을 선택하여 컨트롤의 각 측면 경계를 설정하신 후, 설정을 원하는 측면을

클릭하십시오. Presets에는 일반적인 경계선 설정을 위한 항목들을 포함하고 있기 때문에

여러분은 보여지는 스타일의 경계를 선택하기위해 버튼을 클릭하시면 됩니다. 경계선을

지우려면 Line Style에서 None을 선택하고 Preview 프레임에서 지우기 원하는 쪽의 경계를

선택하시면 됩니다.

Page 49: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 42 - 사용자 매뉴얼

출력 스타일 설정하기

ReportExpress 디자이너는 사용하기 쉬운 번호 포맷 대화창을 제공하고 있습니다. 여러분은 이

대화창을 사용하여 올바른 포맷 매스크를 적용시킬 수 있도록 OutputFormat 속성값을 설정할 수

있습니다.

그림 27. OupputFormat 설정 대화창

이 대화창을 사용하기 위해서는 속성창에 있는 OutputFormat 속성의 버튼(… )을 클릭하십시오.

설정창에서 설정한 출력 포맷을 커스터마이징하기 위해서는 속성창의 OutputFormat 값을

변경하시면 됩니다.

Page 50: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 43 - 사용자 매뉴얼

프린터와 페이지 설정

페이지 설정 대화창 이용하기

ReportExpress 디자이너에서는 보고서를 디자인할때(런타임에도 가능) 출력될 페이지 설정을 할 수

있도록 되어있습니다. 페이지 설정 대화창(아래 그림)에서 메인 툴바 메뉴의 페이지 설정( )을

선택하면 됩니다.

그림 28. 페이지 설정 대화창

페이지 설정 대화창에서 페이지의 마진(왼쪽, 오른쪽, 위 그리고 아래쪽)을 변경할 수 있고 가터값도

설정하실 수 있으며 거울마진 옵션도 선택할 수 있도록 되어있습니다.

Page 51: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 44 - 사용자 매뉴얼

가터값과 거울마진을 선택함으로써 보고서를 쉽게 원하는 데로 출력하실 수 있습니다. 거울마진을

선택한 경우, 보고서는 한쪽편에 설정한 넓이와 바깥쪽 마진을 반대쪽에도 그대로 적용시킬 수 있게

됩니다. 가터값을 지정하면 페이지의 모서리와 페이지의 마진사이의 추가 공간을 설정할 수 있습니다.

이러한 설정값들에 의해 추가적인 공간을 제공함으로서 보고서에서 서로 경계를 사용할 수 있습니다.

프린터 설정 대화창 이용하기

ReportExpress 디자이너에서는 보고서 디자인할때(런타임에도 가능) 프린터의 설정을 할 수 있도록

되어있습니다. 프린터 설정 대화창(아래 그림)은 메인 툴바 메뉴의 파일->페이지 설정을 선택하여

보실 수 있고 보고서 설정 대화창의 프린터 설정 옵션 버튼을 클릭하면 나타납니다.

그림 29. 프린터 설정 대화창

Page 52: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 45 - 사용자 매뉴얼

프린터 설정 대화창에서 프린터의 종이 크기와 방향을 설정할 수 있으며 paper bin(종이 공급자)

설정은 물론 사용할 collation(모아찍기)의 종류와 duplexed(양면 출력)까지도 설정할 수 있습니다.

또한 프린터 설정 대화창에서는 사용자 지정 종이 크기도 설정할 수 있습니다. 사용자 지정 종이

크기의 설정은 PaperSize 드롭다운 박스의 항목중 “Custom paper size”를 선택하고 지정하시면

됩니다. 일단 이 옵션이 설정되면, 넓이와 높이 옵션이 설정될 수 있도록 활성화 됩니다.

주의: 사용자 정의 종이 크기는 사용된 프린터에서 지정한 종이 크기를 지원할 때만 가능합니다.

만약 지원되지 않는 종이 크기를 사용하게 된다면, 사용자 지정 종이 크기는 무시됩니다.

페이지와 프린터 설정을 코드로 바꾸기

ReportExpress 디자이너에서는 보고서 디자인을 하는 경우와 더불어 실행시에도 종이와 프린터

설정을 할 수 있습니다. 코드를 사용하여 프린터의 장치명을 변경하고 프린터 설정 대화창내에서

가능했던 프린터 설정값들도 역시 설정할 수 있습니다. 또한, 몇가지 다른 프린터 설정 옵션도 설정할

수 있습니다.

주의 : 프린터 설정을 변경할 경우, 반드시 ReportStart 나 before 이벤트내에서 코드를 입력하셔야

합니다.

DeviceName

DeviceName을 지정함으로서 보고서에서는 특정한 프린터를 사용할 수 있도록 코딩됩니다.

DeviceName을 설정할 경우에는 프린터의 이름과 완전한 경로를 사용하셔야 합니다. 예:

Sub OnReportStart

Subrpt.Printer.DeviceName = "\\ServerP01\HP LaserJet 5/5M"

End

또한 DeviceName에 널문자를 설정하실 수도 있습니다. 프린터 설치를 하지 않은 컴퓨터에서는

ReportExpress 디자이너에서 기본값을 사용하거나 특정한 프린터를 설정하여 페이지와 프린터

지정을 한 경우, DeviceName에 널문자를 설정하시기를 권장합니다.

Page 53: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 46 - 사용자 매뉴얼

Orientation

보고서의 출력 방향은 다음과 같은 코드를 사용하여 변경시키실 수 있습니다.:

Sub OnReportStart

Dim lFlag

If lFlag Then

rpt.PageSettings.Orientation = ddOLandscape

Else

rpt.PageSettings.Orientation = ddOPortrait

End If

End

또한 페이지의 출력 방향은 PageStart 이벤트내에서 유사한 방식으로 호출함으로써 설정하실 수도

있습니다. 예를 들어, 다음의 코드를 사용하면 각 페이지의 출력 방향을 가로에서 세로로 변화시킬 수

있습니다.

Sub OnReportStart

Dim bFlag

If bFlag Then

rpt.PageSettings.Orientation = ddOPortrait

bFlag = False

Else

rpt.PageSettings.Orientation = ddOLandscape

bFlag = True

End If

End

주의 : rpt.Printer.Orientation 대신 rpt.PageSettings.Orientation을 사용할 경우, 출력 방향은

보고서의 일부분으로 저장이 됩니다.

Page 54: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 47 - 사용자 매뉴얼

PaperSize

PaperSize 속성값은 보고서를 미리 정의된 종이 타입으로 설정할 수 있도록 합니다. 다음의 목록은

미리 정의된 PaperSize 설정 값들입니다. :

1 Letter, 8 1/2 x 11 in

2 +A611Letter Small, 8 1/2 x 11 in

3 Tabloid, 11 x 17 in

4 Ledger, 17 x 11 in

5 Legal, 8 1/2 x 14 in

6 Statement, 5 1/2 x 8 1/2 in

7 Executive, 7 1/2 x 10 1/2 in

8 A3, 297 x 420 mm

9 A4, 210 x 297 mm

10 A4 Small, 210 x 297 mm

11 A5, 148 x 210 mm

12 B4, 250 x 354 mm

13 B5, 182 x 257 mm

14 Folio, 8 1/2 x 13 in

15 Quarto, 215 x 275 mm

16 10 x 14 in

17 11 x 17 in

18 Note, 8 1/2 x 11 in

19 Envelope #9, 3 7/8 x 8 7/8 in

20 Envelope #10, 4 1/8 x 9 1/2 in

21 Envelope #11, 4 1/2 x 10 3/8 in

22 Envelope #12, 4 1/2 x 11 in

23 Envelope #14, 5 x 11 1/2 in

24 C size sheet

25 D size sheet

Page 55: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 48 - 사용자 매뉴얼

26 E size sheet

27 Envelope DL, 110 x 220 mm

29 Envelope C3, 324 x 458 mm

30 Envelope C4, 229 x 324 mm

28 Envelope C5, 162 x 229 mm

31 Envelope C6, 114 x 162 mm

32 Envelope C65, 114 x 229 mm

33 Envelope B4, 250 x 353 mm

34 Envelope B5, 176 x 250 mm

35 Envelope B6, 176 x 125 mm

36 Envelope, 110 x 230 mm

37 Envelope Monarch, 3 7/8 x 7 1/2 in

38 Envelope, 3 5/8 x 6 1/2 in

39 U.S. Standard Fanfold, 14 7/8 x 11 in

40 German Standard Fanfold, 8 1/2 x 12 in

41 German Legal Fanfold, 8 1/2 x 13 in

255 User Defined

주의 : PaperSize는 사용하는 프린터에서 지원되는 종이 타입만을 사용할 수 있습니다. 지정된

PaperSize를 지원하지 않는 프린터의 경우, 보고서는 선택된 프린터의 기본 PaperSize를 사용하게

될 것입니다. 코드내에서 종이 크기를 설정하고자 하려면, ReportStart 나 PageStart 이벤트내에

다음과 같이 코딩하십시오.

Sub OnReportStart

Dim pgCounter

pgCounter = pgCounter + 1

If pgCounter > 1 Then

rpt.PageSettings.PaperSize = 1 'Letter

Page 56: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 49 - 사용자 매뉴얼

End If

rpt.PageSettings.PaperSize = 5 'Legal

End

위의 예제 코드에서 보고서의 첫번째 페이지는 legal로 설정되었으며, 그 다음 페이지부터는 letter로

설정되었습니다.

PaperSize를 256으로 설정한 경우, 사용자 정의 PaperSize로 설정되게 됩니다. 사용자 정의 종이

크기를 사용하기 위해서는 PaperWidth값과 PaperHeight 값을 지정해 주셔야만 합니다.

Sub OnReportStart

rpt.PageSettings.PaperSize = 256 'Custom PaperSize

rpt.PageSettings.PaperHeight = 6 * 1440 'Six inches

rpt.PageSettings.PaperWidth = 6 * 1440 'Six inches

End

주의 : DeviceName을 널문자로 설정함으로써 어떠한 PaperSize도 사용가능하게 할 수 있습니다.

그러나, 이렇게 함으로써 프린터가 설정되지 않더라도 보고서가 출력되는 것을 방지할 수 없게

됩니다.

Margins

보고서의 마진은 다음과 같이 하여 코드내에서 설정이 가능합니다:

Sub OnReportStart

rpt.PageSettings.BottomMargin = 720 '1/2 Inch

rpt.PageSettings.TopMargin = 2880 '2 Inches

rpt.PageSettings.LeftMargin = 720 '1/2 Inch

rpt.PageSettings.RightMargin = 720 '1/2 Inch

End

Page 57: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 50 - 사용자 매뉴얼

주의 : 마진값은 트윕스(twips2)가 단위가 됩니다. 즉, 1 인치의 마진은 1440 트윕스와 동일합니다.

PrintWidth

PrintWidth값을 바꾸면 보고서가 출력될 물리적인 공간의 양이 바뀌게 됩니다. 만일 보고서의 크기가

런타임시에 변경된다면, 즉, 디자이너에서 PrintWidth를 8.5인치로 한 경우라도 출력방향을 가로에서

세로로 바꾼다면 PrintWidth 역시 이에 맞추어주어야만 합니다. 이러한 것들은 프린터가 되는 실제

영역내에 포함되도록 하기 위해서 입니다.

Sub OnReportStart

rpt.PageSettings.Orientation = ddOLandscape

'새로 printwidth 를 11 inches로 설정하고,

'오른쪽 마진만큼 값을 빼준다

rpt.PrintWidth = 11 * 1440 - (rpt.PageSettings.LeftMargin + rpt.PageSettings.RightMargin)

End

중요 : 빈 페이지나 빨간 수직 라인 : 만약 보고서의 너비에 왼쪽과 오른쪽 마진을 더한 값이 실제

종이의 너비보다 클 경우에는, 각 보고서 페이지사이에 빈 페이지가 출력되게 됩니다. 보고서의

크기가 페이지보다 넓은 경우에는 수직으로 빨간 점선이 오른쪽편에 나타나게 됩니다. 이러한

문제점을 해결하는 방법은 PageLeftMargin + PrintWidth + PageRightMargin 합계가 출력될

페이지의 너비(Printer.PaperWidth)보다 작도록 하는 것입니다.

2 인치나 센티미터와 같은 절대적인 측정단위계로 스크린에 독립적인 단위계입니다. 1 twip 은

프린터의 1/20 포인터와 동일한 길이 단위이며, 프린터의 1 포인터는 1/72 인치와 동일합니다.

1 인치는 대략 1440 twips 이며 센티미터로는 567 twips 가 됩니다(출력될 경우 1 인치 혹은 1

센티미터의 길이).

Page 58: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 51 - 사용자 매뉴얼

ReportExpress 디자이너에서 XML 데이터소스 연결시키기

XML 데이터베이스 연결하기:

1. XML 데이터 속성에서 FileUrl 값에 XML 파일이나 URL을 설정합니다.

2. RecordSetPattern에 XSL 패턴(XPath)을 입력합니다.

그림 30. XML 데이터 컨트롤 속성 설정 창

XSL 패턴은 XML 파일의 노드들을 지시함으로서 보고서에서 생성시킬 데이터 반복이 가능하도록

합니다. 사용예 : 패턴을 //CUSTOMER 라고 입력한 경우, XML 파일의 각 CUSTOMER 노드에 대한

반복이 구현됩니다. 보고서에서는 디테일 섹션내에 생성시킨 XML 컨트롤의 RecordSetPattern을

설정한 후에 선택된 각 노드들을 사용합니다.

주의: XML 패턴들은 대소문자를 구별합니다.

Page 59: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 52 - 사용자 매뉴얼

전형적인 XSL 패턴들은 다음과 같습니다.

패턴 설명

//* 모든 노드들

//ITEM 모든 ITEM 노드들

/ 루트 아이템

/LAYOUT/ITEM/* /LAYOUT/ITEM의 모든 자식 노드들

//ITEM[@type] 타입 속성을 포함하는 모든 아이템 노드들

//ITEM[@id=”1”] id 속성값이 “1”인 모든 아이템 노드들

//rs:data/z:row MSXML에서 지원하는 레코드셋 데이터 노드들

RecordSetPattern의 값을 변경하면, 필드 항목 윈도우내에 보여지는 목록들은 XML 문서를 근거로

새로운 노드들의 패턴값을 반영할 것입니다.

주의: XML 데이터컨트롤을 사용하기 위해서는 반드시 MSXML3(그 상위 버전 포함) 컴포넌트가

설치되어 있어야만 합니다.

XML 데이터베이스에서, 데이터는 계층적인 구조를 갖고 있기 때문에 데이터 바인딩은 지정한 Xpath

수식에 의해 수행됩니다. 예를 들어, XML 데이터 컨트롤의 RecordSetPattern을 //ITEM 이라고

설정하고 XML 데이터베이스가 ITEM 노드에 address 속성을 추가했다면, 필드의 DataField속성은

@address로 설정될 것입니다. ReportExpress 디자이너에서는 현재의 ITEM 노드에 @address

Xpath를 적용시키고 컨토를에 값을 배정합니다.

컨트롤의 DataField속성을 설정할 경우, 이전 노드로 움직이기 위해 사용하는 “../”를 사용하여 상위

레벨의 노드들에 접근할 수 있습니다.

ReportExpress 디자이너에서는 강력한 Xpath 빌더를 제공하고 있습니다. 이를 이용하여 사용자가

보고서 디자이너의 캔버스에 필드 항목 브라우저내에 나타난 아이템들을 마우스로 드랙앤드롭

방식으로 갖다 놓고 사용할 수 있습니다.

참고 : W3C의 Xpath에 관련된 문서는 http://www.w3.org/TR/xpath에서 찾아보실 수 있으며,

학습서는 http://www.zvon.org/xxl/XPathTutorial/General/examples.html에서 구하실 수

있습니다.

Page 60: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 53 - 사용자 매뉴얼

간단한 예제 보고서 작성하기

이번 장부터는 여러분은 단계별로 진행되는 방식으로 실제 예제 보고서들을 작성해봄으로써, 실무에

적용시킬 수 있는 보고서를 만드는 능력을 배양하도록 구성되어 있습니다. 본 문서에 나오는 내용은

ReportExpress를 설치한 웹 문서 디렉토리의 하부 디렉토리인 examples 밑에서 찾으실 수

있습니다. 만일 여러분이 다른 디렉토리를 만들고 그 곳에서 예제를 작성하시고자 할 경우에는, 본

예제 코딩의 디렉토리부분만 알맞게 수정하시면 됩니다.

그림 31. 제공되는 예제 목록

Page 61: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 54 - 사용자 매뉴얼

간단한 테이블 혹은 리스트형 보고서

- 웹문서 디렉토리\report\examples\list 디렉토리밑에 예제 파일들이 들어있습니다.

가장 간단한 보고서 스타일은 데이터 소스로부터 테이블형태의 리스트형 필드를 보여주는

보고서입니다. 이러한 간단한 테이블 혹은 리스트형 보고서를 만들기 위해서는 XML 데이터소스를

웹서버 혹은 웹 어플리케이션 서버쪽에 만들어주고, ReportExpress 디자이너에서 XML

데이터컨트롤을 사용하여 FileURL과 RecordSetPattern 속성값을 설정하여 보고서에서 사용할

레코드셋을 바운드(연결)시켜주는 기본절차 과정이 필요합니다.:

1. 웹서버에 customer.asp 파일을 만들어 주십시오.

2. 본 문서에서는 ReportExpress에서 제공하는 예제 데이터베이스(Nwind.mdb라는 Access

데이터베이스를 사용하는 예제로 설명합니다)를 이용하여 XML 문서를 생성하는 목적으로

customer.asp 파일을 만들겠습니다(ReportExpress가 설치된 폴더내에 저장하십시오).

다음은 코드예제 입니다.

<%

' 변수 설정

Option Explicit

dim rs

dim doc

dim cn

dim cnn_string

dim sql_string

' 객체 생성

set cn = server.CreateObject("ADODB.Connection")

set rs = server.CreateObject("ADODB.Recordset")

set doc = server.CreateObject("MSXML2.DomDocument")

' 연결문자 지정

Page 62: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 55 - 사용자 매뉴얼

cnn_string = "Provider=Microsoft.Jet.OLEDB.4.0;Data

Source=C:\Inetpub\wwwroot\report\examples\Nwind.mdb;Persist Security

Info=False"

' 데이터베이스 연결

cn.Open cnn_string

' 커서 형태 지정 (adUseClient=3)

rs.CursorLocation = 3

' sql문 지정

sql_string = "SELECT * FROM CUSTOMERS"

' 레코드셋 얻기 (0= adOpenForwardOnly, 4=adLockBatchOptimistic)

rs.Open sql_string, cn , 0, 4

' 레코드셋을 XML 형식의 DOMDoc으로 저장합니다.

' 이때 키워드로 adPersistXML을 사용하려면 ADOVBS.INC 파일을 포함시켜야 합니다.

' 그외의 경우는 그 값을 1로 사용하십시오!

rs.Save doc, 1 'adPersistXML

' 응답 속성 설정

Response.ContentType = "text/xml"

' 출력

Response.Write "<?xml version=""1.0"" encoding=""EUC-KR"" ?>" & vbcrlf

' 웹 브라우저에서 표현을 위한 스타일쉬트 지정

Response.Write "<?xml:stylesheet type=""text/xsl"" href=""../Recordsetxml.xsl""?>"

& vbcrlf

Page 63: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 56 - 사용자 매뉴얼

' 응답을 위한 DOMDoc으로부터 XML 전송

Response.Write doc.xml

' 객체 제거

set doc=nothing

rs.Close

set rs=nothing

cn.Close

set cn=nothing

%>

3. 웹 브라우저를 통해 앞 단계에서 만들어진 customer.asp가 정상적으로 작동되는지

확인합니다.

Page 64: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 57 - 사용자 매뉴얼

그림 32. 예제로 사용될 XML 데이터 소스(customer.asp)

주의: 예제 XML 데이소 소스가 정상적으로 동작하지 않을 경우, Nwind.mdb의

보안설정에서 인터넷 계정으로 접근이 가능하도록 되어있는지 확인하십시오.

Page 65: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 58 - 사용자 매뉴얼

그림 33. 보안 설정 대화창

4. ReportExpress 디자이너를 실행시킵니다.

5. 메인 툴바에서 보고서 만들기->XML을 이용한 보고서를 선택하고, 디테일 밴드에 생성된

XML 데이터 컨트롤의 속성 설정창을 띄우십시오.

Page 66: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 59 - 사용자 매뉴얼

그림 34. XML 데이터 컨트롤 속성 설정 창

6. FileURL 속성에 http://127.0.0.1/report/examples/list/customer.asp 를 입력하십시오.

Recordset Pattern에는 자동으로 asp에서 생성시킨 XML 문서에 알맞은 XPath값이

설정되어 있습니다.

7. 확인버튼을 누른 후, 필드 가져오기 버튼( )을 눌러 데이터 필드 목록을 생성시키십시오.

Page 67: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 60 - 사용자 매뉴얼

그림 35. 필드 목록 창

참고 : XML 문서의 요소(Element)는 필드이름과 동일한 이름이 필드 목록창에 나타나며,

속성(Attribute)의 경우에는 필드이름에 @이 붙은 값이 필드 목록창에 나타나게 됩니다.

Page 68: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 61 - 사용자 매뉴얼

8. 페이지 헤더섹션에 4개의 라벨을 위치시키고 다음과 같이 속성값들을 설정하십시오.

Name lblCustomer lblCity lblCountry lblPostalCode

Caption 고객 도시 국가 우편번호

Height 270 270 270 270

Left 0 2970 5490 7380

Top 0 0 0 0

Width 2880 2430 1800 1800

Font 굴림체 굴림체 굴림체 굴림체

Script 한글 한글 한글 한글

Alignment 0-Left 0-Left 0-Left 1-Right

9. 페이지 헤더부분을 클릭하고, 높이 속성을 285로 설정하십시오.

10. 필드 목록창에서 다음의 필드들을 디테일 섹션으로 드래그하십시오: @CompanyName,

@City, @Country 그리고 @PostalCode .

11. 다음의 표처럼 각 필드의 속성을 설정하여 주십시오.

Name txtCustomer txtCity txtCountry txtPostalCode

DataField @CompanyName @City @Country @PostalCode

Height 270 270 270 270

Left 0 2970 5490 7380

Top 0 0 0 0

Width 2880 2430 1800 1800

Font 굴림체 굴림체 굴림체 굴림체

Script 한글 한글 한글 한글

Alignment 0-Left 0-Left 0-Left 1-Right

12. 디테일 섹션을 클릭하고, 높이 속성을 285로 설정하십시오.

Page 69: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 62 - 사용자 매뉴얼

13. 메인툴바의 인쇄 미리보기( )를 누르십시오.

그림 36. list 예제의 미리보기 화면

Page 70: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 63 - 사용자 매뉴얼

14. 다자이너 보기( )를 눌러, 디자인 모드로 전환시킨 후, 디자인 파일을 저장하십시오.

저장할 위치는 웹 문서 디렉토리의 report\examples\list\rpxFiles 디렉토리이며, 이름은

customer.rpx로 저장하십시오.

그림 37. 파일로 저장

15. 다음 단계는 웹 페이지에서 ReportExpress 뷰어를 사용하여, 앞에서 제작한

customer.rpx를 로딩하고, 웹 클라이언트에서 보고서를 출력하는 역할을 담당하는

customer.html 파일을 만드는 것입니다(ReportExpress가 설치된 폴더내의 하부폴더인

examples\list\ 아래에 저장하십시오). 소스는 다음과 같습니다:

<HTML>

<HEAD>

<TITLE>고객목록 출력</TITLE>

Page 71: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 64 - 사용자 매뉴얼

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>

<!--

function RunView_onclick() {

var hostip = window.location.host ;

Viewer1.Server = "http://" + hostip + "/report/examples/list/" ;

Viewer1.ReportLayout = "customer.rpx" ;

Viewer1.RunViewer() ;

}

//-->

</SCRIPT>

</HEAD>

<BODY>

<center>

<INPUT id=RunView type=button value="리스트형 보고서 예제" name="RunView"

LANGUAGE=javascript onclick="RunView_onclick();">

</center>

<OBJECT ID="Viewer1"

CLASSID="CLSID:1CC26E3F-F20A-4074-8BB0-F34242591459"

CODEBASE="../ReportExpress.CAB#version=3,1,0,9"

STYLE="display: none">

</OBJECT>

</BODY>

</HTML>

주의 : CODEBASE의 속성값인 ReportExpress.CAB 파일의 위치는 현재 HTML 문서의

상대경로를 사용하게 됩니다.

Page 72: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 65 - 사용자 매뉴얼

16. 인터넷 익스플러어를 사용하여 14단계에서 만들어진 HTML 파일을 호출합니다. 그리고,

고객목록 출력 버튼을 클릭하여 보고서가 정상적으로 출력되는지를 확인합니다.

그림 38. 리스트형 보고서 예제

Page 73: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 66 - 사용자 매뉴얼

그림 39. 뷰어를 통해 본 리스트형 보고서

17. 드디어 여러분은 ReportExpress를 사용하여 첫번째 웹 보고서 예제를 완성하였습니다.

Page 74: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 67 - 사용자 매뉴얼

보고서에서 매개변수 사용하기

- 동적인 언바운드 보고서 제작 방법 (웹문서 디렉토리\report\examples\unbound 밑에 예제 수록)

다음으로는 위에서 제작한 간단한 리스트형 보고서에서 사용자의 입력값(매개변수)을 웹 페이지에서

얻고, 보고서의 런타임에 질의문에서 매개변수를 받아 처리하는 예제를 다루어보겠습니다.

ReportExpress에서는 이러한 작업을 수행하기 위해서 쿠키(cookie) 기술을 사용하고 있습니다.

과정은 다음과 같습니다.:

1. rpx 파일은 첫번째 예제에서 제작된 customer.rpx에서 XML 데이터 컨트롤의 FileURL을

http://127.0.0.1/report/examples/unbound/customer.asp로 바꾸시고, 나머지 부분은

그대로 사용합니다. unbound 디렉토리내에 rpxFiles 디렉토리를 생성시키고, 그 아래에

저장하십시오. ReportExpress는 데이터소스를 웹 서버상에서 동적으로 생성되는 XML

문서를 참조하기 때문에 동적인 데이터바인딩을 위해서 보고서의 데이터 컨트롤에

매개변수를 설정하는 방식이 아닌, XML을 생성해주는 웹 서버측(또는 웹 어플리케이션

서버측) 어플리케이션에서만 매개변수 처리를 할 수 있도록 변경하시면 됩니다.

2. 보고서에서 사용될 매개변수사용을 위해 customer.html에서 입력값을 받을 코딩을

추가해주시고, examples\unbound 폴더에 저장하십시오. 본 예제에서는 입력받을

매개변수를 회사이름(CompanyName)으로 하였고, 매개변수를 이용하여 생성시킬

sql문은 select * from customer where companyname like ‘회사이름%’ 으로

하겠습니다.

<HTML>

<HEAD>

<TITLE>고객목록 출력</TITLE>

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>

<!--

function RunView_onclick() {

var hostip = window.location.host ;

// 새로 추가된 부분으로, 입력 박스에서 입력된 값을 CompanyName이라는 쿠키값으로 설정

var cookieStr1 = "CompanyName=" + CName.value;

Page 75: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 68 - 사용자 매뉴얼

document.cookie = cookieStr1 ;

Viewer1.Server = "http://" + hostip + "/report/examples/unbound/" ;

Viewer1.ReportLayout = "unbound.rpx" ;

Viewer1.RunViewer() ;

}

//-->

</SCRIPT>

</HEAD>

<BODY>

<center>

‘ 사용자로부터 입력받는 매개변수를 처리할 수 있는 입력박스 추가 코드

고객 이름: <input id=CName SIZE=16 NAME="CName" value="">

<INPUT id=RunView type=button value="언바운드 보고서 예제" name="RunView"

LANGUAGE=javascript onclick="RunView_onclick();">

</center>

<OBJECT ID="Viewer1"

CLASSID="CLSID:1CC26E3F-F20A-4074-8BB0-F34242591459"

CODEBASE="../ReportExpress.CAB#version=3,1,0,9"

STYLE="display: none">

</OBJECT>

</BODY>

</HTML>

3. customer.html에서 입력받은 값을 이용하여 보고서 런타임에 동적으로 생성될

질의문(sql)을 만들 수 있도록 customer.asp를 수정하고, examples\unbound

폴더에저장하십시오. Customer.html으로부터 전달받은 매개변수를 rqs라는 이름의 변수에

할당하였고, 이를 사용하여 런타임에 적절한 sql문을 데이터베이스로 전달하도록 코드가

추가되었습니다.:

Page 76: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 69 - 사용자 매뉴얼

<%

' 변수 설정

Option Explicit

dim rs

dim doc

dim cn

dim rqs ‘ 매개변수 처리를 위한 새로운 변수 추가

dim cnn_string

dim sql_string

' 객체 생성

set cn = server.CreateObject("ADODB.Connection")

set rs = server.CreateObject("ADODB.Recordset")

set doc = server.CreateObject("MSXML2.DomDocument")

' customer.html에서 설정된 쿠키값(매개변수)을 rqs 변수로 설정

rqs = Request.Cookies("CompanyName")

' 연결문자 지정

cnn_string = "Provider=Microsoft.Jet.OLEDB.4.0;Data

Source=C:\Inetpub\wwwroot\report\examples\Nwind.mdb;" &_

"Persist Security Info=False"

' 데이터베이스 연결

cn.Open cnn_string

' 커서 형태 지정 (adUseClient=3)

rs.CursorLocation = 3

Page 77: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 70 - 사용자 매뉴얼

' 입력받은 매개변수를 사용하여 런타임에 동적인 sql문 생성을 위한 코드 추가

if rqs = "" then ' 매개변수가 없는 경우

sql_string = "SELECT * FROM CUSTOMERS"

else ' 매개변수가 있는 경우

sql_string = "SELECT * FROM CUSTOMERS WHERE CompanyName like '" & rqs &"%'"

end if

' 레코드셋 얻기 (0= adOpenForwardOnly, 4=adLockBatchOptimistic)

rs.Open sql_string, cn ,0, 4

' 레코드셋을 XML 형식의 DOMDoc으로 저장합니다.

' 이때 키워드로 adPersistXML을 사용하려면 ADOVBS.INC 파일을 포함시켜야 합니다.

' 그외의 경우는 그 값을 1로 사용하십시오!

rs.Save doc, 1 'adPersistXML

' 응답 속성 설정

Response.ContentType = "text/xml"

' 한글 출력을 위한 인코딩 방식 설정

Response.Write "<?xml version=""1.0"" encoding=""EUC-KR"" ?>" & vbcrlf

' 웹 브라우저에서 표현을 위한 스타일쉬트 지정

Response.Write "<?xml:stylesheet type=""text/xsl"" href=""../Recordsetxml.xsl""?>" & vbcrlf

' 응답을 위한 DOMDoc으로부터 XML 전송

Response.Write doc.xml

' 객체 제거

Page 78: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 71 - 사용자 매뉴얼

set doc=nothing

rs.Close

set rs=nothing

cn.Close

set cn=nothing

%>

4. 이제 웹 브라우저(인터넷 익스플로어)를 통해 제대로 작동되는지를 확인합니다.

그림 40. 언바운드 보고서 예제

Page 79: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 72 - 사용자 매뉴얼

그림 41. 매개변수 처리가 된 보고서 내용 출력

주의 : 웹에서 사용자의 입력값을 처리하도록 하는 동적인 언바운드 보고서의 경우,

쿠키설정때 사용되는 HTML 파일의 URL은 대소문자를 구별합니다. 따라서,

customer.rpx의 XML 데이터컨트롤의 FileURL 속성값 설정에 주의를 하셔야 합니다. 즉,

http://aa.com/report/examples/unbound/customer.html 에서 쿠키값을 설정할 경우,

customer.rpx의 XML 데이터컨트롤의 FileURL 속성값이

http://aa.com/Report/examples/unbound/customer.asp 나

Page 80: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 73 - 사용자 매뉴얼

http://AA.COM/REPORT/EXAMPLES/UNBOUND/CUSTOMER.ASP 처럼 대소문자가

일치하지 않는 경우, 쿠키값을 얻을 수 없습니다. 정확한 동작을 위해서는 쿠키값을

설정하는 URL과 XML 데이터컨트롤의 FileURL 속성값의 문자열의 대소문자가 일치하도록

하십시오.

데이터 그룹핑을 사용한 보고서

- 웹문서 디렉토리\report\examples\grouping 디렉토리밑에 예제 파일들이 들어있습니다.

이번에는 첫번째 예제에서 만든 보고서를 이용하여, ReportExpress의 그룹핑 기능을 구현하는 것을

연습하도록 하겠습니다. 보고서에서는 데이터베이스 필드중에 그룹으로 설정된 데이터 필드를

GroupHeaders의 DataField 속성값으로 설정함으로써 그룹핑을 구현할 수 있습니다.

ReportExpress는 최대 32개의 중첩된 그룹을 단일 보고서에서 지원하고 있습니다.

단계별로 제작되는 파일들은 웹문서 디렉토리\report\examples\grouping 디렉토리에 저장하시면

됩니다. Rpx 파일은 grouping 디렉토리에서 rpxFiles 폴더를 생성시키고 그 안에 저장하시면 됩니다.

주의 : ReportExpress는 그룹핑에 대한 레코드의 정렬을 내부적으로 자동으로하지 않습니다. 즉,

동일 그룹핑 내에서는 이미 레코드셋들이 정렬되었다고 가정하여 처리합니다. 따라서, 이번 예제처럼

데이터 소스에서 원하는 결과를 얻기위해서는 먼저 도시(City)로 정렬시키는 과정이 필요합니다.

1. 첫번째 예제에서 제작된 customer.asp 파일에서 sql문자열(sql_string)을 다음과 같이

바꾸십시오:

Select * From Customers ORDER BY City

2. 첫번째 예제에서 제작된 customer.rpx 파일의 디테일 섹션을 선택하십시오.

3. 마우스의 오른쪽 버튼을 클릭하고, Group Header/Footer를 추가하십시오.

4. 새롭게 추가된 “GroupHeader1” 섹션을 선택하시고, 마우스를 클릭하십시오.

Page 81: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 74 - 사용자 매뉴얼

5. 섹션의 속성을 다음의 표처럼 변경하십시오.

Name ghOrderGroup

DataField @City

Height 360

주의 : ReportExpress 보고서를 그룹핑하기 위해서는 Group Header 섹션의 DataField

속성값을 설정하셔야 합니다. 이 속성값을 설정함으로써 ReportExpress는 City 필드로

그룹핑합니다. City 필드내의 값이 바뀔때마다 새로운 그룹이 시작됩니다.

6. 새롭게 추가된 “GroupFooter1” 섹션을 선택하시고, 마우스를 클릭하십시오.

7. 섹션 속성을 다음 표와 같이 변경하십시오.

Name GfOrderGroup

Height 270

8. ghOrderGroup 섹션에 필드 컨트롤을 한 개 추가하시고, 그 속성값을 다음처럼

설정하십시오.

Name txtGroupCity

DataField @City

Height 360

Left 0

Top 0

Width 4230

Font.face 굴림

Font.size 12

Font.Bold True

Font.Script 한글

9. 미리보기 버튼을 눌러, 도시로 그룹핑되는 보고서를 확인하신 후, 보고서 파일을

저장하십시오.

Page 82: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 75 - 사용자 매뉴얼

10. 그룹핑이 정상적으로 된 것을 확인한 후, 첫번째 예제에서 생성한 customer.html 문서를

grouping 디렉토리로 복사하십시오. 다음의 코드만 바꾸신 후 저장하시고, 웹 브라우저를

통해 정상적으로 동작하는지 확인하십시오:

Viewer1.Server = "http://" + hostip + "/report/examples/grouping/" ;

그림 42. 데이터 그룹핑을 사용한 예제 화면

Page 83: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 76 - 사용자 매뉴얼

계산식이 포함된 그룹핑을 사용한 보고서

- 웹문서 디렉토리\report\examples\foot_sum 디렉토리밑에 예제 파일들이 들어있습니다.

회사이름의 첫 글자나 판매 총 합계를 계산하여 그 범위에 따라 그룹핑을 하게 되는 보고서등과 같이

계산에 의한 그룹핑이 필요한 보고서는 자주 필요하게 됩니다. 이러한 형태의 보고서는

ReportExpress 디자이너에서 GroupHeader의 GroupValue 속성값을 설정함으로써 가능합니다.

주의: 데이터 소스의 그룹핑을 정확하게 얻기위해서는 반드시 그룹핑되는 필드로 정렬이

되어있어야만 합니다.

ReportExpress는 요약 필드들-총합계, 개수, 평균 그리고 다른 여러 계산값들-을 임의의 섹션에

추가 시킬 수 있습니다. 요약 필드가 놓여지는 위치는 필드를 포함하는 섹션이나 그 섹션 다음이 될

것입니다. 요약 필드를 가진 섹션은 모든 계산이 끝날 때까지 나타나지 않습니다. 따라서, 요약

필드는 해당 필드의 디테일 밴드의 데이터가 보여진 위치 다음에 놓여지는 것이 좋습니다.

요약 필드들은 필드 컨트롤의 요약(Summary) 속성의 값에 따라 계산되어 집니다. 하나의 요약 필드

컨트롤은 해당 디테일 레코드값에 의해 계산되어 집니다. 요약 필드가 디테일 섹션 이전에 놓여질

경우(ReportHeader, PageHeader 혹은 GroupHeader), 디테일 섹션은 각 레코드들의 포맷이

생성된 후에 계산된 값이 요약 필드에 보여지게 됩니다. 요약 필드가 포함되어 있는 섹션은 디테일

섹션의 모든 필드가 출력될 때까지 출력이 지연됩니다. 헤더 섹션은 지연되었던 섹션들이 모두

보여진 후 출력됩니다.

요약 필드들은 다음의 필드 컨트롤 속성에 의해 제어됩니다:

SummaryType

필드의 계산이 어디까지 적용되는지를 지정합니다.

다음의 값들이 있습니다:

l GrandTotal – 보고서의 모든 디테일 레코드들에 대한 계산을 합니다.

l PageTotal – 각 페이지별로 계산을 합니다.

l SubTotal – SummaryGroup 섹션별로 계산을 합니다.

Page 84: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 77 - 사용자 매뉴얼

SummaryFunc

필드의 합계를 계산하기 위해 사용되는 함수의 형태를 지정합니다. 요약 함수는 Sum(합),

Average(평균), Count(개수), Min(최소값), Max(최대값), Variance(평방편차) 그리고 Standard

Deviation(표준 편차) 중의 하나로 설정할 수 있습니다. 또한, 다른 필드의 식별값(distinct

values)에 기반하여 계산하기 위한 요약 함수도 사용할 수 있습니다. 식별 요약화(Distinct

summarization)로 불리는 이 기능을 사용하여 여러분은 디테일 섹션내에서 반복되는 필드

값들로부터 하나의 값으로 인식하도록 하여 계산하고자 할 경우 매우 유용합니다. 예를 들어, 주문의

트랜잭션 레코드들이 다음과 같은 경우:

주문 ID 날짜 주문 수량

1001 5/16/97 3000

1001 5/30/97 -500

1001 6/15/97 -2500

1002 4/20/97 2550

1002 4/30/97 -2500

Count 요약 함수는 레코드의 개수로 5를 계산합니다. 그러나, 주문 ID에 대한 SummaryDistinct

함수를 사용하면 주문의 개수를 2로 계산합니다. 다른 식별 함수들도 이와 같은 방식으로 처리됩니다.

SummaryGroup

소계를 계산하고자 하는 그룹 섹션 레벨을 지정합니다. 보통 요약 필드가 위치하는 섹션은 그룹 헤더

섹션과 일치하는 경우가 많습니다.

SummaryRunning

지정한 레벨에서의 개별적인 출력과 초기화와 함께 축적되는 런닝 합계(running total)를 계산합니다.

ddSRGroup – 하나의 그룹 스팬내에서 지정된 필드의 런닝 합계(running total)를 유지합니다.

ddSRALL – 보고서 전체에 대한 런닝 요약(running summary)을 유지합니다.

Page 85: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 78 - 사용자 매뉴얼

이번에도 역시 앞의 예제를 수정하는 형태로 만들도록 하겠습니다. 즉, grouping 디렉토리의 모든

파일과 폴더를 복사해서 foot_sum 디렉토리로 복사하십시오. 그런다음, 회사이름 첫 글자로 그룹핑

시키고, 해당 그룹내의 회사 개수를 얻어 그룹풋터에 출력하는 보고서를 만들어 보겠습니다.

1. customer.asp 파일에서 sql_string 문자열을 다음처럼 수정하고 저장하십시오.

Select * From Customers ORDER BY CompanyName

2. customer.rpx 를 ReportExpress 디자이너에서 불러온 후, XML 데이터 컨트롤의 FileURL

속성값을 http://127.0.0.1/report/examples/foot_sum/customer.asp로 수정하십시오.

3. ghOrderGroup 섹션을 제거하시고(해당 밴드위에서 마우스의 오른쪽 버튼을 클릭해서

나타나는 컨텍스트 메뉴의 Delete Section을 선택하면 지울 수 있습니다), 새로운

GroupHeader/Footer를 추가하십시오. Height 속성을 540으로 설정하십시오.

4. GroupHeader1 섹션에 라벨 컨트롤을 추가하시고, 속성은 다음처럼 설정하십시오.

Name lblLetter

Caption “가”

Height 540

Width 540

Left 0

Top 0

Alignment 2-ddTXCenter

VerticalAlignment 1-ddTXMiddle

Font.face 굴림

Font.size 20

Font.Bold True

Font.Script 한글

5. 스크립트 창에서 FetchData 이벤트에 다음의 코드를 추가하십시오.

Sub OnFetchData(eof)

If Not eof Then

Page 86: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 79 - 사용자 매뉴얼

rpt.Sections("GroupHeader1").GroupValue = _

Left(rpt.Sections("Detail").Controls("xdc").Field("@CompanyName"),1)

rpt.Sections("GroupHeader1").Controls("lblLetter").Caption = _

rpt.Sections("GroupHeader1").GroupValue

End if

End Sub

그림 43. 스크립트 창에 코드들을 입력한 화면

6. GroupFooter1 섹션의 height(높이) 속성을 285로 설정합니다.

Page 87: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 80 - 사용자 매뉴얼

7. GroupFooter1 섹션에 한 개의 라벨 컨트롤을 추가하고 그 속성을 다음과 같이 설정합니다.

Name lblGFooter

Caption 고객 수:

Height 270

Left 0

Top 0

Width 900

Font.face 굴림

Font.Script 한글

8. GroupFooter1 섹션에 필드 컨트롤을 하나 추가하고 그 속성을 다음과 같이 설정합니다.

Name txtCustomerCount

Height 270

Left 910

Top 0

Width 340

9. txtCustomerCount 속성을 다음 처럼 설정합니다.

DataField @CompanyName

SummaryFunc 2-ddSFCount

SummaryGroup GroupHeader1

SummaryType 3-ddSMSubTotal

Alignment 1-ddTXRight

10. 미리보기 버튼을 눌러, 보고서에서 GroupValue로 각 회사이름의 첫 글자가 되었는지와

레코드들이 그룹핑이 되었는지를 확인하시고, 저장하십시오.

11. 정상적으로 작동된 것을 확인한 후, customer.html 문서에서 다음의 코드만 바꾸신 후

Page 88: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 81 - 사용자 매뉴얼

저장하시고, 웹 브라우저를 통해 정상적으로 동작하는지 확인하십시오:

Viewer1.Server = "http://" + hostip + "/report/examples/foot_sum/" ;

그림 43. 그룹 풋터 요약 보고서 예제 실행 화면

Page 89: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 82 - 사용자 매뉴얼

조건별 요약정보를 사용한 보고서

여러분이 제작하게 될 보고서들 중에서는 특정한 조건에 의한 합계, 개수 또는 여러 형태의 다른

요약 정보를 보여주고자 할 경우가 있게 됩니다. 예를 들어, 날짜에 따른 도시별 직원 매출 데이터가

있을 때, 도시 필드에 대한 레코드 그룹핑없이 그룹 꼬리 섹션에서 각 도시별 매출합계를 출력하고자

한다고 가정해봅시다.

이번 예제를 통하여 여러분은 총계를 구하기 위한 작업을 하기위해 전역 변수 역할을 담당하는

더비(dummy, 비어있는) 컨트롤들을 사용하여 조건별 요약 보고서를 제작하는 방법을 배우게 될

것입니다.

1. 웹문서 디렉토리\report\examples\conditional 디렉토리를 생성하고, 하부 디렉토리로

rpxFiles도 만들어 주십시오.

2. grouping에서 제작했던 customer.asp에서 sql_string을 다음과 같이 수정한 후,

order.asp 이름으로 \report\examples\conditional 디렉토리에 저장하십시오.

sql_string = "SELECT DISTINCTROW " &_

"Employees.City, Employees.LastName, Employees.FirstName, Orders.ShippedDate,” &_

"Orders.OrderID, [Order Subtotals].Subtotal AS SaleAmount " &_

"FROM Employees INNER JOIN (Orders INNER JOIN [Order Subtotals] " &_

“ON Orders.OrderID = [Order Subtotals].OrderID) " &_

"ON Employees.EmployeeID = Orders.EmployeeID ORDER by " &_

"Orders.ShippedDate Desc"

Page 90: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 83 - 사용자 매뉴얼

3. 웹 브라우저를 통해 앞 단계에서 만들어진 order.asp가 정상적으로 작동되는지 확인합니다.

그림 44. order.asp에서 생성된 XML 문서

4. ReportExpress 디자이너를 실행시키고, 메인 툴바에서 XML을 이용한 보고서를 선택한 후,

생성된 XML 데이터 컨트롤의 속성창에서 FileURL의 값을 다음과 같이 입력합니다.

(http://127.0.0.1/report/examples/conditional/order.asp)

5. 필드 가져오기 버튼을 눌러 데이터 필드 목록을 생성시키십시오.

6. 디테일 섹션을 선택한 다음, 오른쪽 클릭하여 나타나는 컨텍스트 메뉴에서

PageHeader/Footer 섹션을 삽입하십시오.

Page 91: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 84 - 사용자 매뉴얼

7. 새로 생성된 PageHeader 섹션에 텍스트박스 컨트롤 두개를 위치시키시고, 그 속성을

다음과 같이 하십시오.

Name tmpSeoul tmpPusan

Top 0 0

Left 0 0

Width 800 800

Height 270 270

Visible False False

참고 : 여기서 생성시킨 2개의 컨트롤은 디테일 섹션에서 도시 조건(서울특별시와

부산광역시)에 부합되는 판매량의 합계를 계산하는데 사용될 임시 변수 저장하는 목적으로

생성시킨 것입니다. ReportExpress 디자이너의 스크립트에서는 전역변수를 설정할 수 없기

때문에 전역 변수의 역할을 담당하는 더비컨트롤을 생성하여 전역변수 역할을 담당하게

합니다.

8. PageHeader와 PageFooter의 Height속성을 0으로 설정하십시오.

9. 디테일 섹션을 선택한 다음, 오른쪽 클릭하여 나타나는 컨텍스트 메뉴에서

GroupHeader/Footer 섹션을 삽입하십시오.

10. 새로 생성된 “GroupHeader1” 섹션을 선택하십시오.

11. 섹션의 속성을 다음과 같이 설정하십시오.

Name ghShippedDate

DataField @ShippedDate

Height 840

12. “GroupFooter1” 섹션을 선택하고, 클릭한 다음 속성을 다음과 같이 설정하십시오.

Name gfShippedDate

Height 810

Page 92: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 85 - 사용자 매뉴얼

13. gfShippedDate 섹션에 두개의 텍스트 필드를 추가하고 그 속성을 다음과 같이

설정하십시오.

Name txtTotalSeoul txtTotalPusan

Height 270 270

Left 7830 7830

Top 90 450

Width 1530 1530

Alignment 1-ddTXRight 1-ddTXRight

OutputFormat \\#,##0 \\#,##0

Font.face 굴림 굴림

Font.Script 한글 한글

참고 : OutputFormat은 속성창의 OutputFormat 등록 정보창에서 범주를

통화량(Currency)로 하시고, Decimal places 값은 0, Symbol은 “\”(목록의 맨 아래

항목입니다. 문자 인코딩 때문에 보이지는 않습니다)으로 설정하시고 확인 버튼을 누르시면

됩니다.

Page 93: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 86 - 사용자 매뉴얼

그림 45. OutputFormat 속성 설정 창

14. gfShippedDate 섹션에 두개의 라벨을 추가하고, 속성값을 다음과 같이 설정합니다.

Name lblTotalSeoul lblTotalPusan

Caption 서울시 매출 소계 : 부산시 매출 소계 :

Height 270 270

Left 5329 5329

Top 90 450

Width 2500 2500

Alignment 1-ddTXRight 1-ddTXRight

Font.Bold True True

Font.face 굴림 굴림

Font.Script 한글 한글

Page 94: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 87 - 사용자 매뉴얼

15. 필드 목록에서 다음의 항목을 선택하고 디테일 섹션으로 드래그합니다.

@City, @LastName, @FirstName, @SaleAmount

16. 필드의 속성을 다음과 같이 설정하십시오.

Name txtCountry txtLastName txtFirstName txtSaleAmount

DataField @City @LastName @FirstName @SaleAmount

Height 270 270 270 270

Left 0 1530 4140 7920

Top 0 0 0 0

Width 1440 2520 2790 1440

Alignment 0-ddTXLeft 0-ddTXLeft 0-ddTXLeft 1-ddTXRight

Font.face 굴림 굴림 굴림 굴림

Font.Script 한글 한글 한글 한글

OutputFormat \\#,##0

TxtSaleAmount의 OutputFormat 설정은 위의 13번째 단계에서 한 방법과 동일합니다.

17. 필드 목록에서 @ShippedDate 항목을 ghShippedDate 섹션으로 드래그 하십시오.

18. 필드의 속성을 다음과 같이 설정하십시오.

Name txtShippedDate

DataField @ShippedDate

Height 360

Left 1620

Top 0

Width 2790

Font.face 굴림

Font.Script 한글

Page 95: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 88 - 사용자 매뉴얼

Font.size 16

Font.Bold True

19. ghShippedDate 섹션에 다섯개의 라벨 컨트롤을 추가하고, 그 속성값을 다음과 같이

설정하십시오.

Name lblSales lblCity lblLastName lblFirstName lblSaleAmount

Caption 판매 : 도시 성 이름 매출

Height 360 270 270 270 270

Left 0 0 1530 4140 7830

Top 0 540 540 540 540

Width 1530 1440 2520 2790 1440

Font.face 굴림 굴림 굴림 굴림 굴림

Font.Script 한글 한글 한글 한글 한글

Font.Bold True True True True True

Alignment 0-ddTXLeft 0-ddTXLeft 0-ddTXLeft 0-ddTXLeft 1-ddTXRight

20. 디테일 섹션의 CanShirink 속성을 True로 설정하십시오.

21. ActiveReports Document의 OnReportStart 이벤트에 전역변수로 사용될 컨트롤들의

초기화 코드를 추가하시고, 각 도시별 SaleAmount 디테일 항목에 대한 합계를 구하기 위해

Detail의 OnFormat 이벤트에 다음의 코드를 추가하여 ghShippedDate의 OnFormat

함수에 분리된 필드들의 변수 총합의 값을 설정합니다.

Object: ActiveReports Document, Event: OnReportStart

Sub OnReportStart

‘변수 초기화

rpt.Sections("PageHeader").Controls("tmpSeoul").DataValue = "0"

rpt.Sections("PageHeader").Controls("tmpPusan").DataValue = "0"

End Sub

Page 96: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 89 - 사용자 매뉴얼

그림 46. 더비 컨트롤의 값 초기화 코드 화면

Object : Detail, Events: OnFormat

Sub OnFormat

Dim myVar

myVar = rpt.Sections("Detail").Controls("txtCity").DataValue

select case myVar

case "서울특별시"

rpt.Sections("PageHeader").Controls("tmpSeoul").DataValue =

CLng(rpt.Sections("PageHeader").Controls("tmpSeoul").Datavalue) +

CLng(rpt.Sections("Detail").Controls("txtSaleAmount").DataValue)

case "부산광역시"

rpt.Sections("PageHeader").Controls("tmpPusan").DataValue =

CLng(rpt.Sections("PageHeader").Controls("tmpPusan").DataValue) +

CLng(rpt.Sections("Detail").Controls("txtSaleAmount").DataValue)

end select

End Sub

Page 97: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 90 - 사용자 매뉴얼

그림 47. 디테일 섹션에서 계산을 위한 코드 입력 화면

Object : gfShippedDate, Event: OnFormat

Sub OnFormat

rpt.Sections("gfShippedDate").Controls("txtTotalSeoul").DataValue =

rpt.Sections("PageHeader").Controls("tmpSeoul").DataValue

rpt.Sections("gfShippedDate").Controls("txtTotalPusan").DataValue =

rpt.Sections("PageHeader").Controls("tmpPusan").DataValue

rpt.Sections("PageHeader").Controls("tmpSeoul").DataValue = "0"

rpt.Sections("PageHeader").Controls("tmpPusan").DataValue = "0"

End Sub

참고 : 계산된 결과값이 OutputFormat에서 지정한 값으로 맵핑되도록 하려면, 텍스트박스

컨트롤의 값을 Text 대신 DataValue 속성으로 사용하셔야 합니다.

Page 98: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 91 - 사용자 매뉴얼

그림 48. 디테일 섹션에서 계산된 값을 풋터 섹션에 대입시키는 코드 입력 화면

22. 미리보기 버튼을 눌러 보고서가 정상적으로 동작되는지 확인하십시오. 보고서가

서울특별시와 부산광역시에 대한 날짜별 소계가 정상적으로 출력되는 것을 확인 후,

order.rpx라는 이름으로 rpxFiles 디렉토리에 저장하십시오.

23. 앞 단계에서 제작했던 customer.html에서 다음의 부분을 바꾸시고, order.html으로

저장하십시오. :

Viewer1.Server = "http://" + hostip + "/report/examples/conditional/" ;

Viewer1.ReportLayout = "order.rpx" ;

24. 웹 브라우저를 통해 order.html이 정상적으로 작동하는지 확인하십시오.

Page 99: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 92 - 사용자 매뉴얼

그림 49. 조건별 보고서 예제의 HTML 화면

Page 100: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 93 - 사용자 매뉴얼

그림 50. 조건별 보고서의 구현 화면

Page 101: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 94 - 사용자 매뉴얼

계산식을 이용한 필드계산 보고서

이번 예제에서 여러분은 Order Detail 레코드로부터 고객 매출을 출력하는 보고서를 만들게 됩니다.

보고서는 고객에 의해 그룹핑되고 요약되며 각 디테일 레코드의 수량과 제품 가격을 곱한 값들을

합하여 총 매출액을 계산하게 됩니다. 여러분은 필드 텍스트 속성을 사용하여 이러한 계산이

수행되는 것을 보게 될 것입니다.

1. examples 디렉토리에 formulas 디렉토리를 만들고, 하위 디렉토리에 역시 rpxFiles를

만드십시오.

2. 맨 처음 만든 예제(list)의 customer.asp 파일에서 sql_string을 다음과 같이 바꾸시고,

fomulas디렉토리에 orderdetail.asp 이름으로 저장하십시오:

sql_string = "SELECT " &_

"Customers.CompanyName, Products.ProductName, [Order Details]. UnitPrice, " &_

"[Order Details].Quantity " &_

"FROM Products " &_

"INNER JOIN ((Customers " &_

"INNER JOIN Orders " &_

"ON Customers.CustomerID = Orders.CustomerID) " &_

"INNER JOIN [Order Details] " &_

"ON Orders.OrderID = [Order Details].OrderID) " &_

"ON Products.ProductID = [Order Details].ProductID " &_

"WHERE (((DatePart(""yyyy"",[OrderDate]))=1995)) " &_

"ORDER BY Customers.CompanyName, Products.ProductName"

Page 102: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 95 - 사용자 매뉴얼

3. orderdetail.asp가 정상적으로 XML 페이지를 서비스하는지 확인하십시오.

그림 51. orderdetail.asp에서 생성된 XML 문서

4. ReportExpress 디자이너에서 새로운 보고서를 만듭니다.

5. 메인 툴바에서 XML을 이용한 보고서를 선택한 후, 생성된 XML 데이터 컨트롤의

속성창에서 FileURL의 값을 다음과 같이 입력합니다.:

http://127.0.0.1/report/examples/fomulas/orderdetail.asp

6. 필드 가져오기 버튼을 눌러 필드 목록을 가져옵니다.

7. GroupHeader/Footer 섹션을 삽입하십시오.

Page 103: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 96 - 사용자 매뉴얼

8. GroupHeader 속성을 다음과 같이 설정하십시오.

Name ghCustomer

DataField @CompanyName

Height 765

9. ghCustomer 섹션에 한 개의 텍스트 필드 컨트롤을 추가하시고, 속성을 다음과 같이

설정하여 주십시오.

Name txtCompanyName

DataField @CompanyName

Height 360

Left 0

Top 0

Width 5670

Font.face 굴림

Font.Script 한글

10. ghCustomer 섹션에 4개의 라벨 컨트롤을 추가하고, 그 속성값을 다음처럼 설정하십시오.

Name lblProductName lblQuantity lblUnitPrice lblExtended

Caption 제품명 수량 단가 매출액

Height 270 270 270 270

Left 0 3420 5040 7020

Top 450 450 450 450

Width 3330 1530 1890 1620

Font.face 굴림 굴림 굴림 굴림

Font.Script 한글 한글 한글 한글

Page 104: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 97 - 사용자 매뉴얼

11. 디테일 섹션에 4개의 텍스트 필드 컨트롤을 추가하고, height 속성을 300으로 설정하십시오.

Name txtProductName txtQuantity txtUnitPrice txtExtended

DataField @ProductName @ Quantity @UnitPrice

Height 270 270 270 270

Left 0 3420 5040 7020

Top 0 0 0 0

Width 3330 1530 1890 1620

Font.face 굴림 굴림 굴림 굴림

Font.Script 한글 한글 한글 한글

OutputFormat Number

(#,##0)

Currency

(\\#,##0)

Currency

(\\#,##0)

12. 해당 제품의 수량과 단가를 곱한 결과값을 txtExtended의 값으로 계산하기 위한 코드를

Detail의 OnFormat 이벤트에 아래와 같이 추가하여 주십시오:

Sub OnFormat

rpt.Sections("Detail").Controls("txtExtended").DataValue = _

rpt.Sections("Detail").Controls("txtQuantity").DataValue * _

rpt.Sections("Detail").Controls("txtUnitPrice").DataValue

End Sub

Page 105: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 98 - 사용자 매뉴얼

그림 52. 디테일 섹션에서 계산을 위한 코드 입력 화면

13. 미리보기 버튼을 눌러, 매출액 필드에 계산값이 올바르게 출력되는지 확인하십시오.

14. 정상적으로 출력되는 것을 확인한 후, rpx 파일을 orderdetail.rpx 라는 이름으로 rpxFiles

디렉토리에 저장하십시오.

15. 제일 처음에 만들었던 customer.html 파일에서 다음 부분을 수정한 후, formulas

디렉토리에 orderdetail.html 이름으로 저장하십시오:

Viewer1.Server = "http://" + hostip + "/report/examples/fomulas/" ;

Viewer1.ReportLayout = "orderdetail.rpx" ;

Page 106: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 99 - 사용자 매뉴얼

16. 웹 브라우저를 통해 정상적으로 작동되는지 확인하십시오.

그림 53. 계산식 예제를 확인하는 페이지

Page 107: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 100 - 사용자 매뉴얼

페이지꼬리(PageFooter)내에 페이지 번호 넣기

필드의 PageCount 요약 타입을 사용하여 여러분은 보고서에 페이지 번호를 추가 시킬 수 있습니다.

페이지 번호는 런닝 요약 필드를 사용하여 생성합니다.

1. 페이지 꼬리 섹션에 두개의 텍스트 필드 컨트롤과 두개의 라벨 컨트롤을 추가하십시오.

2. 속성은 다음과 같이 설정하여 주십시오.

첫번째 필드 텍스트 컨트롤

Name : txtPageNumber

SummaryRunning : 2-ddSRAll

SummaryType : 4-ddSMPageCount

두번째 필드 텍스트 컨트롤

Name : txtPageCount

SummaryType : 4-ddSMPageCount

첫번째 라벨 컨트롤

Name : lblPage

Caption : 페이지 :

두번째 라벨 컨트롤

Name : lblOf

Caption : /

3. 디자인된 캔바스는 다음 그림과 같을 것 입니다.

그림 54. 페이지 풋터에 페이지 번호 출력 디자인 화면

4. 미리보기 버튼을 눌러, 페이지 꼬리부분에 현재페이지/총 페이지가 출력되는지

확인하십시오.

Page 108: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 101 - 사용자 매뉴얼

주의: PageCount를 사용하기 때문에 모든 보고서 섹션들은 보고서의 페이지 계산이

끝날때까지 출력이 지연됩니다.

그룹헤더(GroupHeader)내에 페이지 번호 사용

필드의 PageCount 요약 타입을 사용하여 여러분은 보고서의 그룹 헤더 부분에 페이지 번호를 추가

시킬 수 있습니다. 페이지 번호는 런닝 요약 필드를 사용하여 생성합니다.

1. 그룹 헤더 섹션에 두개의 텍스트 필드 컨트롤과 두개의 라벨 컨트롤을 추가합니다.

2. 속성은 다음과 같이 설정하여 주십시오.

첫번째 텍스트 필드 컨트롤

Name htxtPageNumber

SummaryGroup ghCustomer

SummaryRunning 1-ddSRGroup

SummaryType 4-ddSMPageCount

두번째 텍스트 필드 컨트롤

Name htxtPageCount

SummaryGroup ghCustomer

SummaryType 4-ddSMPageCount

첫번째 라벨 컨트롤

Name lblPage

Caption 페이지 :

두번째 라벨 컨트롤

Name lblOf

Caption /

3. 미리보기 모드를 선택하여, 그룹 헤더부분에 현재페이지/총 페이지가 출력되는지

확인합니다.

Page 109: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 102 - 사용자 매뉴얼

주의 : PageCount를 사용하기 때문에 모든 보고서 섹션들은 보고서 헤더섹션의 페이지

계산이 끝날때까지 출력이 지연됩니다.

서브 리포트 사용하기

ReportExpress는 서브리포트 컨트롤을 사용하여 하나의 보고서에 다른 보고서들(자식 보고서라고

불림)을 포함시킬 수 있도록 지원하고 있습니다. 자식 보고서 또는 서브 리포트는 상위 리포트(부모

리포트)가 출력될 때 서브리포트 컨트롤이 위치된 섹션에서 실행되어 출력됩니다.

여러분은 다음과 같은 형태의 보고서들을 서브리포트 컨트롤에서 구현하실 수 있습니다:

-상위 보고서(부모 리포트)와 다른 데이터를 포함하고 있는 자식 보고서

-서로 관련이 없는 데이터 테이블 자료를 수직 또는 수평으로 편집하여 출력하고자 하는 보고서

형태들.

예를 들면, 잘 팔리는 상위 10개의 품목과 매출 순위 10위까지의 고객 그리고 판매실적 10위까지의

직원명단을 하나의 보고서에서 출력하고자 할 경우 각 해당 데이터를 출력할 수 있는 보고서들을

우선 제작하고 최종적으로 이들 자식 보고서들을 포함하는 서브리포트 컨트롤을 사용하여 부모

보고서를 디자인하면 됩니다.

주의 : ReportExpress는 서브리포트들의 중첩된 사용을 허용하지 않습니다. 즉, 자식 보고서가

자신의 자식보고서를 포함하고 있는 서브리포트 컨트롤을 사용한 경우 서로 중첩된 자식보고서의

사용을 지원하지 않습니다. 또한, 서브리포트에서는 그룹과 디테일 섹션들만을 출력하기 때문에 부모

보고서에서는 자식 보고서의 페이지 헤더/풋터는 출력되지 않습니다.

Page 110: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 103 - 사용자 매뉴얼

서브 리포트를 부모 리포트에 추가시키는 방법

부모 보고서에서 서브리포트(Subreport) 컨트롤을 삽입합니다.

1. 툴박스에서 서브리포트 컨트롤을 클릭합니다.

2. 서브리포트를 출력시키고자 하는 섹션의 위치에 서브리포트 컨트롤을 위치시킵니다.

서브리포트는 자신이 위치한 섹션이 출력될 때마다 실행될 것 입니다.

주의 : 서브리포트는 서브리포트 컨트롤의 넓이에 의해 제한을 받습니다. 그러나 높이는

서브리포트의 필요에 따라 증가시킬 수 있습니다.

3. 이제 부모 보고서에 서브리포트를 연결시키는 작업을 스크립트 창에서 합니다. 각각의

서브리포트는 반드시 적절한 런타임에서 서브리포트 컨트롤 객체로 연결시켜주셔야만 합니다.

ReportExpress는 직접 자식 보고서를 초기화시킬 수 없습니다. 따라서, 서브리포트 컨트롤

객체의 속성을 사용하여 자식 보고서를 초기화 시키셔야만 합니다.

사용 예 :

자식 보고서에 사용할 보고서의 이름이 customer1.rpx과 product2.rpx라고

가정하겠습니다.

① 부모 보고서의 디테일 섹션에 서브리포트 컨트롤을 2개 위치시키고, 그 이름을 각각

srpt1과 srpt2로 설정하십시오.

② ② 그런 후, 메인툴바의 스크립트 편집기 아이콘( )을 클릭하십시오.

③ 스크립트 편집기가 나타나면, Object에서 ActiveReports Document 섹션을 선택하고,

OnReportStart 이벤트에 다음과 같은 코딩을 해주십시오.

Sub OnReportStart

set rpt.Sections("Detail").Controls("srpt1").object =

CreateSubReport("customer1.rpx")

set rpt.Sections("Detail").Controls("srpt2").object =

CreateSubReport("product2.rpx")

End Sub

Page 111: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 104 - 사용자 매뉴얼

Sub OnReportEnd

set rpt.Sections("Detail").Controls("srpt1").object = Nothing

set rpt.Sections("Detail").Controls("srpt2").object = Nothing

End Sub

주의 : 자식보고서의 사용갯수는 제한은 없습니다. 따라서, 해당 섹션내의 원하는 위치에

서브리포트 컨트롤을 삽입한 후, 스크립트 편집기에서 자식보고서를 포함시키는 코딩을

하시면 됩니다(위의 코딩 예제 참조). 이때, 부모 보고서와 자식보고서는 같은 폴더에

저장되어 있어야만 합니다.

그림 55. 스크립트 편집기에서 서브 리포트 컨트롤을 활성화 시키는 코드 입력 화면

4. 서브리포트 코딩을 하신 후, 서브리포트와 동일한 폴더에 부모 보고서를 저장하십시오. 그런

후, 스크립트 편집기를 닫고 메인 툴바의 인쇄미리보기 아이콘( )을 클릭하여

서브리포트가 부모 보고서에 원하는 출력형태로 나타나는지 확인하십시오.

서브리포트 사용예제는 ReportExpress에서 제공하는 예제 디렉토리(examples)의 subreport

폴더아래에서 찾아보실 수 있습니다. 제공되는 예제에서 부모 리포트는 MainReport.rpx이고, 사용된

자식 보고서는 customer1.rpx와 product2.rxp 입니다.

Page 112: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 105 - 사용자 매뉴얼

서브리포트를 포함하는 보고서를 구현하기 위해서는 HTML문서에서 부모 리포트와 함께 포함되어진

모든 서브리포트의 이름도 “,”를 이용하여 지정해주어야만 합니다.

Viewer1.Server = "http://" + hostip + "/report/examples/subreport/" ;

Viewer1.ReportLayout = "MainReport.rpx,customer1.rpx,product2.rpx" ;

그림 56. 서브 리포트 예제 HTML 화면

Page 113: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 106 - 사용자 매뉴얼

다양한 보고서 예제

상위 n 보고서

ReportExpress에서는 상위 n개의 레코드 보고서 스타일을 위한 지정된 포맷은 필요하지 않습니다.

여러분은 데이터 소스에서 Top n 형태(오라클에서는 where rownum < n+1)의 질의문 필터링을

통하여 이러한 보고서를 구현할 수 있습니다. 질의문의 필터링에서 상위 n개의 레코드들을 추출을

지원하지 않는 데이터소스를 사용할 경우, 상위 n개의 값으로 사용될 필드에 대한 내림차순 정렬을

질의문을 통해서 구현하시고 MaxRows 속성값을 n으로 설정하십시오.

예를 들어, 판매량의 순위에 따른 상위 10명의 고객 목록을 출력하고자 한다면, 판매량으로 내림차순

정렬을 시킨 모든 고객 데이터를 가져오고, 데이터 컨트롤의 MaxRows 속성값을 10으로

설정하십시오. ReportExpress는 정렬된 질의 결과들로부터 상위 10개의 레코드들만을 출력하게

됩니다.

마스터-디테일 보고서

ReportExpress에서는 마스터 디테일 보고서를 제작하기 위해 sql문에서 JOIN과 마스터 키에 대한

그룹핑을 사용합니다. 마스터 레코드들은 그룹 헤더와 꼬리 섹션에 위치되고 디테일 레코드들은

디테일 섹션에 위치됩니다.

예를 들어, 주문과 세부 주문정보 레코드들을 마스터-디테일 형식의 보고서로 만들고자 하신다면

다음과 같은 sql문을 생성하여 주십시오.:

SELECT * FROM order, [order details] where order.OrderID = [order details].OrderID

그런후, 그룹 필드의 값이 OrderID 필드가 되는 그룹을 생성하십시오. 그룹 헤더 섹션내에 ID와

날짜등의 order테이블 필드들을 위치시키시고, 디테일 섹션내에는 order detail 테이블의 필드들을

갖다 놓으십시오.

그러면, 여러분은 마스터-디테일 형태의 보고서를 출력하실 수 있습니다.

Page 114: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 107 - 사용자 매뉴얼

썸머리 보고서

썸머리(요약) 보고서는 디테일 섹션의 Visible 속성을 False 혹은 높이 속성을 0 으로 설정함으로써

구현할 수 있습니다. 디테일 섹션은 처리되지만 보여지지 않고, 요약 그룹 헤더와 꼬리 섹션만 출력될

것입니다.

예를 들어 모든 주문들에 대한 썸머리를 출력하고자 한다면, 위의 예제와 동일하게 보고서를 만들고,

맨 나중에 디테일 섹션의 높이를 0으로 설정하기만 하면 됩니다. ReportExpress는 디테일 섹션의

내용은 출력하지 않고 단지 각 주문에 대한 요약만 출력하게 됩니다.

컬럼방식의 보고서

ReportExpress에서는 디테일과 그룹 섹션들에서 뉴스형식의 레이아웃(다단편집)을 지원합니다.

그룹의 변화가 생기는 새로운 컬럼이 시작될 때 그룹내의 컬럼을 다음 페이지로 넘기도록 옵션을

설정한 섹션내에서 수평이나 수직으로 컬럼을 렌더링할 수 있습니다.

Page 115: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 108 - 사용자 매뉴얼

조건에 따른 출력 변화 보고서

ReportExpress에서는 여러분의 데이터가 갖는 값에 따라 런타임시에 사용된 어떠한 컨트롤에

대해서도 출력여부의 조작이 가능하도록 지원합니다. 이러한 기능을 구현하기 위해서는 해당

컨트롤이 포함되어 있는 섹션의 OnFormat 이벤트내에서 컨트롤의 Visible 속성을 설정해주시면

됩니다.

예를 들어, 일정 기간동안 예상 판매량 실적보다 더 많은 판매를 한 직원에게 “매우 우수”라는

라벨을 출력하고자 할 경우, 디테일 섹션의 OnFormat 이벤트에 다음의 코드를 추가하시면 됩니다.:

Sub OnFormat()

If rpt.Sections(“Detail”).Controls(“txtEmployeeSales”).DataValue >

rpt.Sections(“Detail”).Controls(“txtEmployeeGoal”).DataValue Then

rpt.Sections(“Detail”).Controls(“lblOutstanding”).Visible = True

Else

rpt.Sections(“Detail”).Controls(“lblOutstanding”).Visible = False

End If

End Sub

이와 유사한 방식으로, 여러분은 보고서에서 Format 이벤트내에 컨트롤들의 속성들을 수정하실 수

있습니다.

Page 116: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 109 - 사용자 매뉴얼

그린바 출력 보고서

여러분은 Format 이벤트내에서 보고서의 디테일 섹션의 그림자 혹은 배경색을 서로 바꿔줌으로써

그린바 출력 형태를 만들 수 있습니다.

Sub OnFormat()

If 조건식 Then

' 디테일 섹션의 BackStyle을 기본값으로 설정

rpt.Sections(“Detail”).BackStyle = ddBKNormal

rpt.Sections(“Detail”).BackColor = vbGreen

Else

rpt.Sections(“Detail”).BackStyle = ddBKTransparent

End If

End Sub

여러 페이지에 걸치는 섹션 보고서

PageBreak(페이지 나눔) 컨트롤( )을 사용하여 보고서 헤더나 보고서 꼬리 섹션을 여러 페이지에

걸쳐 출력될 수 있도록 할 수 있습니다. 여러분은 이를 이용하여 차트나 요약 테이블 그리고

목차등과 같은 내용을 포함하는 여러 페이지로 구성한 썸머리(요약) 페이지를 제작할 수 있습니다.

Page 117: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 110 - 사용자 매뉴얼

차트가 포함된 보고서

ReportExpress에는 내장된 데이터 차트 컨트롤은 없습니다. 그러나, 챠트를 위한 ActiveX 컨트롤을

사용하도록 지원하고 있기 때문에 이를 이용하여 챠트가 포함된 보고서를 제작하면 됩니다. 즉,

MSChart 컨트롤을 사용할 수 있으며, 여러분은 보고서가 처리되는 과정중에 ActiveX 데이터 챠트의

축과 점들을 보고서의 데이터 소스와 연결시켜주시면 됩니다.

만일 보고서의 헤더부분에 챠트를 위치시키고자 하신다면(즉, 데이터가 처리되기 이전단계), 챠트를

포함하게 되는 동일한 섹션내에 요약 필드 컨트롤을 위치시켜야만 합니다. 이렇게 함으로써

ReportExpress는 모든 요구되는 데이터를 처리하기 전까지는 출력이 지연되면서 챠트에서 필요로

하는 데이터를 로딩하게됩니다.

report/examples/chart 디렉토리에 챠트를 사용한 예제가 포함되어 있으며, 이를 참조하여 여러분이

원하는 형태의 차트가 포함된 보고서를 제작할 수 있습니다.

ActiveX 컨트롤을 이용하여 MSChart를 캔바스내에 삽입한 경우, 스크립트 코드창에서 다음과 같은

코드를 입력하여 데이터소스와 연결시킬 수 있습니다.

Sub OnReportStart

rpt.Sections("Detail").Controls("SalesChart").ChartData =

getChartData("http://127.0.0.1/report/examples/chart/chart.asp")

End Sub

그림 57. getChartData 메쏘드를 사용하여 XML데이터 소스와 연결시킨 코드

Page 118: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 111 - 사용자 매뉴얼

페이지끝까지 칸 채우기

여러분은 간혹 일정한 형태의 양식을 데이터가 출력되는 페이지의 끝까지 출력하고자 하는 경우가

있습니다. 예를 들어, 출석부와 같은 형태의 보고서가 대표적인 예가 되겠습니다. 출석부의 경우

학생수에 따라 디테일 섹션이 반복되기 때문에 학생레코드가 마지막까지 오게되면 더 이상

페이지끝까지 테이블을 그릴 수 없습니다. 이 경우, 여러분은 마지막 학생 레코드가 오는 페이지를

계산하고, 해당 페이지 끝까지 자동으로 양식을 그려줄 수 있도록 스크립트 편집기에서 코딩을

해주시면 됩니다.

페이지끝까지 칸을 채우는 예제는 ReportExpress에서 제공하는 예제디렉토리의 Fill_table폴더에서

찾을 수 있습니다. 제공되는 예제는 Fill_table.rpx입니다. 이 예제에서 사용된 코드는 다음과

같습니다:

Sub OnReportStart

pagec = 27 ‘한페이지당 출력될 레코드의 개수

pgtmp = (rpt.Sections("Detail").Controls("xdc").Count mod pagec)

pg = Int(rpt.Sections("Detail").Controls("xdc").Count / pagec)

if pgtmp <> 0 then

pg = CInt(pg) + 1

end if

rpt.MaxPages = pg ‘보고서가 출력할 최대 페이지수를 설정

End Sub

스크립트 에디터에서 마지막 데이터가 포함되는 마지막 페이지수를 계산하고, 이를 보고서에서

출력할 최종 페이지로 설정합니다. 그런 후, 스크립트 편집기를 닫고나서 보고서 디자이너에서

ReportFooter섹션에서 반복시킬 칸을 그려주십시오.

Page 119: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 112 - 사용자 매뉴얼

주의 : ReportFooter섹션에서 항상 페이지끝까지 출력시킬 양식을 그릴때는 디테일 섹션에서 출력될

레코드의 개수와 페이지 풋터의 높이를 고려하여야만 합니다. 즉, 디테일 섹션의 최소값이

올때(1개의 레코드) 출력을 기준으로 ReportFooter섹션의 양식을 그려주셔야만 항상 원하는

의도대로 출력이 될 수 있습니다.

팁 : ReportExpress 디자이너에서 페이지끝까지 계산해서 그려주는 것보다 XML 데이터소스를

생성시키는 작업에서 빈 노드들을 생성시켜주는 것이 보다 효율적인 작업이 될 수 있습니다.

그림 58. 빈칸 채우기 예제를 볼 수 있는 HTML 화면

빈칸 채우기 예제는 제공되는 샘플 예제 디렉토리의 Fill_table 아래에서 보실 수 있습니다.

Page 120: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 113 - 사용자 매뉴얼

자동 번호 출력시키기

ReportExpress는 연결된 XML데이터를 출력할 때 현재 출력되는 레코드가 몇 번째 레코드인가를

확인할 수 있도록 CurrentPosition 속성을 지원합니다. 이 속성을 사용하여 자동으로 일련 번호를

출력시키는 보고서를 제작할 수 있습니다. 이때 첫번째 레코드는 “0”을 반환합니다.

Sub OnFetchData(eof)

'레코드 번호 자동 출력시키기

if Not eof then

rpt.Sections("Detail").Controls("txtCnt").Caption =

rpt.Sections("Detail").Controls("xdc").CurrentPosition + 1

end if

보고서 코딩 팁

1. PageHeader/Footer는 바운드된 컨트롤을 사용하지 마십시오.

2. PageHeader/Footer는 그룹 정보 사용을 하지 마십시오.

3. 섹션 이벤트들은 순차적으로 발생되지 않기 때문에 보고서를 섹션 이벤트 순서에 의존하는

구조로 작성하지 마십시오.

4. BeforePrint 이벤트는 페이지의 포맷을 지정하는데 사용합니다.

5. 컨트롤들은 ReportStart 이벤트가 종료된 후에는 동적으로 추가시키지 마십시오.

6. 보고서의 PrintWidth가 프린터에서 지원하는 종이의 넓이보다 클 경우, 각 보고서

출력페이지 다음에 빈 종이가 출력되게 됩니다.

7. 보고서 제작시 지정한 종이크기를 클라이언트쪽의 프린터에서 지원하지 않을 경우에는 기본

프린터에서 사용하는 종이크기로 대체됩니다.

8. 일단 보고서 처리가 종료되면, 레이아웃 변경에 대한 사항은 보고서를 다시 로딩시켜야만

합니다. 즉, 보고서의 출력 용지 방향을 가로에서 세로로 바꾼 경우, 이를 적용시킬려면

보고서를 다시 실행시켜야만 새로 변경된 사항에 따른 레이아웃으로 출력하실 수 있습니다.

Page 121: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 114 - 사용자 매뉴얼

계층적 레코드셋 이용하기

보고서에서 여러분은 데이터베이스에서 두 개나 그 이상의 서로 관련된 테이블로부터 데이터를

검색하기를 원하는 경우도 있습니다. 대부분 이런 경우 여러분은 그러한 데이터를 분리된

결과집합이나 조인 연산자를 사용하는 하나 또는 그 이상의 결과 집합으로 불러올 수 있습니다.

ReportExpress에서 제공하는 예제 데이터베이스파일(Nwind.mdb)에 포함된

고객테이블(Customers)과 주문테이블(Orders)과 같은 일대다(one-to-many) 관계인 테이블에

대해서 대부분의 프로그래머들은 조인 쿼리를 사용하는 것은 피합니다. 조인 쿼리는 메모리를

낭비하기 때문입니다. 즉, 여러분의 보고서에서 사용할 데이터소스는 하나의 데이터 집합을 다중

메모리 위치에 저장해야만 합니다. 예를 들어 고객테이블과 주문테이블 사이의 조인 쿼리를 근거로

하는 레코드셋 객체의 모든 레코드는 다른 주문을 포함하고 있지만, 고객 정보는 여러 개의 주문을

하는 고객들을 위해 복사됩니다.

만약 조인을 수행하기보다는 분리된 레코드셋으로 데이터를 검색하는 경우에는 레코드셋의 동기화를

유지하기 위해 추가적인 코드를 작성해야 합니다. 예를 들어, 고객과 주문 데이터를 보려면 현재

북마크 된 고객들의 주문만을 볼 수 있도록 하기 위하여 주문 레코드셋에 필터를 적용하기를 원할

것입니다.

조인과 분리된 객체와 관련된 이러한 문제들을 피하기 위하여 마이크로소프트사의 ADO 개발팀은

버전 2.0에서 계층적(hierarchical) 레코드셋이라는 개념을 도입했습니다. 계층적 레코드셋은

마이크로소프트사의 폭스프로의 이전 버전에서 사용했던 개념을 기반으로 했으며, 관련된 많은

레코드셋 객체와 유사합니다. 여러분은 여러 개의 테이블로부터 데이터를 검색하기 위해 다음에 있는

하나의 쿼리를 생성할 수 있습니다.

SHAPE {SELECT * FROM Customers} As Customers

APPEND ({SELECT * FROM Orders} As Orders

RELATE CustomerID TO CustomerID) As Orders

이러한 계층적 레코드셋을 생성하면, ReportExpress의 XML 데이터소스 객체도 평범한 레코드셋의

구조가 아닌 계층적인 구조를 가지게 됩니다.

Page 122: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 115 - 사용자 매뉴얼

여러분들은 우선 이러한 계층적인 구조를 갖도록 하는 데 도움을 주는 OLE DB 공급자를 로드하는

방법에 대해서 학습을 하게 됩니다. 그런 다음 계층 구조의 표준유형을 계층적 쿼리 문장과 함께

사용하는 방법에 대해서도 학습하게 됩니다.

그림 59. 계층적 구조를 갖게 되는 XML Document

Page 123: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 116 - 사용자 매뉴얼

계층적 레코드셋에 대한 예제는 /report/examples/hierarchal 에서 찾을 수 있습니다.

데이터 셰이프 공급자 사용하기

마이크로소프트사의 데이터 액세스 구성요소(MDAC)는 서비스 공급자로 알려져있는 몇몇 OLE DB

공급자를 지원하고 있습니다. 데이터베이스와 직접적으로 통신하는 대신 여러분은 이러한 공급자들의

서비스를 사용할 수 있습니다. 대표적인 서비스 공급자는 Data shaping용 OLE DB 공급자이며,

MSDataShape라고 불리고 있습니다.

ReportExpress에서 계층 구조를 가진 XML 데이터소스를 구성하기 위해 MSDataShape 공급자를

사용할 것입니다. 이 공급자에 있는 기능들을 사용할려면, 먼저 데이터베이스에 연결할 때

MSDataShape 공급자를 참조하도록 해주셔야만 합니다. 이 공급자를 참조하는 것은 연결 문자열에

약간의 변화만 주시면 됩니다. 만약 여러분의 보통 사용하는 연결 문자열이 다음과 같다고 할 때 :

cnn_string = “Provider=SQLOLEDB;Data Source = MyDB; Initial Catalog=NorthWind;”

MSDataShape 공급자를 사용하기 위해서는 연결 문자열을 다음과 같이 바꿔주시면 됩니다.:

cnn_string = “Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=MyDB;Initial

Catalog=Northwind;”

즉, 여러분은 이전에 사용하던 공급자를 데이터 공급자로 설정하면 되는 것입니다. MSDataShape가

여러분의 데이터베이스와 통신하기 위한 OLE DB 공급자를 사용하게 될 것입니다. 일단 여러분이

MSDataShape 공급자를 사용하여 데이터베이스에 연결하였다면, 일반적으로 그래왔듯이 표준적인

비계층적 쿼리도 계속 실행하실 수 있습니다.

데이터 셰이프 공급자의 동작 방법

여러분이 데이터 셰이프 공급자(Data Shape Provider)를 로드하는 연결에 쿼리를 보낼 경우,

공급자가 계층적 레코드셋을 만들기 위해 사용하는 키워드를 그 문자열이 포함하는지를 판단하기

Page 124: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 117 - 사용자 매뉴얼

위해 쿼리 문자열을 분석하게 됩니다. 만약 이러한 키워드가 사용되지 않았다면 데이터 셰이프

공급자는 쿼리 문자열을 데이터 공급자로 여러분이 지정한 OLE DB 공급자에게 전달해 줍니다.

계층적 쿼리 문자열 분석하기

만약 데이터 셰이프 공급자가 키워드를 발견하면 쿼리 스트링을 구별되는 쿼리들로 나누고, 그

쿼리들을 같이 데이터 공급자로 전달하고, 결과를 처리하여 여러분이 요청한 계층구조를 갖는

데이터를 구성하게 됩니다. 예를 들어, 앞에서 예제로 보여드렸던 쿼리 문자열을 살펴보겠습니다:

SHAPE {SELECT * FROM Customers} As Customers

APPEND ({SELECT * FROM Orders} As Orders

RELATE CustomerID TO CustomerID) As Orders

이 쿼리는 두 개의 분리된 테이블(Customers와 Orders)로부터 내용을 검색하는 두 개의 간단한

쿼리 문자열로 구성되었으며, 두 쿼리의 결과들을 어떻게 관계를 맺을 것인가를 지정해 주고

있습니다. 이 예제의 경우 데이터 셰이프 공급자에게 각 쿼리의 CustoemrID 필드 내용을 근거로 두

쿼리를 연관시킬 것을 요구합니다. 그래서 Customers 쿼리에 의해 반환된 현재 레코드와 같은

CustomerID 값을 갖는 Orders 테이블의 레코드들만 보일 것입니다.

SHAPE 키워드는 데이터 셰이프 공급자의 로직을 발생시킵니다. APPEND 키워드는 데이터 셰이프

공급자에게 처음 레코드셋에 필드를 추가하게 합니다. 이렇게 추가된 필드와 함께 각 고객의 주문은

결과로 나타난 레코드셋 객체에 있는 필드 객체에 포함된 것으로 나타나게 됩니다.

본 문서에서는 MSDataShape가 지원하는 두 개의 유형중에 표준(Standard) 계층에 대해서만

다루고 있습니다. 일반적으로 MSDataShape는 표준계층과 함께 매개변수화된(parameterized)

계층도 지원하고 있습니다. 이 두개의 계층 차이점은 어떻게 그리고 언제 데이터를 검색하느냐 하는

것입니다.

매개변수화된 계층은 처음에 모든 데이터를 검색하지 않고 분리된(orphaned) 데이터는 검색하지

Page 125: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 118 - 사용자 매뉴얼

않습니다. 따라서 보다 빠르게 코드를 실행시킬 수 있게 됩니다. 하지만, 이러한 유형의 계층을

사용할 경우 항상 데이터베이스와 연결되어 있을 것을 요구하게 됩니다. 따라서, Save 메쏘드를

사용하여 계층적 레코드셋을 파일(XML)이나 스트림에 지속시킬 수 없습니다. 즉, 계층적 레코드셋을

프로세스 영역 밖을 전달할 수 없기 때문에 ReportExpress에서는 함께 사용할 수 없습니다.

ReportExpress는 현재로서는 표준 계층방식을 사용하여 MSDataShape에서 만들어는 계층적

레코드셋의 XML 파일을 프로세스 영역밖에서 전달 받습니다.

표준 계층을 사용할 경우 여러분은 분리된 데이터(부모 단계의 어떤 행과도 일치하지 않는 자녀

데이터)를 검색하고 저장하고 마치게 됩니다. 예를 들어, 여러분이 특정 지역의 고객들을 검색하고

계층에서 그 고객들의 주문을 검색하기를 원한다고 가정하면 다음의 쿼리를 통해 이를 구현할 수

있게 됩니다:

SHAPE {SELECT * FROM Customers WHERE City = ‘서울특별시’} As Customers

APPEND ({SELECT * FROM Orders} As Orders

RELATE CustomerID To CustomerID) As Orders

문제는 데이터 셰이프 공급자가 데이터베이스에 제출할 쿼리가 서울특별시에 사는 고객에 해당되냐와

관계없이 Orders 테이블에서 모든 레코드를 검색한다는 것입니다. 간단한 해법은 매개변수화된

계층을 사용한 다음의 쿼리를 이용하는 것입니다:

SHAPE {SELECT * FROM Customers WHERE City = ‘서울특별시’} As Customers

APPEND ({SELECT * FROM Orders WHERE CustomerID = ?} As Orders

RELATE CustomerID To PARAMETER 0) As Orders

데이터 셰이프 공급자가 각 고객에 대해 분리된 쿼리에서 주문을 검색하고 부모쿼리에서 검색한

고객들만을 위한 쿼리를 제출할 것이기 때문에 보다 효율적인 쿼리성능을 보장받을 수 있게 됩니다.

하지만, ReportExpress에서는 매개변수화된 계층을 사용할 수 없다는 제한 때문에 다른 방법을

모색해야만 합니다.

이제 계층에 대해서는 잠시 잊기로 하고, 서울특별시에 살고 있는 고객들의 주문만을 검색하는

쿼리를 만들고 싶다면 어떻게 해야되는지를 생각해 보겠습니다. 주문은 한 테이블에 있고, 고객의

Page 126: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 119 - 사용자 매뉴얼

위치를 포함하는 필드는 다른 테이블에 있습니다. SQL서버와 Access는 다음의 모든 문장들을

지원하는데, 각 문장들을 필요한 데이터를 검색할 것입니다.

1. SELECT Orders.* FROM Orders, Customers

WHERE Orders.CustomerID = Customers.CustomerID AND Customers.City = ‘서울특별시’

2. SELECT * FROM Orders WHERE CustomerID IN

(SELECT CustomerID FROM Customers WHERE City = ‘서울특별시’)

3. SELECT * FROM Orders WHERE EXISTS

(SELECT * FROM Orders WHERE CustomerID = Orders.CustomerID

AND City = ‘서울특별시’

위의 쿼리들을 하나씩 실행시켜보고 어떤 문장이 가장 좋은 성능을 갖는지를 관찰하십시오. 만일

여러분이 첫번째 문장이 가장 좋은 성능을 내고 있다는 것을 관찰했다고 가정한다면, 계층에서 그

쿼리를 사용하시면 됩니다.

SHAPE {SELECT * FROM Customers WHERE City = ‘서울특별시’} As Customers

APPEND ({SELECT Orders.* FROM Orders, Customers

WHERE Orders.CustomerID = Customers.CustomerID

AND Customers.City = ‘서울특별시’ } As Orders

RELATE CustomerID To CustomerID) As Orders

Page 127: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 120 - 사용자 매뉴얼

계층 예제

이번 예제를 통해 여러분은 꽤 커다란 계층을 만드는 방법을 단계별로 학습하게 될 것입니다. 문서

공간을 절약하고 읽기 가능한 쿼리를 작성하기 위해서 “SELECT * FROM” 전체 테이블 쿼리를 주로

사용할 것입니다.

1. 기본 계층 쿼리

특정 고객의 주문을 검색하는 것부터 시작하기로 하겠습니다.

SELECT * FROM Orders WHERE CustomerID = ‘ALFKI’

이제 반환된 주문들에 한해서만 주문 세부 사항을 추가하기로 하겠습니다. 그런 다음 특정한

주문 품목의 비용을 포함하는 계산된 필드를 정의합니다. 아래에 데이터를 검색하기 위한

간단한 쿼리가 있습니다.

SELECT [Order Details].*, Quantity * UnitPrice As ItemTotal From [Order Details]

WHERE OrderID IN (SELECT OrderID FROM Orders WHERE CustomerID = ‘ALFKI’)

이것을 계층적 쿼리에 추가하면 다음과 같은 코드를 얻게 될 것입니다.

SHAPE {SELECT * FROM Orders WHERE CustomerID = ‘ALFKI’} AS Orders

APPEND ({SELECT [Order Details].*, Quantity * UnitPrice As ItemTotal

FROM [Order Details] WHERE OrderID IN (SELECT OrderID FROM Orders

WHERE CustomerID = ‘ALFKI’)} As OrderDetails

RELATE OrderID TO OrderID) As OrderDetails

SHAPE 키워드는 데이터 셰이프 공급자가 이것이 계층적 쿼리라는 것을 알게 해주는 역할을

맡습니다. 계층의 부모 단계를 중괄호({})로 감싸고, 그 계층 단계(Orders)를 AS 절로

이름을 붙였습니다. 이 이름을 여러분이 계층을 다시 셰이핑(Reshaping)하고 싶을 때마다

사용할 수 있습니다.

APPEND 키워드는 필드를 레코드셋에 추가시켜 줍니다. 이 경우에는 새 필드는 주문 세부

사항을 포함하고 있습니다. 이 필드의 정의를 괄호로 묶어야만 합니다.

Page 128: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 121 - 사용자 매뉴얼

이 필드를 정의하는 첫 번째 단계는 데이터를 정의하는 쿼리를 입력하고 괄호로 묶는

것입니다. 계층 단계의 이름을 AS 키워드를 사용하여 정하는데 우리의 경우에는

OrderDetails라고 정의하였습니다.

RELATE 키워드를 부모 쿼리에서 제일 처음에 나온 필드와 함께 계층의 부모와 자녀의

관계를 정의하는데 사용합니다. 관계 정의가 끝나면 괄호를 닫고 AS 절로 필드의 이름을

지정해야 합니다.

이렇게 해서 여러분은 SHAPE 쿼리에 대한 대부분의 내용을 다루어보았습니다. 이제

단계별로 하나씩 더 많은 기능을 추가하면서 각각의 경우에 해당하는 새로운 쿼리를

생성시키겠습니다.

2. 필드 추가하기

계층의 OrderDetails 단계에서 각 주문의 전체 총액(Quantity * UnitPrice)를 포함하는

필드가 있습니다. 이 고객의 모든 주문의 전체 총액을 포함하는 필드를 계층의 Orders

단계에 추가합니다. 또한, 이 고객의 주문 수를 포함하는 필드도 추가할 수 있습니다.

여러분의 새 계층 쿼리는 다음과 같을 것입니다.

SHAPE {SELECT * FROM Orders WHERE CustomerID = ‘ALFKI’} AS Orders

APPEND ({SELECT [Order Details].*, Quantity * UnitPrice As ItemTotal

FROM [Order Details] WHERE OrderID IN (SELECT OrderID FROM Orders

WHERE CustomerID = ‘ALFKI’)} As OrderDetails

RELATE OrderID TO OrderID) As OrderDetails,

SUM(OrderDetails.ItemTotal) As OrderTotal,

COUNT(OrderDetails.OrderID) As NumItems

이들 새로운 필드의 문장은 간단합니다. 각 함수에 대해(SUM과 COUNT) 함수 이름을

지정하고 계산이 근거로 삼고 있는 필드를 매개변수로 포함시키십시오. 이 매개변수는

단계의 필드 뿐 아니라 계층의 이름도 포함됩니다.

Page 129: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 122 - 사용자 매뉴얼

3. 형제(sibling) 추가하기

이제 이 주문에 사용된 운송 회사에 관한 정보를 포함하는 계층의 Orders 단계에 필드를

추가해보겠습니다. 이것은 계층의 같은 단계에 있기 때문에, 주문 세부 사항에 대한 형제

장(sibling chapter)으로 간주됩니다. 계층적 쿼리는 다음과 같을 것입니다:

SHAPE {SELECT * FROM Orders WHERE CustomerID = ‘ALFKI’} AS Orders

APPEND ({SELECT [Order Details].*, Quantity * UnitPrice As ItemTotal

FROM [Order Details] WHERE OrderID IN (SELECT OrderID FROM Orders

WHERE CustomerID = ‘ALFKI’)} As OrderDetails

RELATE OrderID TO OrderID) As OrderDetails,

SUM(OrderDetails.ItemTotal) As OrderTotal,

COUNT(OrderDetails.OrderID) As NumItems,

({SELECT * FROM Shippers} As Shipper RELATE ShipVia TO ShipperID) As Shipper

이 문장은 앞에서 주문 세부 사항을 추가할 때 사용했던 문장과 유사하다는 것에

유의하십시오. Shipper 계층 단계의 RELATE 절에서 필드 이름들은 같지 않습니다. 이

경우에는 Orders와 Shipper 테이블이 같은 데이터를 포함하는 필드들의 이름이 다르기

때문입니다. 관계의 부모 단계(Orders)에서의 필드 이름(ShipVia)은 TO절의 왼편에 있으며,

자녀 단계(Shipper)에서의 필드 이름(ShipperID)은 오른편에 위치시켜야만 합니다.

4. 데이터 그룹화

이제 이 계층을 가지고 데이터를 직원(Employee)별로 그룹화 해보겠습니다. 이 그룹화는

주문 세부 사항을 특정 직원에 의해 처리된 주문들의 각 그룹별로 나눕니다.

SHAPE (SHAPE {SELECT * FROM Orders WHERE CustomerID = ‘ALFKI’} AS Orders

APPEND ({SELECT [Order Details].*, Quantity * UnitPrice As ItemTotal

FROM [Order Details] WHERE OrderID IN (SELECT OrderID FROM Orders

WHERE CustomerID = ‘ALFKI’)} As OrderDetails

RELATE OrderID TO OrderID) As OrderDetails,

Page 130: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 123 - 사용자 매뉴얼

SUM(OrderDetails.ItemTotal) As OrderTotal,

COUNT(OrderDetails.OrderID) As NumItems,

({SELECT * FROM Shippers} As Shipper RELATE ShipVia TO ShipperID) As Shipper

) As Orders COMPUTE Orders BY EmployeeID

이번 코드에서 여러분은 전체 쿼리를 괄호로 감싸고 있는 또 다른 SHAPE 키워드를

추가했습니다. 그런 다음 데이터를 담은 필드의 이름을 Orders로 지정하였습니다. 그런후

데이터를 그룹화한다는 것을 지정해 주기 위해 COMPUTE 키워드를 입력했는데 그룹화

작업을 수행하려고 하는 계층 단계의 이름을 여기서 지정하였습니다. 마지막으로 BY

키워드를 입력하고 그룹화하려는 필드의 이름을 입력하였습니다.

5. 필드를 그룹에 추가

각 직원의 주문 수와 직원이 시스템에 입력한 주문 총액을 보여줌으로써 이번 계층 예제를

완성합니다:

SHAPE (SHAPE {SELECT * FROM Orders WHERE CustomerID = ‘ALFKI’} AS Orders

APPEND ({SELECT [Order Details].*, Quantity * UnitPrice As ItemTotal

FROM [Order Details] WHERE OrderID IN (SELECT OrderID FROM Orders

WHERE CustomerID = ‘ALFKI’)} As OrderDetails

RELATE OrderID TO OrderID) As OrderDetails,

SUM(OrderDetails.ItemTotal) As OrderTotal,

COUNT(OrderDetails.OrderID) As NumItems,

({SELECT * FROM Shippers} As Shipper RELATE ShipVia TO ShipperID) As Shipper)

COMPUTE Orders, COUNT(Orders.OrderID) As NumOrders,

SUM(Orders.OrderTotal) AS EmployeeTotal BY EmployeeID

Page 131: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 124 - 사용자 매뉴얼

위에 보인 코드를 적용한 예제는 report/examples/hierarchal/complexh.asp 입니다.

그림 60. 계층적 레코드셋으로부터 생성된 XML 문서

Page 132: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 125 - 사용자 매뉴얼

6. 빈 필드(blank fields) 추가

데이터 셰이프 공급자의 또 다른 매력적인 기능은 여러분이 쿼리에 빈 필드를 추가할 수

있다는 것입니다. 예를 들어, 고객 테이블의 필드와 대응하지 않는 고객 쿼리에 Comments

필드를 추가하고 싶다고 가정해 봅시다. 데이터 셰이프 공급자는 여러분들이 필드의 내용을

수정할 수 있으며, 데이터베이스에 변경을 적용하지 않으면서도 그 필드를 메모장처럼

사용할 수 있게 합니다.

SHAPE {SELECT * FROM Customers} As Customers

APPEND NEW adVarCahr(64) As Comments

여러분은 데이터 셰이프 공급자에게 빈 필드를 추가할 것을 알려주기 위해 NEW 키워드를

사용하면 됩니다. 그런 후, 필드의 유형을 알려주고 AS 키워드로 이름을 지정해주십시오.

더 나아가서 여러분은 데이터베이스와 연결하지 않고도 계층을 생성시킬 수 있습니다.

데이터베이스와 연결하지 않고 데이터 셰이프 공급자를 연결 문자열에서 생성하는 방법은

다음의 연결문자열 처럼 사용하시면 됩니다:

Provider=MSDataShape; Data Provider=None;

이렇게 데이터베이스와 연결하지 않은 상태에서 부모 단계와 자녀 단계에 빈 필드를

생성하는 예제는 다음과 같습니다:

SHAPE APPEND NEW adInteger AS ParentID, NEW adVarChar(32) AS ParentName,

((SHAPE APPEND NEW adInteger AS ChildID, NEW adInteger AS ParentID,

NEW adVarChar(32) AS ChildName)

RELATE ParentID TO ParentID) AS Child

주의 : 자녀 쿼리가 중괄호가 아닌 괄호로 묶여 있어야 합니다.

Page 133: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 126 - 사용자 매뉴얼

계층적 레코드셋을 이용한 보고서는 report\examples\hierarchal 폴더밑에 있으며, 다음과 같은

화면을 통해 확인하실 수 있습니다.

그림 61. 계층형 레코드셋 예제 화면

Page 134: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 127 - 사용자 매뉴얼

목차(TOC)와 프레임을 사용하기

목차 설정하기

목차를 사용하면 보고서에서 보다 쉽게 네비게이션을 할 수 있으며 체계적으로 보실 수도 있습니다.

기본적으로, 보고서를 실행시키면 목차를 생성하지 않습니다. 그러나, 원하는 섹션 이벤트에

TOC.ADD [필드 컨트롤 이름] 을 추가함으로써 보고서 실행시 목차(TOC)를 생성시키실 수 있습니다.

다음의 코드에서는 디테일 섹션내의 각 아이템에 대한 간단한 목차를 생성시키는 방법을 보여주고

있습니다:

그림 62. 그룹 섹션에서 목차(TOC)를 City 필드에 대해 생성시키도록 하는 코드

그룹별 목차 사용하기

목차 항목이 위치하는 페이지에 따라, 다른 섹션 이벤트들을 사용하여 목차의 아이템을 추가 시킬 수

있습니다. 예를 들자면, GroupHeader의 OnFormat 이벤트를 사용하면 목차 항목은

GroupHeader의 시작부분에 위치되고 반면 AfterPrint 이벤트에서 사용하면 GroupHeader의

마지막부분에 항목이 위치됩니다. 다음의 코드는 그룹핑을 사용한 목차를 설정하는 예제입니다:

(웹문서 디렉토리/report/examples/grouping/rpxFiles/customer.rpx 사용)

Page 135: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 128 - 사용자 매뉴얼

ghOrderGroup의 OnFormat 이벤트 :

Sub OnFormat

rpt.TOC.Add rpt.Sections("Detail").Controls("xdc").Field("@City")

End Sub

Detail의 OnFormat 이벤트 :

Sub OnFormat

rpt.TOC.Add rpt.Sections("Detail").Controls("txtCity") & "\" & _

rpt.Sections("Detail").Controls("txtCustomer")

End Sub

그림 63. 디테일 섹션에서 고객이름으로 하부 목차 생성시키는 코드

위의 예제 코드의 실행결과는 다음과 같습니다:

Page 136: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 129 - 사용자 매뉴얼

그림 64. 목차(TOC) 사용 예제 HTML 페이지

Page 137: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 130 - 사용자 매뉴얼

그림 65. 목차기능을 구현한 보고서

주의: “Whole Page” 모드 또는 보다 작게 보고서를 볼 경우 목차의 항목을 클릭하게 되면 페이지의

수직 위치는 변경되지 않습니다.

Page 138: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 131 - 사용자 매뉴얼

프레임 컨트롤 사용하기

프레임 컨트롤은 보고서의 표현 능력을 풍부하게 하는데 도움을 주기 위해 만들어졌습니다. 프레임

컨트롤은 테이블 설정을 쉽게 하고 컨트롤을 다룰 때 발생되는 문제를 해결하며 이미지와 같은

정적인 객체를 사용할 경우 섹션이 늘어나지 않는 문제도 해결할 수 있습니다. 또한 프레임 컨트롤은

섹션이 여러 페이지에 걸쳐 늘어날 경우 페이지의 하단부에 선이 출력되지 않는 것을 조정할 수

있도록 CloseBorder 속성도 갖고 있습니다. 프레임 컨트롤은 여러분이 원하는 섹션에 드래그하고

각각의 행이나 열이 필요할 경우 팬을 추가시킬 수 있도록 되어있습니다. 각각의 팬은 수직 혹은

수평으로 분할할 수 있도록 되어 있습니다. 또한 각각의 팬은 컨트롤들 포함하는 것은 물로, 저마다의

경계 속성과 배경색을 지정할 수 있습니다.

프레임 컨트롤을 이용한 테이블 작성

이번 예제를 통해 여러분은 프레임 컨트롤을 사용하여 테이블을 구성하는 방법을 배우게 됩니다.

1. PageHeader에 프레임 컨트롤 한 개를 추가하고 프레임을 수직으로 4개로 나누십시오.

2. 각 팬의 넓이를 팬에 포함된 라벨의 넓이와 동일하게 하십시오.

3. 처음부터 3번째까지의 팬은 위, 아래 그리고 왼쪽 측면의 경계를 설정하십시오.

4. 마지막 팬의 경계는 모든 측면으로 설정하십시오.

5. 각각의 팬의 배경색을 &H00C0C0C0&(회색) 으로 설정하십시오.

6. 프레임 컨트롤의 CanShrink 속성을 True로 설정하십시오.

7. PageHeader의 CanShrink 속성을 True로 설정하십시오.

8. 디테일 섹션에서도 각 필드 컨트롤에 대한 또 다른 프레임 컨트롤의 설정을 위와 같은

방법으로 하십시오.

9. 첫번째부터 3번째까지의 팬의 경계는 아랫쪽과 왼쪽 측면에 대해서만 설정하십시오.

10. 마지막 팬의 경계는 오른쪽, 아랫쪽 그리고 왼쪽 측면에 대해서 설정하십시오.

11. 디테일 섹션의 CanShrink 속성을 True로 설정하여 주십시오.

Page 139: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 132 - 사용자 매뉴얼

12. 보고서 디자이너는 다음과 같은 모습이 될 것입니다.

그림 66. 프레임 컨트롤을 이용한 디자인 화면

Page 140: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 133 - 사용자 매뉴얼

13. 미리보기를 하여 정확하게 테이블이 구현되었는지 확인하십시오.

그림 67. 인쇄 미리보기로 본 프레임 컨트롤을 사용한 예제

하이퍼링크 사용하기

ReportExpress는 보고서에 하이퍼링크를 추가시킬 수 있도록 지원하고 있습니다. 하이퍼링크 속성은

HTML 스타일의 링크(이를 테면, http:// 와 mailto:) 보고서에서 사용됩니다. 하이퍼링크 속성을

사용하면, 보고서는 다양한 목적으로 사용될 수 있는 “누를수있는” 컨트롤을 갖게 됩니다. 이러한

기능을 이용하여 다른 보고서를 보여주는 작업도 가능합니다.

Page 141: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 134 - 사용자 매뉴얼

HTML 링크 사용하기

컨트롤의 HyperLink 속성을 URL 형식으로 설정해주시면 됩니다. 메일의 경우는

mailto:[email protected] 과 같은 형식으로 해주시면 됩니다. 미리보기를 누른후,

HyperLink 속성을 지정한 컨트롤위로 마우스를 위치시키면 마우스의 모양이 바뀌게 되고, 이때 이

컨트롤을 클릭하면 지정된 URL의 브라우저창이 나타나게 됩니다.

Page 142: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 135 - 사용자 매뉴얼

스크립트 사용하기

스크립트를 어디에 사용하나?

스크립트를 사용하는 가장 큰 이유는 XML 파일로 저장되는 보고서 파일에 특정한 코드를 사용하기

위해서입니다. RPX 파일은 보고서 디자이너와 무관하게 동작합니다. 스크립트에서는 ActiveScripting

언어를 사용하여 제작된 보고서 파일과 상호 작용할 수 있는 방법을 제공합니다. 보고서 파일을

저장할 때 스크립트를 포함시켰다면, 후에 이 보고서 파일이 로딩되어 실행되고 보여질 때

디자이너를 사용하지 않고서도 뷰어 컨트롤에서 직접 원하는 작업을 수행토록 할 수 있습니다. 또한

스크립트는 재 컴파일하지 않고서도 배포된 보고서를 갱신이 가능하도록 RPX 파일의 연결에도

사용할 수 있습니다. 더 나아가서, 여러분은 필드의 DataField 속성값에서 스크립트 수식을 사용하여

필드값의 계산이나 커스텀 그룹핑도 가능하게 할 수 있습니다.

주의: ActiveScripting 에 대한 보다 자세한 내용은 마이크로소프트사의 홈페이지를 참조하십시오:

http://msdn.microsoft.com/scripting/

스크립트를 추가하는 방법

보고서에 스크립트를 추가하기 위해서는 메인 툴바의 스크립트 코드 편집 아이콘( )을 선택하여

스크립트 편집창을 열면됩니다.

일단 스크립트 편집 창이 나타나면, 각각의 보고서 디자이너의 객체들과 이벤트들에 대한 스크립트

편집이 가능해집니다. 원하는 객체와 그 이벤트를 선택한 후, 보고서에 적당한 이벤트를 설정하는

코드를 넣어주면 됩니다. 보고서가 RPX로 저장될 경우, 스크립트 편집창에서 추가시킨 코드들은

파일의 일부분으로 들어갑니다. 보고서에서 작동시킬 스크립트 코드가 RPX 파일로 저장된 보고서에

함께 포함되므로, 쉽게 로딩시켜 보고서 뷰어에서 보여주거나 특정한 시점에 동작되도록 할 수

있습니다.

Page 143: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 136 - 사용자 매뉴얼

스크립트로 작업하기

보고서에서 사용된 컨트롤들과 상호작용시키기위해 다음의 문법이 스크립트에 사용됩니다.

rpt.Sections("해당 세션의 이름").Controls("해당 콘트롤의 이름")

중요: 보고서와 관련된 모든 호출은 "rpt" 를 사용합니다. 마치 비주얼베이직에서 “me”를 사용하는

방식과 동일하다고 보시면 됩니다. 스크립트에서 디자이너 코드내의 컨트롤, 전역 변수 혹은 전역

속성을 참조할 때는 반드시 “rpt”를 사용하십시오

예:

만일 보고서에서 사용되는 데이터베이스 설정을 수정하고자 할 경우, 다음 코드를 스크립트내에

사용합니다.

Sub OnDataInitialize

Dim cnnStr

' 데이터소스 XML 파일 경로 설정

cnnStr = "http://www.test.com/report/conn.asp"

rpt.Sections(“Detail”).Controls(“xdc”).FileURL = cnnStr

' XML 데이터 패턴 설정

rpt.Sections("Detail").Controls("xdc").RecordsetPattern = "//rs:data/z:row"

End Sub

보고서 디자인 파일에 스크립트가 포함된 RPX 파일을 사용할 경우, 보고서 파일은 스크립트 코드와

연결되어 실행됩니다. 파일 메뉴에서 RPX파일을 로딩시키거나, 런타임으로 뷰어에서 동작시킬 때

RPX파일은 보고서 뷰어로 삽입됩니다.

Page 144: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 137 - 사용자 매뉴얼

XML (.RPX) 파일

RPX 파일은 개방형 XML 기반의 포맷을 사용한 보고서 레이아웃을 포함하고 있습니다. 보고서

레이아웃과 스크립트를 포함한 XML 스키마로 구성되어 있습니다. RPX 파일은 프로젝트의 재 컴파일

과정없이도 변경이나 수정이 가능합니다. 또한 RPX 파일은 실행시킬 보고서들을 저장한

데이터베이스의 이름 레포지터리를 설정하여 이용할 수도 있습니다. RPX 파일은 개방형 포맷으로

작성되었기 때문에 향후 .NET에서 기본적으로 제공되는 기능에 자연스럽게 연동시킬 수 있습니다.

주의: RPX 파일이 디자이너뷰어로 로딩될 경우, 뷰어에 보여지게 되는 보고서는 RPX 파일의

레이아웃으로 로딩됩니다. RPX 파일이 로딩될 때 발생되는 이벤트의 순서는 스크립트 코드를 작성한

순서에 따라 진행하게 됩니다.

Page 145: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 138 - 사용자 매뉴얼

부 록

ReportExpress 뷰어를 통한 웹상에서의 보고서 출력 구현 방법 ---------------- 140

ReportExpress 상수(Constants) --------------------------------------------- 143

범용 속성들(Common properties) --------------------------------------------- 159

범용 메쏘드 --------------------------------------------------------------------- 159

ActiveReport 속성값들 -------------------------------------------------------- 160

ActiveReport 이벤트들 -------------------------------------------------------- 163

경계선 속성 --------------------------------------------------------------------- 164

필드 컨트롤 속성 --------------------------------------------------------------- 164

라벨 컨트롤 속성 --------------------------------------------------------------- 167

XML 데이터 컨트롤 속성 ------------------------------------------------------- 168

XML 데이터 컨트롤 메쏘드 ----------------------------------------------------- 173

섹션 속성 ----------------------------------------------------------------------- 177

섹션 이벤트 --------------------------------------------------------------------- 179

오류 코드 ----------------------------------------------------------------------- 180

VBScripts --------------------------------------------------------------------- 185

VBScripts 데이터 형식 ----------------------------------------------- 188

VBScripts 변수 ------------------------------------------------------ 190

VBScripts 상수 ------------------------------------------------------- 193

VBScripts 연산자 ---------------------------------------------------- 194

조건문 사용 ----------------------------------------------------------- 195

코드에 의한 루프처리 -------------------------------------------------- 199

VBScripts 프로시져 -------------------------------------------------- 205

VBScripts 코딩규칙 -------------------------------------------------- 207

XML 개요 ---------------------------------------------------------------------- 214

XSLT 및 Xpath ------------------------------------------------ 225

표준 ---------------------------------------------------------- 227

Page 146: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 139 - 사용자 매뉴얼

SOAP 이란 --------------------------------------------------- 230

특성에 대한 공백처리 방식 ---------------------------------------- 239

XML 선언 ------------------------------------------------------ 241

VisualBasic에서 XMLDSO 사용방법 ----------------------------- 245

Java에서 XMLDSO 사용방법 ------------------------------------ 247

Page 147: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 140 - 사용자 매뉴얼

ReportExpress 뷰어를 통한 웹상에서의 보고서 출력 구현 방법

ReportExpress는 클라이언트에 ActiveX 컨트롤 형식으로 적재되는 구성요소인

Viewer(ReportExpress.cab)를 사용하여 웹 상에서 보고서 출력이 가능하도록 합니다.

이 구성요소는 ActiveX 컨트롤로 제작되어 있기 때문에 웹페이지상에서 <object></object>태그를

사용하여 클라이언트에 자동적재 및 동작되도록 하는 메커니즘을 갖고 있습니다.

1. ReportExpress Viewer

ReportExpress Viewer는 ReportExpress 디자이너로 제작한 보고서 레이아웃

파일(RPX)을 웹 서버로부터 다운 받아 로딩하고, 웹 서버의 XML 문서를 로딩받거나

ADO로 직접 데이터베이스에 접근하여 보고서를 생성시키는 핵심 엔진입니다.

ReportExpress Viewer는 3개의 속성과 한 개의 메쏘드를 가지고 있습니다.

다음은 Viewer의 속성에 대한 설명입니다.

속성 이름 설명

Server 보고서 파일(RPX)이 들어있는 폴더(rpxFiles)의

상위 URL를 설정합니다. 이 값을 통해 뷰어는

다운받을 보고서 파일의 서버위치를 알게 됩니다.

ReportLayout 뷰어에서 다운받아 로딩할 rpx 파일의 이름을

지정합니다. 경로명을 제외한 순수한 보고서 파일의

이름만을 지정하시면 됩니다.

ViewToolBar 뷰어에서 내보내기 기능을 숨기거나 보여줄 때

지정합니다. 기본 값으로는 1이며, 0으로 값을

설정한 경우에만 뷰어에서 내보내기 기능을

사용자가 쓸 수 없게 됩니다.

Page 148: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 141 - 사용자 매뉴얼

뷰어의 메쏘드는 RunViewer입니다. 이 메쏘드를 실행시키면, 보고서 뷰어가 실행되면서

Server 속성값으로 설정한 URL의 rpxFiles 디렉토리에서 ReportLayout 속성에서 지정한

보고서 파일을 다운로드 받게 됩니다. 보고서 파일을 다운로드받은 후, 곧 이어 XML 데이터

컨트롤의 FileURL에서 지정한 customer.asp 파일을 웹 서버상에서 실행시키고, 여기서

생성된 XML 문서를 파싱하여 보고서를 구현하게 됩니다.

예) 웹서버가 www.report.com 이고 report라는 디렉토리의 하부 폴더인 rpxFiles 에

customer.rpx에 있는 보고서 파일을 사용하고자 할 경우 다음과 같이 HTML 코딩을 하시면

됩니다. 이때 보고서 파일의 XML 데이터 컨트롤의 FileURL의 값은

http://www.report.com/report/customer.asp 라고 가정하겠습니다.

<HTML>

<HEAD>

<TITLE>ReportExpress Viewer 설치및 사용방법</TITLE>

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>

<!--

function RunView_onclick() {

Viewer1.Server = "http://www.report.com/report/" ;

Viewer1.ReportLayout = "customer.rpx" ;

Viewer1.RunViewer() ;

}

//-->

</SCRIPT>

</HEAD>

<BODY BGCOLOR="#ffffff">

<center>

<INPUT id=RunView type=button value="보기" name="RunView" LANGUAGE=javascript

onclick="RunView_onclick();">

Page 149: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 142 - 사용자 매뉴얼

</center>

<OBJECT ID="Viewer1"

CLASSID="CLSID:1CC26E3F-F20A-4074-8BB0-F34242591459"

CODEBASE="ReportExpress.CAB#version=3,1,0,14"

STYLE="display: none">

</OBJECT>

</BODY>

</HTML>

Page 150: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 143 - 사용자 매뉴얼

ReportExpress 상수(Constants)

ADOLockType

값 상수명 설명

-1 ddADOLockUnspecified

1 ddADOLockReadOnly 읽기 속성, 데이터 변경할 수 없음.

2 ddADOLockPessimistic 레코드순으로 락킹. 데이터 공급자는

일반적으로 데이터 소스가 편집되는 순간에

레코드들에게 락을 거는데 이는 레코드의

성공적인 수정을 위한 것입니다.

3 ddADOLockOptimistic 데이터 공급자가 최적의 락을 사용하여

업데이트 메쏘드를 호출할 경우에만 레코드에

락을 겁니다.

4 ddADOLockBatchOptimistic 업데이트가 이루어지는 즉시 락이 걸리는

것과는 반대로 나중에 한꺼번에 업데이트할 때

필요합니다.

ADOCursorLocation

값 상수명 설명

2 ddADOUseServer 서버쪽 커서를 생성

3 ddADOUseClient 클라이언트쪽 커서를 생성

ADOCursorType

값 상수명 설명

0 ddADOOpenForwardOnly 기본값으로 전진용 커서를 생성

1 ddADOOpenKeyset 키셋 커서 생성

2 ddADOOpenDynamic 동적 커서 생성

Page 151: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 144 - 사용자 매뉴얼

3 ddADOOpenStatic 정적 커서 생성

BackStyle

값 상수명 설명

0 ddBKTransparent 백그라운드를 투명하게 하여, 객체 뒤에

위치하는 객체를 투영하여 볼 수 있도록 함.

0 ddBKNormal 보통값으로 객체 뒤의 모든 컨트롤을 숨김.

BarCodeCaptionPosition

값 상수명 설명

0 ddbcCaptionNone 바코드의 캡션을 보여주지 않음.

1 ddbcCaptionAbove 캡션을 바코드의 윗쪽에 위치시킴.

2 ddbcCaptionBelow 캡션을 바코드의 아랫쪽에 위치시킴.

BarCodeDirection

값 상수명 설명

0 ddbcLeftToRight 바코드의 방향을 왼쪽에서 오른쪽으로 설정.

1 ddbcRightToLeft 바코드의 방향을 오른쪽에서 왼쪽으로 설정.

2 ddbcTopToBottom 바코드의 방향을 아래로 설정.

3 ddbcBottomToTop 바코드의 방향을 위로 설정.

BarCodeStyle

값 상수명 설명

0 ddbcNone 없음.

1 ddbcAnsi39 ANSI 3 of 9 (코드 39)는 대문자, 숫자, -, * $

/ + % 사용

2 ddbcAnsi39X ANSI 확장형 3 of 9(확장 코드 39)는 완전한

Page 152: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 145 - 사용자 매뉴얼

ASCII 문자셋을 사용

3 ddbcCode_2_of_5 2 of 5 는 숫자만 사용

4 ddbcCode25intlv 삽입된 2 of 5는 숫자만 사용

5 ddbcCode25mat 25 매트릭스

6 ddbcCode39 코드 39는 숫자, % * $ / . , - + 그리고

대문자를 사용

7 ddbcCode39X 확장된 코드 39는 완전한 ASCII 문자셋을

사용

8 ddbcCode_128_A 128 A는 컨트롤 문자, 숫자, 구두점과

소문자를 사용

9 ddbcCode_128_B 128 B는 구두점, 숫자, 대문자와 소문자 사용

10 ddbcCode_128_C 128 C는 숫자만 사용

11 ddbcCode_128auto 128 Auto는 완전한 ASCII 문자셋을 사용함.

자동으로 코드 128 A, B 그리고 C중에 하나를

선택하여 바코드를 최소로 줄여줌.

12 ddbcCode93 코드 93은 대문자, % $ * / , + - 그리고

숫자를 사용

13 ddbcCode93x 확장형 코드 93은 완전한 ASCII 문자셋을

사용

14 ddbcMSI MSI 코드는 숫자만 사용

15 ddbcPostNet PostNet은 자릿수 확인을 하는 숫자만 사용

16 ddbcCodabar Codabar는 A B C D + - : , / 그리고 숫자

사용

17 ddbcEAN_8 EAN-8은 7개의 숫자와 자릿수 확인 사용

18 ddbcEAN_13 EAN-13은 12개의 숫자와 자릿수 확인 사용

19 ddbcUPC_A UPC-A는 11개의 숫자와 자릿수 확인 사용

20 ddbcUPC_E0 UPC-E0는 숫자만 사용함. 압축되지 않은 UPC

Page 153: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 146 - 사용자 매뉴얼

심볼들을 이용. 캡션 속성값에 6자리의 UPC-E

코드나 0이 아닌 코드 타입을 포함하는

11자리의 완전한 UPC-A 코드를 사용함. 만일

11자리의 코드가 입력되면, 가능한 경우에

한해서 바코드 컨트롤은 6자리의 UPC-E

코드로 변환시킴. 11자리의 코드를 6자리의

코드로 변환시킬 수 없을 경우에는 아무것도

보여지지 않음.

21 ddbcUPC_E1 UPC-E1은 숫자만 사용. 일반적으로

소매점에서 선반 라벨링에 사용함. U.P.C.E1

의 입력되는 문자열의 길이는 6개의 숫자임.

22 ddbcRM4SCC Royal Mail RM4SCC는 자릿수를 확인하는

숫자와 문자만을 사용. 영국의 Royal Mail에서

사용되는 바코드임.

23 ddbcUCCEAN128 UCC/EAN-128은 완전한 ASCII 문자셋을

사용. 코드 128의 특별한 버전이 HIBC

어플리케이션에서 사용됨.

BorderLineStyle

값 상수명 설명

0 ddBLNone 보여지지 않음. 경계선 없음.

1 ddBLSolid

2 ddBLDash

3 ddBLDot

4 ddBLDashDot

5 ddBLDashDotDot

6 ddBLDouble

7 ddBLThickSolid

Page 154: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 147 - 사용자 매뉴얼

8 ddBLThickDash

9 ddBLThickDot

10 ddBLThickDashDot

11 ddBLThickDashDotDot

12 ddBLThickDouble

13 ddBLExtraThickSolid

ColumnDirections

값 상수명 설명

0 ddCDDownAcross 각 섹션을 아랫방향으로 컬럼을 출력한 후,

다음 컬럼은 오른쪽으로 출력함.

1 ddCDAcrossDown 첫번째 열 다음에 오는 두번째 열의 출력을

오른쪽 방향으로 출력함.

DAOCursorType

값 상수명 설명

0 ddDAODefaultCursor ODBC 드라이버가 커서 타입을 선택하도록 함

1 ddDAOODBCCursor ODBC 드라이버의 클라이언트쪽 커서를 사용

2 ddDAOServerSideCursor 서버가 커서를 관리하도록 함.

주의 : 보다 자세한 정보는 비주얼 베이직 도움말과 관련 문서를 참조하십시오.

DAODefaultType

값 상수명 설명

1 ddDAOUseODBC ODBCDirect를 사용하여 JET 엔진을

바이패스하고 RDO에 직접 액세스함.

2 ddDAOUseJet Microsoft JET를 사용하여 데이터 소스에

액세스

Page 155: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 148 - 사용자 매뉴얼

DAORecordsetType

값 상수명 설명

0 DdDAOTable 테이블 타입의 레코드셋 객체

1 ddDAODynaset Dynaset 타입의 레코드셋 객체

2 ddDAOSnapshot Snapshot 타입의 레코드셋 객체

주의 : 보다 자세한 정보는 비주얼 베이직 도움말과 관련 문서를 참조하십시오.

FindConstants

값 상수명 설명

2 rtfWholeWord 단어 전체 찾기

4 rtfMatchCase 대소문자 구별하여 찾기

8 rtfDown 문자 스트림에서 앞쪽으로 찾기

16 rtfUp 문자 스트림에서 뒤쪽으로 찾기

GrpKeepTogether

값 상수명 설명

0 ddGrpNone 페이지가 그룹 헤더 바로 뒤에서 끊어짐

1 ddGrpFirstDetail 그룹 헤더는 동일 페이지 혹은 컬럼상에서

첫번째 디테일 섹션과 함께 출력됨

2 ddGrpAll 그룹 헤더, 디테일 그리고 그룹 풋터 모두가

동일 페이지상에 함께 출력됨.

Job Status

값 상수명 설명

0 ddJSIdle 프린트 작업이 유휴상태임을 나타냄

1 ddJSPrinting 프린트 작업이 진행중임을 나타냄

2 ddJSCompleted 프린트 작업이 종료되었음을 나타냄

Page 156: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 149 - 사용자 매뉴얼

3 ddJSAborted 현재 프린트 작업이 취소되었음을 나타냄

LayoutAction

값 상수명 설명

1 ddLAPrintSection 섹션이 출력될 것인지를 지정

2 ddLAMoveLayout ActiveReports가 페이지상의 다음번 출력

위치로 이동할지를 지정

4 ddLANextRecord 섹션이 다음번 레코드로 진행할지를 지정

LoadSaveConstants

값 상수명 설명

0 rtfRTF 문자 스트림을 RTF 파일로 저장

1 rtfText 문자 스트림을 ASCII 텍스트 파일로 저장

LineStyle

값 상수명 설명

0 ddLSTransparent 선 없음.

1 ddLSSolid

2 ddLSDash

3 ddLSDot

4 ddLSDashDot

5 ddLSDashDotDot

NewPageConstants

값 상수명 설명

0 ddNPNone 섹션이전에 페이지 넘김 없음.

1 ddNPBefore 새로운 페이지에 섹션 출력을 시작시킴

Page 157: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 150 - 사용자 매뉴얼

2 ddNPAfter 섹션 출력이후에 새로운 페이지 시작

3 ddNPBeforAfter 새로운 페이지에 섹션 출력을 시작하고 출력이

끝나면 새로운 페이지를 시작

PictureAlignment

값 상수명 설명

0 ddPATopLeft 그림을 이미지 컨트롤 영역의 왼쪽 상단부분에

정렬시킴

1 ddPATopRight 그림을 이미지 컨트롤 영역의 오른쪽

상단부분에 정렬시킴

2 ddPACenter 그림을 이미지 컨트롤 영역의 가운데에

정렬시킴

3 ddPABottomLeft 그림을 이미지 컨트롤 영역의 왼쪽 하단부분에

정렬시킴

4 ddPABottomRight 그림을 이미지 컨트롤 영역의 오른쪽

하단부분에 정렬시킴

PrtCollate

값 상수명 설명

-1 COLLATE_PRINTERDEFAULT 기본 프린터에서 설정된 값을 사용

0 COLLATE_FALSE 여러 복사본을 출력할 때 페이자별로 모두

출력되도록 함.

1 COLLATE_TRUE 여러 복사본을 출력할 때, 각 복사본의

페이지가 출력된 후, 다음 그룹에서 다시 모든

페이지가 출력되도록 함.

Page 158: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 151 - 사용자 매뉴얼

PrtDuplex

값 상수명 설명

-1 ddDXPrinterDefault 선택된 프린터의 기본 설정값을 사용함

1 ddDXSimplex 양면 출력을 하지 않음

2 ddDXHorizontal 종이의 수평방향으로 양면 출력

3 ddDXVertical 종이의 수직방향으로 양면 출력

PrtOrientation

값 상수명 설명

-1 ddODefault 프린터의 기본 출력 방향 설정값을 사용함

1 ddOPortrait 종이의 넓이 방향을 출력

2 ddOLandScape 종이의 길이 방향으로 출력

PrtQuality

값 상수명 설명

1 ddPQDraft 초벌 출력, 매우 낮은 해상도

2 ddPQLow 낮은 해상도

3 ddPQMedium 중간 해상도

4 ddPQHigh 높은 해상도

ReportStatus

값 상수명 설명

0 ddStatIdle 보고서가 유휴상태임을 나타냄

1 ddStatRunning 보고서가 실행중임을 나타냄

2 ddStatCompleted 보고서가 완료되었음을 나타냄

3 ddStatCancelled 보고서가 취소되었음을 나타냄

Page 159: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 152 - 사용자 매뉴얼

RDOCursorDriver

값 상수명 설명

0 ddRDOUseIfNeeded ODBC 드라이버가 사용하기에 적합한

드라이버를 선택함

1 ddRDOUseODBC ODBC 커서 라이브러리를 사용

2 ddRDOUseServer 서버족 커서를 사용

3 ddRDOUseClientBatch 옵티미스틱 클라이언트쪽 커서 사용

4 ddRDOUseNone 레코드셋은 커서를 반환하지 않음

주의 : 보다 자세한 정보는 비주얼 베이직 도움말과 관련 문서를 참조하십시오.

RDOLockType

값 상수명 설명

1 ddRDOConcurReadOnly 레코드셋은 읽기 전용(갱신 불가능)

2 ddRDOConcurLock 비관적인 동시성(Pessimistic concurrency)

3 ddRDOConcurRowVer 낙관적인 동시성(Optimistic concurrency)

row id를 기준으로 함

4 ddRDOConcurValues 낙관적인 동시성 (row 값을 기준으로 함)

5 ddRDOConcurBatch 배치모드를 사용한 낙관적인 동시성. 각각의

성공적인 갱신에 대한 상태를 반환

주의 : 보다 자세한 정보는 비주얼 베이직 도움말과 관련 문서를 참조하십시오.

RDOPrompt

값 상수명 설명

0 ddRDODriverPrompt 드라이버 관리자가 ODBC 데이터소스

대화창을 보여줌. 연결을 위해 사용된 연결

문자열은 선택된 데이터 소스 이름(DSN)에

의해 만들어지며 대화창을 통해 사용자에 의해

Page 160: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 153 - 사용자 매뉴얼

완성됨. 또는 DSN이 선택되지 않았고

DataSourceName 속성값이 없다면, 기본

DSN을 사용함.

1 ddRDODriverNoPrompt 드라이버 관리자는 연결에 제공된 연결

문자열을 사용함. 연결 정보가 충분하지

않다면, OpenConnection 메쏘드는

애매모호한 오류를 반환함.

2 ddRDODriverComplete DSN 키워드를 포함한 연결문자열이 제공될

경우, 드라이버 관리자는 문자열을 연결의

공급자로 사용하고 그 외의 경우에는

ddRDODriverPrompt가 지정되었을 때처럼

작동됨.

3 ddRDODriverCompleteRequired 완전한 연결에 필요하지 않은 어떠한 정보에

대해서도 드라이버가 컨트롤을 비활성화한다는

것만 제외하면 ddRDODriverComplete와

동일한 방식으로 작동됨.

주의 : 보다 자세한 정보는 비주얼 베이직 도움말과 관련 문서를 참조하십시오.

RDOResultsetType

값 상수명 설명

1 ddRDOOpenKeySet keyset 결과셋을 생성

3 ddRDOOpenStatic 정적 결과셋을 생성

주의 : 보다 자세한 정보는 비주얼 베이직 도움말과 관련 문서를 참조하십시오.

Page 161: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 154 - 사용자 매뉴얼

RepeatStyle

값 상수명 설명

0 ddRepeatNone 그룹 헤더를 재출력 하지 않음

1 ddRepeatOnPage 그룹의 디테일 섹션내에서 각 페이지의

윗쪽에 그룹 헤더를 출력

2 ddRepeatOnColumn 그룹의 디테일 섹션내에서 각 컬럼의 윗쪽에

그룹 헤더를 출력

3 ddRepeatAll 그룹의 디테일 섹션내에서 각각의 컬럼과

페이지 윗쪽에 그룹 헤더를 출력

4 ddRepeatOnPageIncludeNoDetail 섹션내에 데이터가 존재하지 않더라도

그룹의 디테일 섹션내에서 각 페이지의

윗쪽에 그룹 헤더를 출력

SaveOptionTypes

값 상수명 설명

1 ddSOFile 보고서 레이아웃을 파일로 저장

2 ddSOByteArray 보고서 레이아웃을 바이트 배열로 저장

SectionType

값 상수명 설명

0 ddSTReportHeader 보고서의 어떠한 섹션이 출력되기 이전에 단

한번만 출력되는 섹션

1 ddSTReportFooter 모든 보고서의 섹션이 출력된 후 단 한번만

출력되는 섹션

2 ddSTPageHeader 보고서의 각 페이지의 윗쪽에 한번씩 출력되는

섹션

3 ddSTPageFooter 보고서의 각 페이지 아랫부분에 한번씩

Page 162: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 155 - 사용자 매뉴얼

출력되는 섹션

4 ddSTGroupHeader 그룹의 값 혹은 그룹 필드의 값이

변경될때마다 디테일 섹션이전에 한번

출력되는 섹션

5 ddSTGroupFooter 그룹의 값 혹은 그룹 필드의 값이

변경될때마다 디테일 섹션이션후에 한번

출력되는 섹션

6 ddSTDetail 보고서에서 각 레코드마다 또는 디테일

라인마다 한번씩 출력되는 섹션

ShapeType

값 상수명 설명

0 ddSHRectangle 사각형 모양

1 ddSHEllipse 타원형 혹은 원형 모양

2 ddSHRoundRectangle 원형 모서리를 가지는 사각형 모양

SizeMode

값 상수명 설명

0 ddSMClip 그림을 실제 크기로 보여줌. 만일 그림이 컨트롤의 영역보다

클 경우에는 잘림.

1 ddSMStretch 그림 크기를 컨트롤의 영역에 맞춤

2 ddSMZoom 컨트롤의 높이나 넓이에 맞추어 지정된 영역내에서 왜곡없이

그림의 크기를 조절

SplitType

값 상수명 설명

0 ddTopSplit 스플릿터를 윗쪽에 배치

Page 163: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 156 - 사용자 매뉴얼

1 ddBottomSplit 스플릿터를 아랫쪽에 배치

2 ddLeftSplit 스플릿터를 왼쪽에 배치

3 ddRightSplit 스플릿터를 오른쪽에 배치

SummaryFunctions

값 상수명 설명

0 ddSFSum 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들의 합을 계산

1 ddSFAvg 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들의 평균값을 계산

2 ddSFCount 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들의 개수를 계산

3 ddSFMin 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들중에서 최소값을 계산

4 ddSFMax 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들중에서 최대값을 계산

5 ddSFVar 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들의 평방편차(平方偏差)를 계산

6 ddSFVarP 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들의 모집단(母集團) 평방편차를 계산

7 ddSFStdDev 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들의 표준편차(標準偏差)를 계산

8 ddSFStdDevP 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 모든

값들의 모집단 표준편차를 계산

9 ddSFDsum 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 다른

필드와 구별되는 값들에 대한 합계를 계산

10 ddSFDAvg 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 다른

Page 164: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 157 - 사용자 매뉴얼

필드와 구별되는 값들에 대한 평균값을 계산

11 ddSFDCount 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 다른

필드와 구별되는 값들에 대한 개수를 계산

12 ddSFDVar 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 다른

필드와 구별되는 값들에 대한 평방편차를 계산

13 ddSFDVarP 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 다른

필드와 구별되는 값들에 대한 모집단 평방편차를 계산

14 ddSFDStdDev 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 다른

필드와 구별되는 값들에 대한 표준편차를 계산

15 ddSFDStdDevP 지정한 썸머리 영역(그룹, 페이지 혹은 보고서)내의 다른

필드와 구별되는 값들에 대한 모집단 표준편차를 계산

SummaryRunningType

값 상수명 설명

0 ddSRNone 러닝 썸머리 계산을 하지 않음

1 ddSRGroup 동일 그룹 레벨내에서 각각의 값은 현재 값과 이전의 모든

값의 합계가 되는 러닝 썸머리를 계산

2 ddSRAll 모든 값들에 대한 러닝 썸머리를 계산

SummaryType

값 상수명 설명

0 ddSMNone 요약을 하지 않음

1 ddSMGrandTotal 보고서내의 모든 레코드들에 대한 썸머리 함수를 계산하는

보고서 레벨에서의 썸머리를 지정

2 ddSMPageTotal 각 페이지내에 존재하는 모든 레코드들에 대한 썸머리

함수를 계산하는 페이지 레벨에서의 썸머리를 지정

3 ddSMSubTotal 각 그룹 레벨내에서의 모든 레코드들에 대한 썸머리 함수를

Page 165: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 158 - 사용자 매뉴얼

계산하는 그룹 레벨에서의 썸머리를 지정

4 ddSMPageCount 페이지 수를 지정

TextAlignment

값 상수명 설명

0 ddTXLeft 객체 영역의 왼쪽 모서리로 문자를 정렬

1 ddTXRight 객체 영역의 오른쪽 모서리로 문자를 정렬

2 ddTXCenter 객체 영역의 수평방향으로 가운데 부분에 문자를 정렬

VerticalTextAlignment

값 상수명 설명

0 ddTXTop 객체 영역의 위쪽으로 문자를 정렬

1 ddTXMiddle 객체 영역의 수직방향으로 가운데부분에 문자를 정렬

2 ddTXBottom 객체 영역의 아랫쪽으로 문자를 정렬

ViewerStatus

값 상수명 설명

0 ddVStatusIdle 뷰어가 자신의 캐쉬로 페이지들의 로딩을 완료하였음

1 ddVStatusReadingData 뷰어가 자신의 캐쉬로 보고서 페이지들을 읽고 있음

Page 166: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 159 - 사용자 매뉴얼

범용 속성들(Common Properties)

여기서 나열한 속성들은 ReportExpress에서 사용되는 여러 객체들에서 공유되는 것들입니다.

속성 데이터 타입 설명

BackColor OLE_COLOR 객체의 배경색을 지정하거나 반환

BackStyle BackStyle 컨트롤이 투명 혹은 일반 모드로 표현되는 것을

지정하거나 반환

DataField 문자열 컨트롤에 대입되는 데이터가 참조되는 데이터베이스

필드를 설정하거나 반환

Font StdFont 컨트롤이나 캔바스 객체의 폰트 설정값을 설정하거나

반환

ForeColor OLE_COLOR 컨트롤이나 캔바스 객체의 전경색을 지정하거나 반환.

전경색을 바꾸면 폰트색도 바뀌게 됨

범용 메쏘드(Common Methods)

메쏘드 설명

ZOrder 컨트롤이 캔바스상의 레이어 앞쪽 혹은 뒤쪽의 순위를 지정함. 컨트롤의

Zorder를 변경시킴으로써 다른 컨트롤들의 앞쪽 혹은 뒤쪽으로 배치할

수 있음.

문법 :

Sub Zorder (Position As Integer)

설정값 :

값 설명

0 Zorder를 0으로 설정하여 컨트롤을 앞쪽으로 위치시킴

1 Zorder를 1로 설정하여 컨트롤을 뒤쪽으로 위치시킴

Page 167: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 160 - 사용자 매뉴얼

ActiveReport 속성값들

속성 데이터 타입 설명

Canvas 캔바스 캔바스 속성은 각각의 페이지에 그려지는

표면을 완전하게 액세스할 수 있도록 합니다.

캔바스 속성은 배경색이 보여지기전이나

전경색이 보여진후 보고서 출력이 문자, 선,

모양 혹은 그림들을 페이지상에 직접 표현할 때

사용할 수 있습니다.

DocumentName 문자열 보고서의 문서이름을 설정하거나 반환합니다.

문서의 이름은 프린터 스풀러에 나타나며

보고서를 쉽게 식별할 수 있도록 하기위해

사용됩니다.

Fields RptFields 필드는 RptField 객체의 컬렉션으로 바운드

혹은 언바운드 보고서 작업을 할 때 컨트롤들,

썸머리 필드들과 그룹 섹션을 데이터 소스에

바인딩시킬 때 사용합니다.

LayoutAction 정수 섹션의 레이아웃 과정 단계들로 제어권을

넘겨줍니다. 보고서 실행, 미리보기, 출력 또는

저장된 과정에서 레이아웃 액션의 조합을

사용하여 보고서가 어떻게 출력될지를 변경시킬

수 있습니다.

MaxPages Long ReportExpress가 처리할 페이지의 최대개수를

지정하거나 반환합니다. 최대 페이지수에

도달하게 되면, ReportExpress는 보고서 처리를

중지합니다.

PageBorder Border 페이지의 출력 가능한 영역을 둘러싸고 있는

경계에 대한 경계 객체 정의들을 설정하거나

Page 168: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 161 - 사용자 매뉴얼

반환합니다. 이 속성은 각 페이지의 경계선을

그리는데 사용할 수 있습니다.

PageNumber Long 현재 보고서의 페이지 번호를 반환합니다.

Pages 페이지 컬렉션 출력된 모든 페이지들에 대한 캔바스 객체를

포함하는 페이지 컬렉션의 레퍼런스를 반환

ParentReport 객체 서브리포트의 부모 리포트 객체의 참조를

반환합니다. 이를 통하여 서브리포트는 자신의

부모 보고서로부터 정보를 가져올 수 있습니다.

Printer 프린터 프린터 객체의 참조를 반환합니다.

PrintWidth Single 보고서의 출력가능한 넓이를

트윕단위(1440트윕은 1인치)로 설정하거나

반환합니다.

Parameters ARParameters 질의 매개변수 컬렉션에 대한 참조를 반환

RulerVisible 부울린 보고서 위부분과 측면 룰러가 런타임동안

보여지는지의 여부를 설정하거나 반환

Sections 섹션 보고서의 모든 섹션 객체들의 컬렉션을

설정하거나 반환

Script 문자열 런타임에 동작시킬 스크립트 문자열을

설정하거나 반환합니다. 보고서의 이벤트내에

작성된 코드는 외부에서 보고서를 수정하는데

이용됩니다.

ScriptDebuggerEnabled 부울린 보고서가 스크립트 디버거를 사용하여 스크립트

코드를 디버깅할지를 설정하거나 반환

ScriptLanguage 문자열 스크립트 속성들을 작성하고 해석하는데 이용될

스크립트 언어를 설정하거나 반환

ShowParameterUI 부울린 보고서가 작동될 때 질의 매개변수가

나타날지의 여부를 설정하거나 반환

Page 169: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 162 - 사용자 매뉴얼

Status ReportStatus 보고서가 작동중인지, 쉬고 있는지,

완료되었는지 혹은 취소되었는지를 반환

TOC TOC 보고서 목차 객체의 참조를 반환합니다. TOC

객체는 TOC를 통한 네비게이션을 위한

메쏘드처럼 TOC 항목들을 추가하거나 제거하는

기능을 액세스할 수 있도록 합니다.

TOCEnabled 부울린 보고서가 보일 때 목차 트리뷰를

활성화시킬지의 여부를 설정또는 반환

TOCVisible 부울린 보고서가 보여질 때 뷰어에서 목차 트리뷰가

보여지게 될지의 여부를 설정하거나 반환

TOCWidth Single 환목차 트리 뷰의 넓이를 트윕단위로

설정하거나 반환

ToolbarVisible 부울린 툴바가 미리보기 창에서 보여질지의 여부를

설정하거나 반환

UserData Variant 사용자에 한정된 정보를 설정하거나 반환

Version 문자열 제품 버전과 빌드 번호를 반환

Watermark stdPicture 특정한 이미지를 보고서의 배경으로

추가시킵니다. 워터마크 그림은 다른 워터마크

속성값들에 의해 위치, 크기, 정렬 및 지정된

페이지상에 출력이 될 수 있도록 조정이

가능합니다.

WatermarkAlignment PictureAlignment 캔바스에 워터마크가 추가될 때 워터마크의

수직과 수평 위치를 설정하거나 반환

WatermarkPrintOnPages 문자열 워터마크가 추가되어질 페이지들을 지정하거나

반환

WatermarkSizeMode SizeMode 워터마크가 캔바스상에서 이미지로 나타날 때의

크기를 설정하거나 반환

Page 170: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 163 - 사용자 매뉴얼

Zoom 정수 보여지는 페이지에 대한 확대비율을 설정하거나

반환

ActiveReport 이벤트들

이벤트 설명

DataInitialize ReportStart 이전에 이벤트가 발생되어 보고서 필드 컬렉션에

커스텀 필드들을 추가시킬 때 사용됩니다.

Error ReportExpress의 내부 오류가 발생하면 이벤트가 발생됩니다.

FetchData 새로운 레코드를 처리할때마다 발생됩니다. DataInitialize

이벤트에서 추가한 커스텀 필드의 값을 설정할 때 이용합니다.

FindProgress 보고서상에서 검색이 수행될 때 발생합니다. 검색위치가 보고서의

마지막 혹은 처음에 도달하면 이벤트가 발생됩니다.

Hyperlink 하이퍼링크가 클릭되면 발생됩니다. 이 이벤트는 하이퍼링크를

리다이렉트 시키거나 하이퍼링크 기능을 막고싶을 때 사용합니다.

KeyDown 뷰어에 포커스가 있는동안 키보드의 키가 눌릴 때 발생됩니다.

KeyPress 뷰어에 포커스가 있는동안 키보드의 키가 눌렸다가 올라올 때

발생됩니다.

KeyUp 뷰어에 포커스가 있는동안 키보드가 올라올 때 발생됩니다.

MouseOver 보고서 페이지위에 마우스가 움직일 때 발생됩니다. 하이퍼링크를

설정한 컨트롤위로 마우스가 움직이면, 링크가 반환됩니다.

NoData 데이터 컨트롤의 결과셋에 아무 레코드도 반환되지 않을 때

발생합니다.

PageEnd 페이지 처리후 발생됩니다.

PageStart ReportExpress가 페이지를 처리하기 시작할 때 발생합니다.

PrintAborted 사용자가 프린터 작업이 종료되기전에 취소시켰을 때 PrintReport

메쏘드에서 호출됩니다.

Page 171: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 164 - 사용자 매뉴얼

PrintProgress 프린터 작업중 각 페이지가 출력될 때 발생합니다.

PromptDialogClosed 질의를 위한 매개 변수가 입력되었거나 매개변수 대화창이 취소되면

발생됩니다.

ReportEnd 보고서가 완전히 처리를 종료하면 발생됩니다.

ReportStart ReportExpress가 보고서 처리를 시작하면 발생합니다.

TOCClick TOC 트리뷰 창내에서 마우스를 클릭하면 발생됩니다.

TOCSelChange TOC 선택이 변경되면 발생됩니다.

ToolbarClick 툴바를 클릭했을 때 미리보기 모드에서 발생합니다.

경계선 속성(Border Properties)

속성 데이터 타입 설명

BottomColor OLE_COLOR 밑쪽 모서리의 라인 색

BottomStyle BorderLineStyle 밑쪽 모서리의 라인 스타일

LeftColor OLE_COLOR 왼쪽 모서리의 라인 색

LeftStyle BorderLineStyle 왼쪽 모서리의 라인 스타일

RightColor OLE_COLOR 오른쪽 모서리의 라인 색

RightStyle BorderLineStyle 오른쪽 모서리의 라인 스타일

Shadow 부울린 컨트롤의 주변에 그림자를 그릴지의 여부를 결정

TopColor OLE_COLOR 윗쪽 모서리의 라인 색

TopStyle BorderLineStyle 윗쪽 모서리의 라인 스타일

필드 컨트롤 속성

속성 데이터 타입 설명

Alignment TextAlignment 출력될 값이 필드의 모서리에 상대적으로

왼쪽, 가운데 그리고 오른쪽에 위치하는지를

결정합니다.

Page 172: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 165 - 사용자 매뉴얼

BackColor OLE_COLOR 필드의 배경색을 채울 색을 설정하거나

반환합니다.

BackStyle 정수 필드의 투명성을 설정하거나 반환합니다.

CanCrow 부울린 True일 경우, 필드 영역은 문자열에 맞춰

수직방향으로 늘어나게 됩니다. False일

경우에는 필드의 미리 정해진 크기내에서

문자열이 잘려집니다.

CanShrink 부울린 True인 경우, 필드는 텍스트의 크기에 맞춰

수직방향으로 줄어듭니다.

ClassName 문자열 컨트롤의 전역 스타일을 설정하거나

반환합니다. 전역 스타일은 스타일 드롭다운

윈도우에서 지정됩니다.

DataField 문자열 바운드된 필드의 이름을 설정하거나

반환합니다.

DataValue Variant 포맷팅이 적용되기전 필드의 값을

설정하거나 반환합니다.

Font StdFont 필드의 값을 출력할 때 사용하는 폰트의

속성을 설정하거나 반환합니다.

ForeColor OLE_COLOR 필드의 값을 출력할 때 사용하는 폰트

색깔을 지정합니다.

hyperlink 문자열 필드의 하이퍼링크를 설정하거나

반환합니다. 일단 하이퍼링크가 설정되면,

사용자는 런타임에서 필드를 클릭함으로써

지정한 링크로 이동하게 됩니다.

Multiline 부울린 필드의 내용에 따라 한줄 혹은 여러줄로

출력될지를 결정합니다.

OutputFormat 문자열 필드의 데이터 값을 출력할 문자열 값으로

Page 173: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 166 - 사용자 매뉴얼

변환시킬 때 사용하는 포맷팅 문자를

설정하거나 반환합니다.

Style 문자열 필드의 스타일 문자열을 설정하거나

반환합니다. 스타일 문자열은 각각의 필드에

대한 특정한 표현을 지정하고자 할 경우

사용될 수 있습니다.

SummaryDistinctfield 문자열 구별 썸머리 함수를 사용하여 계산시킬

필드의 이름을 설정합니다.

SummaryDistinctValue 문자열 언바운드된 구별 썸머리 함수를 계산하는데

사용될 값을 설정합니다.

SummaryFunc SummaryFunctions 지정한 필드가 요약 함수 형태로 계산되도록

설정합니다.

SummaryGroup 문자열 요약시킬 그룹 레벨을 지정합니다. 이

속성은 SummaryType dl 그룹 레벨

썸머리가 아닐경우에는 무시됩니다.

SummaryRunning SummaryRunningType 사용할 런닝 썸머리의 형태를 지정합니다.

SummaryType SummaryType 상요할 요약화의 레벨을 지정합니다.

Text 문자열 출력될 필드의 포맷된 값을 지정하거나

반환합니다.

VerticalAlignment VerticalTextAlignment 필드의 윗쪽, 중간 그리고 아랫쪽에 대한

상대적인 출력 위치를 지정합니다.

WordWrap 부울린 필드의 문자열이 겹쳐질지를 설정하거나

반환합니다.

Zorder 정수 컨트롤의 앞 또는 뒤쪽 순서를 지정하거나

반환합니다. 컨트롤의 Zorder를 바꿈으로써

다른 컨트롤의 앞쪽 혹은 뒤쪽에 위치시킬

수 있습니다.

Page 174: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 167 - 사용자 매뉴얼

라벨 컨트롤 속성

속성 데이터 타입 설명

Alignment TextAlignment 라벨의 왼쪽, 가운데 또는 오른쪽 모서리의

상대적인 위치에 캡션이 출력될지를

결정합니다.

Angle 정수 출력될 값의 각도(기울기)를 설정하거나

반환합니다. 1=1/10도

BackColor OLE_COLOR 라벨의 배경을 채울 색을 지정하거나

반환합니다.

BackStyle 정수 라벨의 투명도를 설정하거나 반환합니다.

Caption 문자열 출력될 값을 설정합니다.

ClassName 문자열 컨트롤의 전역 스타일을 지정하거나

반환합니다. 전역 스타일은 스트일 드롭다운

창에서 지정됩니다.

Font StdFont 라벨의 값을 출력할 때 사용하는 폰트의

속성을 지정하거나 반환합니다.

ForeColor OLE_COLOR 라벨값을 출력할 때 사용할 폰트 색을

지정합니다.

Hyperlink 문자열 라벨의 하이퍼링크를 지정하거나

반환합니다. 일단 하이퍼링크가 설정되면,

사용자는 런타임에 라벨을 클릭함으로써

지정된 링크로 이동할 수 있습니다.

Multiline 부울린 출력될 라벨을 한줄 혹은 여러줄에 걸치게

할지를 결정합니다.

Style 문자열 라벨의 스타일 문자열을 설정하거나

반환합니다. 스타일 문자열은 각 라벨에

대한 각각의 표현을 지정할 때 사용할 수

Page 175: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 168 - 사용자 매뉴얼

있습니다.

VerticalAlignment VerticalTextAlignment 라벨의 영역에 대해 상대적인 윗쪽, 중간

혹은 아랫쪽 위치에 출력시킬 지를

결정합니다.

WordWrap 부울린 라벨의 캡션이 겹쳐질지를 설정하거나

반환합니다. WordWrap이 False로 설정되어

있다면, 스타일의 속성창에 “white-

space:nowrap”이 나타나게 됩니다. 라벨의

캡션이 그 넓이보다 길 경우에는 문자열은

잘립니다.

Zorder 정수 컨트롤의 앞쪽 혹은 뒤쪽의 순서를

설정하거나 반환합니다. 컨트롤의 Zorder를

변경시킴으로써 다른 컨트롤의 앞쪽 혹은

뒤쪽에 위치시킬 수 있습니다.

XML 데이터 컨트롤 속성

속성 데이터 타입 설명

Count Long XML RecordCount를 설정하거나 반환합니다.

CurrentPosition Long XML 데이터베이스의 현재 위치를 설정하거나 반환합니다.

FileURL 문자열 XML 데이터베이스의 파일 URL을 설정하거나 반환합니다.

NodeList Variant XML 데이터베이스의 노트 목록을 설정하거나 반환합니다.

RecordSetPattern 문자열 XML 데이터베이스에서 어떤 노드들을 반환할 것인지를

지정하는 XSL 패턴을 설정하거나 반환합니다.

ValidateOnParse 부울린 XML 데이터베이스가 링크된 XML 스크마를 파싱하는동안

XML 구조를 확인할지를 설정하거나 반환합니다.

Page 176: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 169 - 사용자 매뉴얼

Count

설명 : RecordsetPattern 속성값에서 설정한 XSLPattern에 의해 선택되어진 노드들의 개수를 반

환합니다.

데이터 타입 : 스트링

활용 가능성

디자인시 불가능

런타임시 읽기만 가능

예제

Sub OnReportStart

Dim recCount

recCount = rpt.Sections("Detail").Controls("xdc").Count

End Sub

CurrentPosition

설명 : XML 데이터베이스의 현재 사용중인 레코드의 번호를 반환합니다.

주의 : 데이터베이스의 첫 번째 레코드의 위치는 0입니다.

데이터 타입 : 스트링

활용 가능성

디자인시 사용불가능

런타임시 읽기만 가능

Page 177: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 170 - 사용자 매뉴얼

예제 :

Sub OnFormat

Dim res

rpt.Sections("Detail").Controls("lcnt").Caption =

rpt.Sections("Detail").Controls("xdc").CurrentPosition + 1

res = (rpt.Sections("Detail").Controls("xdc").CurrentPosition + 1) mod 5

rpt.Sections("Detail").Controls("cntT").Caption = res

if res = 0 then

rpt.Sections("Detail").Controls("Line1").LineWeight = 3

else

rpt.Sections("Detail").Controls("Line1").LineWeight= 1

end if

End Sub

FileURL

설명 : 보고서에서 사용되는 XML 문서의 파일 이름이나 XML 데이터컨트롤의 URL 을 설정하거나

반환합니다.

데이터 타입 : 스트링

활용가능성

디자인시 읽기/쓰기

런타임시 읽기/쓰기

예제 :

Sub OnDataInitialize

rpt.sections("Detail").controls("xdc").FileURL = "http://127.0.0.1/report/customer.asp"

End Sub

Page 178: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 171 - 사용자 매뉴얼

NodeList

설명 : 현재 XML 레코드셋을 만들고 있는 노드들의 목록을 설정하거나 반환합니다. NodeList는

RecordSetPattern 값에 의하거나 XML NodeList 객체를 직접 설정함으로써 조작할 수 있습니다.

데이터 타입 : 스트링

활용가능성

디자인시 불가능

런타임시 읽기/쓰기

RecordSetPattern

설명 : 보고서를 생성시키는 과정에서 반복되는 노드들을 가져올 때 사용하는 XSL 패턴을 설정하

거나 반환합니다. 보고서는 RecordSetPattern내에서 선택되어진 각각의 노드들을 사용하여 디테일

섹션을 생성시킵니다.

XML 데이터 컨트롤을 사용할 때 DataField 속성값은 선택되어진 레코드셋 패턴에 의한 NodeList

내의 현재 노드가 기본 경로가 되는 Xpath 패턴으로 표현됩니다.

예를 들어, 다음의 XML 문서에서는 XSL 레코드셋 패턴을 //ITEM으로 설정하여 두 개의 레코드들

이 포함된 XML 문서의 모든 ITEM 노드들을 선택할 수 있습니다.

<ORDER ID=”12”>

<ITEM ID=”ITEM1”>Customer1</ITEM>

<ITEM ID=”ITEM2”>Customer2</ITEM>

</ORDER>

주의 : XSL 패턴은 대소문자를 인식하기 때문에 반드시 정확한 XSL 문법을 사용해야만 합니다.

XSL과 Xpath 문서는 MSDN 사이트에서 참조하시면 됩니다. :

http://msdn.microsoft.com/library/psdk/xmlsdk/xslr3prm.htm

Page 179: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 172 - 사용자 매뉴얼

일반적인 XSL 패턴들 :

패턴 설명

//* 모든 노드들

//ITEM 모든 ITEM 노드들

/ 루트 아이템

/LAYOUT/iTEM/* /LAYOUT/ITEM 의 모든 자녀 노드들

//ITEM[@type] 타입 속성을 포함하는 모든 아이템 노드들

//ITEM[@id=”1”] Id 속성값이 “1”인 모든 아이템 노드들

데이터 타입 : 스트링

활용 가능성

디자인시 읽기/쓰기

런타임시 읽기/쓰기

ValidateOnParse

설명 : XML 스키마의 파싱중에 링크된 XML 스키마에 대한 XML 구조가 올바른지를 XML 데이터

베이스가 확인할지의 여부를 설정하거나 반환합니다. 만일 ValidateOnParse가 false이면, 올바른

형태를 가진 XML 데이터베이스만이 사용될 수 있습니다.

데이터 타입 : 스트링 (True 혹은 False)

활용 가능성

디자인시 불가능

런타임시 읽기/쓰기

Page 180: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 173 - 사용자 매뉴얼

XML 데이터 컨트롤 메쏘드

메소드 설명

Field XML 데이터베이스로부터 지정한 필드를 반환합니다. 서브리포트들을 사용

할 경우, asNodeList를 true로 설정함으로써 서브리포트들의 XML 데이터

컨트롤에 수동으로 바인딩시킬 수 있습니다.

Function Field (“이름”, [asNodeList])

LoadXML 지정한 XML 문자열을 사용하여 XML 데이터를 로딩합니다. XML 문자열은

XML 문서 전체일 수도 있고, 오류가 없는 XML 문서의 부분일 수도 있습

니다.

Sub LoadXML(XMLString)

MoveNext XML 데이터베이스에서 다음 한 레코드를 이동합니다.

Sub MoveNext()

Reset XML 데이터베이스를 초기화합니다.

Sub Reset()

Field

설명 : XML 데이터베이스로부터 지정한 필드를 반환합니다. 서브리포트들을 사용할 경우,

asNodeList를 true로 설정함으로써 서브리포트들의 XML 데이터컨트롤에 수동으로 바인딩시킬 수

있습니다.

반환 타입 : 없음

문법 :

Function Field(“이름”, [AsNodeList])

Page 181: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 174 - 사용자 매뉴얼

매개변수

이름 타입 설명

이름 문자열 XML 필드의 이름

AsNodeList 부울린 필드가 NodeList로써 사용될것인가를 결정

예제 :

Sub OnFormat

rpt.Sections("Detail").Controls("SubReport1").Object =

rpt.Sections("Detail").Controls("xdc").Field("Manifest/Item",True)

End Sub

LoadXML

설명 : 지정한 XML 문자열을 사용하여 XML 데이터를 로딩합니다. XML 문자열은 XML 문서 전체

일 수도 있고, 오류가 없는 XML 문서의 부분일 수도 있습니다.

반환 타입 : 없음

문법 :

Sub LoadXML (XMLString As Integer)

매개변수

이름 타입 설명

XMLString 문자열 로딩시킬 XML 파일을 지정하는 문자열

예제 :

Sub OnDataInitialize

rpt.Sections("Detail").Controls("xdc").ValidateOnParse = True

rpt.Sections("Detail").Controls("xdc").RecordSetPattern = "//Customer"

Page 182: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 175 - 사용자 매뉴얼

rpt.Sections("Detail").Controls("xdc").LoadXML ("<Order>" &_

"<Customer>" &_

"<Name>John Doe</Name>" &_

"<Cardnum>131 131 131 131</Cardnum>" &_

"<Manifest>" &_

"<Item>" &_

"<ID>204</ID>" &_

"<Title>Advanced VB</Title>" &_

"<Quantity>1</Quantity>" &_

"<UnitPrice>$10.75</UnitPrice>" &_

"</Item>" &_

"</Manifest>" &_

"<Receipt>" &_

"<Subtotal>$23.75</Subtotal>" &_

"<Tax>$2.43</Tax>" &_

"</Receipt>" &_

"</Customer>" &_

"</Orders>")

End Sub

MoveNext

설명 : XML 데이터베이스에서 다음 한 레코드를 이동합니다.

반환 타입 : 없음

문법 :

Sub MoveNext()

Page 183: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 176 - 사용자 매뉴얼

매개변수

이름 타입 설명

없음 없음 없음

Reset

설명 : 원래의 설정값으로 XML 데이터베이스를 초기화하거나 새로운 설정값으로 노드항목을 선택

하고 다시 불러오도록 합니다. 노드항목을 재설정하면 CurrentPosition은 첫번째 레코드 항목을 반

환하게 됩니다.

반환 타입 : 없음

문법 :

Sub Reset()

매개변수

이름 타입 설명

없음 없음 없음

Page 184: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 177 - 사용자 매뉴얼

섹션 속성

속성 데이터 타입 설명

BackColor OLE_COLOR 섹션의 배경색을 지정하거나 반환합니다. 이

설정값이 반영되기 위해서는 BackStyle 속성값이

ddBKNormal로 설정되어 있어야 합니다.

BackStyle 정수 객체가 투명한지 노멀한 배경인지를 설정하거나

반환합니다. 투명한 배경은 섹션의 뒤로 놓여지는

것과 같은 효과를 냅니다.

CanGrow 부울린 섹션의 내용에 따라 최대 높이를 넘어설 경우 그

높이를 증가시킬 수 있는가를 결정합니다.

CanShrink 부울린 섹션의 높이가 그 안에 포함되어 있는 구성요소의

크기보다 클 경우 줄어들 수 있는가를 결정합니다.

ColumnCount 정수 섹션의 컬럼수를 설정하거나 반환합니다.

ColumnDirection ColumnDirections 여러 컬럼을 출력할 때의 방향을 설정하거나

반환합니다.

ColumnLayout 부울린 그룹 헤더 혹은 풋터 섹션이 자신의 디테일 컬럼

설정을 반영할지를 결정합니다.

ColumnSpacing Single 여러 컬럼을 가지는 보고서에서 컬럼사이의 공간을

설정하거나 반환합니다(단위는 트윕).

Controls 컨트롤 섹션에 위치한 컨트롤들의 컬렉션 참조를

반환합니다.

DataField 문자열 그룹 헤더 섹션에 적용됩니다. 그룹핑 데이터를

위해 사용하는 필드의 이름을 설정하거나

반환합니다. ReportExpress는 여기서 지정한

데이터 필드가 변경될때마다 새로운 그룹을

시작합니다.

GroupValue Variant 그룹 헤더 섹션에 적용됩니다. 언바운드된 그룹핑

Page 185: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 178 - 사용자 매뉴얼

데이터에 대해서 사용됩니다. 보고서가 실행중에

이 속성값을 설정하면 ReportExpress는 그 값이

변할때마다 새로운 그룹을 시작합니다.

GrpKeepTogether GrpKeepTogether 그룹 헤더 섹션에 적용됩니다. 그룹이 자신의

디테일 섹션으로부터 분리될 수 있는지를

결정합니다.

Height Single 섹션의 높이를 트윕단위로 지정합니다.

IsRepeating 부울린 섹션이 마지막 페이지부터 반복되면 True를

반환합니다.

KeepTogether 부울린 섹션이 페이지상에 놓여질 적절한 영역이 없는

경우 다른 페이지에 걸쳐 출력될지를 결정합니다.

NewColumn NewPageConstants 컬럼의 시작 혹은 종료시에 발생되는 컬럼

브레이크에 선행되거나 그 이후에 페이지 넘김이

될지를 결정합니다. PageHeader나 PageFooter

섹션에는 적용되지 않습니다.

NewPage NewPageConstants 페이지가 시작되거나 종료됨으로써 발생되는

페이지 넘김이 선행되거나 그 이후에 발생할지를

결정합니다. PageHeader나 PageFooter 섹션에는

적용되지 않습니다.

PrintAtBottom 부울린 GroupFooter 혹은 ReportFooter 가 페이지의

밑부분에 출력되도록 할지를 설정하거나 그 값을

반환합니다.

Repeat RepeatStyle 디테일 섹션이 페이지에 걸쳐지게 될 경우 새로운

페이지의 시작부분에 그룹 섹션이 반복하게 할지를

결정합니다.

Script 문자열 섹션에서 사용할 스크립트를 설정하거나 그 값을

반환합니다.

Type SectionType 섹션의 타입을 반환합니다.(ReportHeader, Detail

Page 186: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 179 - 사용자 매뉴얼

등등)

UnderlayNext 부울린 섹션의 출력을 다음 섹션에 바로 밑에 할지를

결정합니다. 다음에 오는 섹션은 아랫쪽 좌표대신

섹션의 윗쪽 좌표로부터 출력을 시작하게 됩니다.

Visible 부울린 섹션을 보여줄 것인지를 결정합니다. False인 경우

섹션은 출력되지 않습니다.

섹션 이벤트

이벤트 설명

AfterPrint 섹션이 캔바스에 표현된 후에 이벤트가 발생됩니다.

BeforePrint 섹션이 캔바스에 표현되지 이전에 이벤트가 발생됩니다.

Format 데이터가 적재되고 섹션에 포함된 컨트롤에 바운드되면 이벤트가 발생됩니

다만, 캔바스에 섹션이 표현되기 전입니다.

Page 187: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 180 - 사용자 매뉴얼

오류 코드

오류 코드 설명 객체

2000 GridX/Y의 출력범위가 벗어남. 올바른 범위는 1부터 48까지

입니다.

ActiveReport

2001 섹션의 이름이 틀립니다. 알파벳으로 구성된 문자만을 허용

합니다.

섹션(Section)

2002 이름이 중복되었습니다. 컨트롤이나 섹션의 이름이 이미 존

재합니다.

섹션, 컨트롤

2003 속성값이 잘못되었습니다. 속성값이 범위를 벗어났거나 올바

른 값이 아닙니다.

ActiveReport,

CheckBox, Canvas,

Field, TOC, Label,

OleObject, Printer,

RDOControl, Shape,

Section, BarCode

2004 RDD 컨트롤의 RowerSize 혹은 KeySize가 잘못된 값으로

설정되어 있습니다.

RDO 데이터 컨트롤

2005 RDO 컨트롤의 결과셋이 잘못된 객체로 설정되어 있습니다.

컨트롤은 올바른 결과셋 객체를 요구합니다.

RDO 데이터 컨트롤

2006 RDO 컨트롤의 커넥션 속성의 값이 올바르지 않거나 빈 객

체로 설정되어 있습니다. 컨트롤이 올바른 연결 객체를 요구

합니다.

RDO 데이터 컨트롤

2007 프린터 드라이버가 낱장공급장치(PaperBins)를 지원하지 않

습니다.

프린터

2008 프린터 드라이버가 사용자 정의 종이크기를 지원하지 않습니

다(256).

프린터

2009 Printer.StartJob이 이전 작업이 종료하기전에 여러 번 호출

되었습니다.

프린터

Page 188: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 181 - 사용자 매뉴얼

2010 Printer.EndJob이 Printer.StartJob 호출없이 호출되었습니

다.

프린터

2011 Printer.Escape 메쏘드가 호출되었지만, 활성화된 프린터 작

업이 없습니다. 프린터로 이스케이프 코드를 보내기위해서는

Printer.StartJob을 호출해야 합니다.

프린터

2012 Printer.StartPage, EndPage, PrintPage를 잘못 호출하였습

니다. 프린터 작업이 활성화되지 않았습니다. 먼저

Printer.StartJob을 호출하십시오.

프린터

2013 현재 프린터 드라이버에서 이스케이프 시퀀스를 전달하는 것

을 지원하지 않습니다.

프린터

2014 SubReport.Object 액세스에 실패하였습니다. 객체 속성값

이 설정되어 있지 않습니다.

서브리포트

2015 SubReport.Object 속성이 올바르지 않은 객체로 설정되어

있습니다. 객체 속성값은 올바른 ActiveReport 컬렉션이어

야만 합니다.

서브리포트

2016 Control.Item 혹은 Controls.Remove가 올바르지 않은 인

덱스로 호출되었습니다. 컨트롤 이름이 컬렉션에 존재하지

않습니다.

컨트롤

2017 RTF 문서내에 존재하지 않는 필드 이름으로 ReplaceField가

호출되었습니다.

RichEdit

2018 마진이 너무 큽니다. ActiveReport

2019 페이지 헤더와 풋터가 너무 커서 보고서 레이아웃을 처리할

수 없습니다.

ActiveReport

2020 RDO(원격 데이터 객체)가 컴퓨터에 설치되지 않았습니다. ActiveReport

2021 필터 매개변수가 올바른 내보내기 필터가 아닙니다. 내보내기(Export)

2100 필드 이름이 중복되었습니다. 보고서 필드 컬렉션에 동일한

필드 이름을 가진 멤버가 이미 존재합니다.

ActiveReport.Fields

Page 189: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 182 - 사용자 매뉴얼

2101 보고서가 이미 처리를 시작하였습니다. 필드를 변경시킬 수

없습니다.

ActiveReport.Fields

2102 보고서의 섹션 컬렉션이 수정되었고 섹션의 타입이 올바르지

않습니다. 섹션의 순서가 올바른지와 각 헤더 섹션이 대응되

는 풋터 섹션을 가지고 있는지를 확인하십시오.

ActiveReport

2103 ActiveReport.Load 가 실패하였습니다. MSXML 3.0이 설치

되지 않았거나 XML DOMDocument 객체 생성에 실패하였

습니다.

ActiveReport

2104 ActiveReport.Load 가 실패하였습니다. MSXML에 의한 알

수없는 오류가 발생하였습니다.

ActiveReport

2105 ActiveReport.Load 가 실패하였습니다. XML 데이터가 올바

르지 않거나(계층 노드가 틀림) 잘못되어 있습니다.

ActiveReport

2106 XMLControl.Load 가 실패하였습니다. FileURL 속성값이 비

어있어 오류가 발생하였습니다.

XML 컨트롤

2107 Field.Text 속성값에 잘못된 수식이 포함되어 있습니다. 스크

립트에서 파싱 오류가 발생하였습니다.

필드(Field)

2108 보고서 생성과정에서 필드 스크립트 수식 오류가 발생. 필드

2109 RDF 파일을 로딩할 수 없습니다. 패스워드가 틀립니다.

Page.Load 메쏘드를 호출하기전에 패스워드 속성값을 설정

하십시오.

페이지(Pages)

2110 GetPagesInRange 매개변수가 틀립니다. 페이지 범위가 올

바르지 않습니다.

페이지

2111 페이지 컬렉션을 수정할 수 없습니다. 이 페이지 컬렉션은

GetPagesInRange 메쏘드를 사용하여 얻어졌고 읽기 속성

만 지원합니다.

페이지

2112 PrintPage가 올바르지 않은 Left, Top, Width, Height 매개

변수를 가진 상태로 호출되었습니다.

프린터

Page 190: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 183 - 사용자 매뉴얼

2113 섹션 타입이 올바르지 않아 속성 액세스에 실패하였습니다.

예: 디테일 섹션은 GrpKeepTogether 속성을 지원하지 않습

니다.

섹션

2114 ADO 컨트롤 속성값이 올바르지 않아 메쏘드 호출에 실패하

였습니다. 연결 문자열이 올바른지 확인하십시오.

ADO 컨트롤

2115 XML 데이터 컨트롤은 올바른 XMLDOMNodeList 객체를 요

구합니다.

XML 컨트롤

2116 비어있는 페이지 컬렉션 때문에 메쏘드 호출이 실패하였습니

다.

페이지, 내보내기 필

2117 페이지 헤더나 페이지 풋터와 같은 섹션에서 지원되지 않는

PrintAtBottom을 지정하였음.

섹션

2120 잘못된 인덱스가 매개변수 컬렉션에 대한 지정을 가짐. 매배견수

5000 데이터소스내에서의 오류 혹은 심각한 오류로 인한 보고서

처리 실패. 오류 메시지를 참조하십시오.

ActiveReport

5003 잘못된 매개변수 값입니다. 모든 객체

5004 메쏘드 호출에 실패하였습니다. 파일을 생성할 수 없습니다.

파일이름이 잘못되었거나 대상 파일이 이미 존재 혹은 읽기

속성만을 갖고 있습니다. 오류 메시지를 참조하십시오.

캔바스, 페이지

5005 메쏘드 호출에 실패하였습니다. 파일을 읽을 수 없습니다.

파일이 이미 존재하는지와 파일 접근 권한이 충분한지를 확

인하시기 바랍니다.

캔바스, 페이지

5006 RDF 파일 혹은 캔바스 바이너리 파일이 잘못되었거나 파일

포맷이 틀립니다.

캔바스, 페이지

5007 프린터가 설치되어 있지 않습니다. 보고서를 실행시킬 수 없

습니다. 프린터를 설치하시거나 가상의 프린터를 사용하기

위해 Printer.DeviceName 속성에 NULL값을 설정하여 프린

터를 설정하십시오.

ActiveReport

Page 191: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 184 - 사용자 매뉴얼

5008 이미 보고서 처리가 시작되었습니다. 지금 섹션 컬렉션을 수

정할 수 없습니다.

섹션

5009 아직 프린터 작업이 시작되지 않아 Printer.hDC 속성값을 반

환할 수 없습니다.

프린터

5010 Printer.Escape 메쏘드가 실패하였습니다. 프린터 드라이버

가 이스케이프 기능을 지원하지 않거나 매개변수를 거부하였

습니다.

프린터

5011 값이 범위를 벗어났습니다. 모든 객체

5012 프린터 타임아웃. 발생할 수 있는 원인: 네트워크 프린터가

연결되어 있지 않을 때

프린터

5013 DataPath 속성값이 잘못되었습니다. URL이 존재하지 않거

나 접근 실패.

ARViewer

5014 Printer.Port 설정하는 동안 프린터의 드라이버에 오류 발생. 프린터

5015 프린터 포트 이름이 잘못되었거나 존재하지 않음. 프린터

5016 보고서 처리중 서브리포트 처리에 실패하였습니다. 오류 메

시지 참조.

ActiveReport

5017 Section.Add 메쏘드내에 제공한 인덱스가 잘못되었습니다. 섹션

5704 ADO 연결을 할 수 없습니다. ADO 연결문자열을 확인하십시

오.

ADO 컨트롤

5706 섹션을 제거할 수 없습니다. 섹션 이름이 틀립니다. 섹션

5707 Printer.DeviceName을 설정할 수 없습니다. 장치가 존재하

지 않습니다.

프린터

7000 잘못된 객체 때문에 ReportSource 설정에 실패하였습니다.

올바른 ActiveReport객체를 동일한 프로세스에서 넘겨주십

시오.

ARViewer

7001 ReportSource의 응답에 실패하였습니다. ARViewer

7002 ReportSource.GetReport가 잘못된 객체 타입을 반환. ARViewer

Page 192: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 185 - 사용자 매뉴얼

VBScripts

Visual Basic 계열 프로그래밍 언어의 최신 구성요소인 Microsoft Visual Basic Scripting Edition은

Microsoft Internet Explorer용 웹 클라이언트 스크립트와 Microsoft Internet Information

Server용 웹 서버 스크립트를 포함하여 다양한 환경에 맞는 실제적인 스크립트를 제공합니다.

쉬운 학습과 사용

Visual Basic이나 Visual Basic for Applications을 이미 알고 있으면 VBScript도 매우 친숙하게

접근할 수 있습니다. Visual Basic을 모르지만 일단 VBScript를 배우면 모든 Visual Basic 계열

언어로 프로그램할 수 있습니다. 이와 관련하여 제공되는 몇몇의 웹 페이지로 VBScript를 배울 수는

있지만 프로그램하는 방법은 알려주지 않습니다. 프로그램을 시작하려면 Microsoft Press에서

제공하는 Step by Step을 참조하십시오.

ActiveX Scripting

VBScript는 ActiveX™ Scripting을 사용하여 대화식으로 응용 프로그램을 실행시킵니다. ActiveX

Scripting을 사용할 경우 브라우저와 다른 호스트 응용 프로그램에서는 각 스크립트 구성 요소에

대한 특별한 통합 코드가 필요하지 않습니다. ActiveX Scripting을 통해 호스트에서 스크립트를

컴파일하거나, 입력점을 가져와서 호출하거나, 개발자가 사용할 수 있는 이름 공간(namespace)을

관리할 수 있습니다. 언어 공급 업자는 ActiveX Scripting으로 스크립트용 표준 언어 런타임을 만들

수 있습니다. Microsoft는 VBScript에서는 VBScript에 런타임 지원 기능을 제공할 것이며, 여러

인터넷 그룹과의 협력으로 ActiveX Scripting 표준을 정의하여 스크립트 엔진이 서로 호환될 수

있도록 노력하고 있습니다. ActiveX Scripting은 Microsoft(R) Internet Explorer와 Microsoft(R)

Internet Information Server에서 사용되고 있습니다.

다른 응용 프로그램과 브라우저에서의 VBScript 사용

개발자는 VBScript 원본 구현의 사용권을 무료로 얻어 자신의 제품에 사용할 수 있습니다.

Microsoft에서는 32비트용 Windows® API, 16비트용 Windows API 및 Macintosh® 를 위한

VBScript 이진 구현을 제공합니다. VBScript는 WWW 브라우저와 통합됩니다. VBScript와 ActiveX

Page 193: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 186 - 사용자 매뉴얼

Scripting은 다른 응용 프로그램의 범용 스크립트 언어로 사용할 수 있습니다.

HTML 페이지에 VBScript 코드 추가

SCRIPT 요소를 사용하여 VBScript 코드를 HTML 페이지에 추가합니다.

<SCRIPT> 태그

VBScript 코드는 <SCRIPT> 태그 쌍 안에 작성됩니다. 예를 들어, 전달 날짜를 검사하는

프로시저는 아래와 같이 나타날 수도 있습니다.

<SCRIPT LANGUAGE="VBScript">

<!--

Function CanDeliver(Dt)

CanDeliver = (CDate(Dt) - Now()) > 2

End Function

-->

</SCRIPT>

<SCRIPT>의 시작 태그와 끝 태그로 코드를 묶습니다. LANGUAGE 속성은 스크립트 언어를

나타냅니다. 브라우저에 따라 다른 스크립트 언어를 사용할 수 있으므로 해당 언어를 반드시

지정해야 합니다. CanDeliver 함수가 <!--와 -->로 이루어지는 주석 태그 안에 들어있음에

주의하십시오. 이러한 주석 태그를 사용하면 <SCRIPT> 태그를 인식하지 않는 브라우저에서 그

코드를 표시하지 않도록 합니다.

아래 용례는 특정 폼 컨트롤에 결합되지 않은 일반 함수이므로 해당 페이지의 HEAD 구역에

포함시킬 수 있습니다.

<HTML>

<HEAD>

<TITLE>주문</TITLE>

<SCRIPT LANGUAGE="VBScript">

<!--

Function CanDeliver(Dt)

Page 194: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 187 - 사용자 매뉴얼

CanDeliver = (CDate(Dt) - Now()) > 2

End Function

-->

</SCRIPT>

</HEAD>

<BODY>

...

SCRIPT 블록은 HTML 페이지의 아무 위치에서 사용할 수 있으며, BODY 구역과 HEAD 구역에 모두

넣을 수 있습니다. 그러나 범용 스크립트 코드를 모두 HEAD 구역에 놓아 두고서 모든 코드를

통합적으로 유지할 수도 있습니다. 즉, HEAD 구역에 코드를 놓아 두면 BODY 구역 안에서 호출하여

요구하기 전에 모든 코드를 읽어 디코딩합니다.

이 규칙의 주목할 만한 예외는 인라인 스크립트 코드를 폼 안에 제공하여 폼에 있는 개체의 이벤트에

응답하도록 하는 것입니다. 예를 들어, 아래와 같이 폼의 단추 클릭에 응답할 스크립트 코드를 폼

안에 포함시킬 수 있습니다.

<HTML>

<HEAD>

<TITLE>단추 이벤트 테스트</TITLE>

</HEAD>

<BODY>

<FORM NAME="Form1">

<INPUT TYPE="Button" NAME="Button1" VALUE="클릭">

<SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript">

MsgBox "단추를 클릭하였습니다!" </SCRIPT>

</FORM>

</BODY>

</HTML>

대부분의 코드의 Sub 또는 Function 프로시저에 나타나며, 작성한 코드는 그 프로시저를 실행하도록

할 때 호출됩니다. 그러나 VBScript 코드를 프로시저 밖에 작성할 수 있지만 SCRIPT 블록 안에

Page 195: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 188 - 사용자 매뉴얼

있어야 합니다. 이 코드는 HTML 페이지를 로드할 때 한번만 실행됩니다. 이는 웹 페이지를 로드할

때 데이터를 초기화하거나 웹 페이지의 모양을 동적으로 바꿀 수 있도록 합니다.

VBScript 데이터 형식

VBScript의 데이터 형식이란?

VBScript에는 Variant라는 데이터 형식만이 있습니다. Variant는 특수한 데이터 형식으로 사용

방법에 따라 다른 종류의 정보를 가질 수 있습니다. Variant는 VBScript의 유일한 데이터 형식이므로

VBScript의 모든 함수에서 반환하는 데이터 형식이 됩니다.

아주 간단히 설명하면, Variant에는 숫자나 문자열 정보가 있습니다. Variant는 숫자 문맥에서 사용할

경우 숫자로, 문자열 문맥에서 사용할 경우 문자열로 작용합니다. 즉, 숫자처럼 보이는 데이터로

작업하면 VBScript는 Variant를 숫자로 취급하여 그 숫자에 가장 적절한 동작을 수행합니다. 이와

비슷하게 문자열 데이터일 뿐인 데이터로 작업하면, VBScript는 Variant를 문자열 데이터로

취급합니다. 또한 언제든지 숫자를 인용 부호(" ")로 묶어 문자열로 작용하도록 만들 수 있습니다.

Variant 하위 형식

Variant는 단순한 숫자나 문자열 구분 외에도 숫자 정보의 특정 유형을 더 자세히 분류할 수

있습니다. 예를 들어, 날짜 또는 시간을 나타내는 숫자 정보가 있을 수 있습니다. 다른 날짜 또는

시간 데이터와 함께 사용할 경우 그 결과는 언제나 어떤 날짜 또는 시간으로 나타납니다. 또한 부울

값에서 매우 큰 부동 소수점 숫자까지에 이르는 매우 다양한 숫자 정보도 있습니다. Variant에

포함될 수 있는 정보의 다양한 유형을 하위 형식이라고 합니다. 대개는 원하는 데이터를 Variant에

넣기만 하면, 해당 Variant는 포함하고 있는 데이터에 가장 적절한 방식으로 작용합니다.

다음 표는 Variant에 포함될 수 있는 데이터의 하위 형식을 보여줍니다.

하위 형식 설명

Empty Variant가 초기화되지 않습니다. 그 값은 숫자 변수의 경우 0, 문자열 변수의

경우 길이가 0인 문자열("")입니다.

Page 196: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 189 - 사용자 매뉴얼

Null Variant는 의도적으로 유효한 데이터를 포함하지 않습니다.

Boolean True 또는 False를 포함합니다.

Byte 0에서 255까지의 정수를 포함합니다.

Integer -32,768에서 32,767까지의 정수를 포함합니다.

Currency -922,337,203,685,477.5808에서 922,337,203,685,477.5807까지를

포함합니다.

Long -2,147,483,648에서 2,147,483,647까지의 정수를 포함합니다.

Single -3.402823E38에서 -1.401298E-45까지의 음수 및 1.401298E-45에서

3.402823E38까지의 양수인 단정밀도 부동 소수점 숫자를 포함합니다.

Double -1.79769313486232E308에서 -4.94065645841247E-324까지의 음수 및

4.94065645841247E-324에서 1.79769313486232E308까지의 양수인

배정밀도 부동 소수점 숫자를 포함합니다.

Date

(Time)

100년 1월 1일에서 9999년 12월 31까지의 날짜를 나타내는 숫자를

포함합니다.

String 길이가 약 20억 문자까지에 이르는 가변 길이 문자열을 포함합니다.

Object 개체를 포함합니다.

Error 오류 번호를 포함합니다.

변환 함수를 사용하면 한 하위 형식에서 다른 하위 형식으로 데이터를 변환할 수 있습니다. 또한

VarType 함수는 데이터를 Variant에 저장하는 방법에 관한 정보를 반환합니다.

Page 197: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 190 - 사용자 매뉴얼

VBScript 변수

변수란?

변수는 스크립트가 실행되는 동안 바뀌는 프로그램 정보를 저장할 수 있는 컴퓨터 메모리 위치를

참조하는 편리한 자리 표시자입니다. 예를 들어, ClickCount라는 변수를 만들어 사용자가 특정 웹

페이지의 개체를 클릭한 횟수를 저장할 수도 있습니다. 변수가 컴퓨터 메모리에 저장되는 위치는

중요하지 않습니다. 그러나 사용자가 변수의 값을 알아 보거나 바꾸기 위해 변수를 이름만으로만

참조해야 한다는 것이 중요합니다. VBScript에서 변수는 언제나 유일한 기본 데이터 형식인

Variant로 작성됩니다.

변수 선언

스크립트에서는 Dim문, Public문 및 Private문을 사용하여 변수를 명시적으로 선언합니다. 사용 예는

아래와 같습니다.

Dim DegreesFahrenheit

각 변수 이름을 쉼표로 구분하여 여러 개의 변수를 선언합니다. 사용 예는 아래와 같습니다.

Dim Top, Bottom, Left, Right

스크립트 안에서 그냥 변수 이름만을 사용하여 변수를 암시적으로 선언할 수 있습니다. 그러나

스크립트의 여러 곳에서 변수 이름을 잘못 입력하여 스크립트를 실행할 때 예기치 않은 오류를

일으킬 수 있으므로 이런 방법은 좋지 않습니다. 이런 이유로 모든 변수를 명시적으로 선언해야 할

경우 Option Explicit문을 사용할 수 있습니다. Option Explicit문은 스크립트의 첫째 명령문이어야

합니다.

변수 명명 규칙

변수 이름은 아래와 같이 VBScript 일반 명명 규칙을 따릅니다.

l 알파벳 문자로 시작해야 합니다.

l 마침표(.)를 포함할 수 없습니다.

l 255자를 초과할 수 없습니다.

l 선언된 범위 안에서는 유일해야 합니다.

Page 198: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 191 - 사용자 매뉴얼

변수의 범위와 수명

선언된 위치에 따라 변수의 범위가 결정됩니다. 프로시저 안에서 변수를 선언하면 해당 프로시저에

있는 코드만이 그 변수의 값을 액세스하고 바꿀 수 있습니다. 이 변수는 지역 범위를 가지며

프로시저 수준 변수라고 합니다. 그러나 프로시저 밖에서 변수를 선언하면 그 변수는 스크립트의

모든 프로시저에서 인식됩니다. 이 변수는 스크립트 수준 변수가 되며, 스크립트 수준의 범위를

가집니다.

변수가 존재하는 기간을 그 변수의 수명이라고 합니다. 스크립트 수준 변수의 수명은 변수가 선언된

시점에서 스크립트 실행이 완료된 시점까지입니다. 그러나 프로시저 수준 변수는 프로시저 안에 있는

동안에만 존재하고 그 프로시저를 마치면 없어집니다. 지역 변수는 프로시저를 실행하는 동안에는

이상적인 임시 저장 공간이 됩니다. 지역 변수는 각각 선언된 프로시저 안에서만 인식되므로 여러

개의 다른 프로시저에서 같은 이름의 지역 변수를 사용할 수 있습니다.

변수의 값 할당

아래와 같이 식을 만들어 값을 변수에 할당합니다. 변수는 식의 왼쪽에, 변수에 할당할 값은 식의

오른쪽에 나옵니다.

B = 200

스칼라 변수와 배열 변수

대개의 경우 선언한 변수 하나에 하나의 값을 할당합니다. 하나의 값을 가지는 변수는 스칼라

변수입니다. 그러나 어떤 경우에는 연관된 둘 이상의 값을 변수 하나에 할당하는 것이 편리합니다.

그런 경우 일련의 값들을 가지는 변수를 만들 수 있습니다. 이를 배열 변수라고 합니다. 배열 변수와

스칼라 변수는 동일한 방법으로 선언되지만, 배열 변수는 변수 이름 뒤에 괄호( )를 붙여 선언합니다.

아래 용례에서는 11개 요소를 포함하는 1차원 배열을 선언하고 있습니다.

Dim A(10)

괄호 안의 숫자는 10이지만, VBScript의 모든 배열은 0을 기준으로 하므로 실제로 11개 요소를

가지게 됩니다. 0 기준 배열에서 배열 요소의 개수는 언제나 괄호 속의 숫자에 하나를 더한

숫자입니다. 이런 종류의 배열을 고정 크기 배열이라고 합니다.

배열에 색인을 사용하여 데이터를 배열의 각 요소에 할당할 수 있습니다. 아래 용례에서는 0에서

Page 199: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 192 - 사용자 매뉴얼

10까지의 색인을 사용한 각 배열 요소에 데이터를 할당합니다.

A(0) = 256

A(1) = 324

A(2) = 100

. . .

A(10) = 55

이와 비슷하게 원하는 특정 배열 요소에 색인을 사용하여 요소를 검색할 수 있습니다. 사용 예는

아래와 같습니다.

. . .

SomeVariable = A(8)

. . .

배열은 1차원으로 한정되지 않습니다. 대부분의 사람들은 3차원이나 4차원 이상의 차원을 이해하기

어렵지만 60개까지의 차원을 지정할 수 있습니다. 다중 차원은 괄호 안에서 배열 크기의 수를 쉼표로

구분하여 선언됩니다. 아래 용례에서 MyTable 변수는 6개의 행과 11개의 열을 가지는 배열

변수입니다.

Dim MyTable(5, 10)

2차원 배열에서 첫째 숫자는 항상 행의 개수이며, 둘째 번호는 열의 개수입니다.

또한 스크립트가 실행되는 동안 크기가 변하는 배열도 선언할 수 있으며, 이를 동적 배열이라고

합니다. 동적 배열은 Dim문이나 ReDim문을 사용하여 프로시저의 맨 앞에 선언됩니다. 그러나 동적

배열에서는 차원의 크기나 개수를 괄호 안에 두지 않습니다. 사용 예는 아래와 같습니다.

Dim MyArray()

ReDim AnotherArray()

동적 배열을 사용하려면 앞에 나온 Redim문에 뒤이어 나오는 ReDim문을 사용하여 차원의 개수와

Page 200: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 193 - 사용자 매뉴얼

각 차원의 크기를 결정해야 합니다. 아래 용례에서 앞의 ReDim문은 동적 배열의 처음 크기를 25로

지정합니다. 뒤이어 나오는 ReDim문은 배열 크기를 30으로 바꾸는 한편 Preserve 키워드에 의해

크기를 바꾸면서 그 배열의 내용도 보존합니다.

ReDim MyArray(25)

. . .

ReDim Preserve MyArray(30)

횟수에 상관없이 동적 배열의 크기를 바꿀 수 있지만, 이전의 배열 크기보다 작게 만들면 제거되는

요소의 데이터를 잃게 됩니다.

VBScript 상수

상수란?

상수는 숫자나 문자열을 대신하여 사용되는 의미있는 이름이며 결코 변하지 않습니다.

VBScript에서는 여러 가지의 내부 상수를 정의하고 있습니다. VBScript 언어 참조에서 내부 상수에

관한 정보를 얻을 수 있습니다.

상수 만들기

VBScript에서는 Const문을 사용하여 사용자 정의 상수를 만듭니다. Const문을 사용하면 의미있는

이름을 가진 숫자 상수나 문자열 상수를 만들어 리터럴 값을 할당할 수 있습니다. 사용 예는 아래와

같습니다.

Const MyString = "문자열입니다."

Const MyAge = 49

문자열 리터럴은 인용 부호(" ")로 묶어야 합니다. 인용 부호에 의해 문자열 값과 숫자 값을 명확하게

구별합니다. 날짜 리터럴과 시간 리터럴은 번호 기호(#)로 묶어서 나타냅니다. 사용 예는 아래와

같습니다.

Const CutoffDate = #6-1-97#

Page 201: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 194 - 사용자 매뉴얼

상수 명명 규칙을 도입하여 상수와 변수를 구별할 수도 있습니다. 이는 스크립트가 실행되는 동안

상수 값을 다시 할당하지 않도록 합니다. 예를 들어, 상수 이름에 "vb" 또는 "con" 접두사를

사용하거나 상수 이름을 모두 대문자로 만들 수도 있습니다. 상수와 변수를 구별하면 더욱 복잡한

스크립트를 개발할 때의 혼란을 방지할 수 있습니다.

VBScript 연산자

VBScript에는 산술 연산자, 비교 연산자, 연결 연산자 및 논리 연산자를 포함하는 전 범위의

연산자가 있습니다.

연산자 우선 순위

한 식에서 여러 개의 연산을 수행할 경우 연산자 우선 순위라고 하는 미리 정해진 순서에 따라 식의

각 부분을 해석하여 분해합니다. 괄호를 사용하면 연산에 대한 우선 순위를 바꾸거나 다른 부분을

계산하기 전에 식의 한 부분을 먼저 계산할 수 있습니다. 괄호 안의 연산은 언제나 괄호 밖의

연산보다 먼저 수행되지만, 괄호 안에서는 일반적인 연산자 우선 순위를 따릅니다.

둘 이상의 유형에 속하는 연산자를 가진 식에서는 산술 연산자, 비교 연산자, 논리 연산자 순으로

계산합니다. 모든 비교 연산자는 동등한 우선 순위, 즉 비교 연산자의 위치에 따라 왼쪽에서

오른쪽으로 계산됩니다. 산술 연산자와 논리 연산자의 우선 순위는 아래와 같습니다.

산술 연산자 비교 연산자 논리 연산자

설명 기호 설명 기호 설명 기호

지수 ^ 같다 = 논리적 부정 Not

단항 부정 - 같지 않다 <> 논리적 결합 And

곱셈 * 보다 작다 < 논리적 분리 Or

나눗셈 / 보다 크다 > 논리적 배타 Xor

정수 나눗셈 \ 보다 작거나 같다 <= 논리적 동등성 Eqv

Page 202: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 195 - 사용자 매뉴얼

나머지 연산 Mod 보다 크거나 같다 >= 논리적 함축성 Imp

덧셈 + 개체 동등성 Is

뺄셈 -

문자열 연결 &

한 식에서 곱셈과 나눗셈을 모두 수행할 경우 그 위치에 따라 왼쪽에서 오른쪽으로 각 연산을

수행합니다. 또한 한 식에서 덧셈과 뺄셈을 모두 수행할 경우에도 마찬가지입니다.

문자열 연결(&) 연산자는 산술 연산자가 아니지만 그 우선 순위는 모든 산술 연산자 뒤와 모든 비교

연산자 앞에 나옵니다. Is 연산자는 개체 참조 비교 연산자이며, 개체 또는 그 값을 비교하는 것이

아니라 두 개체 참조가 동일한 개체를 참조하는지를 확인하는 데에만 사용됩니다.

조건문 사용

프로그램 실행 제어

조건문과 루프 처리문으로 스크립트의 흐름을 제어할 수 있습니다. 또한 조건문을 사용하면 동작을

결정하여 반복하는 VBScript 코드를 작성할 수도 있습니다. VBScript에서는 아래 조건문을 사용할

수 있습니다.

l If...Then...Else문

l Select Case문

l If...Then...Else문에 의한 결정

If...Then...Else문은 조건문이 True 또는 False인지를 평가하고 그 결과에 따라 둘 이상의 명령문을

실행합니다. 대개 조건문은 비교 연산자를 사용하여 값이나 변수를 서로 비교하는 식입니다. 비교

연산자에 관한 정보는 비교 연산자를 참조하십시오. If...Then...Else문은 필요한 만큼 중첩할 수

있습니다.

Page 203: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 196 - 사용자 매뉴얼

조건문이 True인 경우 명령문 실행

조건문이 True일 때 하나의 명령문만 실행하려면 If...Then...Else문의 단일 줄 구문을 사용합니다.

아래 용례에서는 단일 줄 구문을 보여주지만 Else 키워드를 생략하고 있음에 유의하십시오.

Sub FixDate()

Dim myDate

myDate = #2/13/95#

If myDate < Now Then myDate = Now

End Sub

두 줄 이상의 코드를 실행하려면 여러 줄(또는 블록) 구문을 사용해야 합니다. 이 구문은 아래

용례에서처럼 End If문을 포함합니다.

Sub AlertUser(value)

If value = 0 Then

AlertLabel.ForeColor = vbRed

AlertLabel.Font.Bold = True

AlertLabel.Font.Italic = True

End If

End Sub

조건문이 True인 경우와 False인 경우에 서로 다른 명령문 실행

If...Then...Else문을 사용하면 실행할 수 있는 2개의 블록문을 정의할 수 있습니다. 즉 조건문이

True일 때 한 블록문을, False일 때 다른 블록문을 실행합니다.

Sub AlertUser(value)

If value = 0 Then

AlertLabel.ForeColor = vbRed

AlertLabel.Font.Bold = True

AlertLabel.Font.Italic = True

Page 204: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 197 - 사용자 매뉴얼

Else

AlertLabel.Forecolor = vbBlack

AlertLabel.Font.Bold = False

AlertLabel.Font.Italic = False

End If

End Sub

여러 대안 중에서 결정

If...Then...Else문을 변형하면 여러 대안 중에서 선택할 수 있습니다. ElseIf절을 추가하면

If...Then...Else문의 기능을 확장하여 여러 가지 다른 가능성(확률)을 기준으로 프로그램 흐름을

제어할 수 있습니다. 사용 예는 아래와 같습니다.

Sub ReportValue(value)

If value = 0 Then

MsgBox value

ElseIf value = 1 Then

MsgBox value

ElseIf value = 2 then

Msgbox value

Else

Msgbox "허용 범위를 벗어난 값입니다!"

End If

End Sub

선택적인 대안을 제공할 필요가 있는 만큼 ElseIf절을 추가할 수 있습니다. ElseIf절을 너무 많이

사용하면 가끔 작업이 번거로워집니다. 여러 대안에서 선택할 경우에는 Select Case문을 사용하는

것이 가장 좋습니다.

Page 205: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 198 - 사용자 매뉴얼

Select Case문에 의한 결정

Select Case 구조는 여러 블록문에서 선택적으로 하나를 실행하는 If...Then...ElseIf문에 대한

대안을 제공합니다. Select Case문은 If...Then...Else문과 비슷한 기능을 제공하지만, 더 효율적이고

읽기 쉬운 코드를 작성합니다.

Select Case 구조는 해당 구조의 맨 앞에서 한 번만 평가되는 테스트 식 하나로 작동합니다. 그런

다음 그 식의 결과 값과 구조에 있는 각 Case의 값을 비교합니다. 서로 일치하면 해당 Case와

연관된 블록문을 실행합니다.

Select Case Document.Form1.CardType.Options(SelectedIndex).Text

Case "MasterCard"

DisplayMCLogo

ValidateMCAccount

Case "Visa"

DisplayVisaLogo

ValidateVisaAccount

Case "American Express"

DisplayAMEXCOLogo

ValidateAMEXCOAccount

Case Else

DisplayUnknownImage

PromptAgain

End Select

Select Case 구조는 구조의 맨 앞에 있는 식을 한 번만 평가하지만, If...Then...ElseIf 구조는 각

ElseIf문에 대한 서로 다른 식을 평가합니다. 각각의 ElseIf문이 동일한 식을 평가할 경우에만

If...Then...ElseIf 구조를 Select Case 구조로 대체할 수 있습니다.

Page 206: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 199 - 사용자 매뉴얼

코드에 의한 루프 처리

루프를 사용한 코드 반복 실행

루프를 사용하면 일단의 명령문들을 반복하여 실행할 수 있습니다. 루프에 따라서 조건문이 False가

될 때까지 또는 True가 될 때까지 명령문을 반복하여 실행합니다. 또 명령문을 특정 횟수만큼

반복하여 실행하는 루프도 있습니다.

VBScript에서 사용할 수 있는 루프문은 아래와 같습니다.

l Do...Loop: 조건문이 True가 될 때까지 또는 True인 동안 반복 실행합니다.

l While...Wend: 조건문이 True인 동안 반복 실행합니다.

l For...Next: 카운터를 사용하여 지정한 횟수만큼 명령문을 반복 실행합니다.

l For Each...Next: 컬렉션의 각 항목이나 배열의 각 요소에 따라서 일단의 명령문을 반복

실행합니다.

Do Loop문 사용

Do...Loop문을 사용하면 한 블록의 명령문을 무한하게 실행할 수 있습니다. 조건문이 True인 동안

또는 True가 될 때까지 명령문을 반복합니다.

조건문이 True인 동안 명령문을 반복 실행

While 키워드를 사용하여 Do...Loop문의 조건을 검사합니다. 아래 ChkFirstWhile 용례처럼 루프로

들어 가기 전에 또는 ChkLastWhile 용례처럼 루프를 적어도 한 번 실행한 후에 조건을 검사할 수

있습니다. ChkFirstWhile 프로시저에서는 myNum을 20 대신에 9로 지정하면 루프 안에 있는

명령문은 결코 실행되지 않지만, ChkLastWhile 프로시저에서는 해당 조건이 이미 False이므로 루프

안에 있는 명령문이 한 번만 실행됩니다.

Sub ChkFirstWhile()

Dim counter, myNum

counter = 0

myNum = 20

Do While myNum > 10

Page 207: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 200 - 사용자 매뉴얼

myNum = myNum - 1

counter = counter + 1

Loop

MsgBox "루프를 " & counter & "번 반복하였습니다."

End Sub

Sub ChkLastWhile()

Dim counter, myNum

counter = 0

myNum = 9

Do

myNum = myNum - 1

counter = counter + 1

Loop While myNum > 10

MsgBox "루프를 " & counter & "번 반복하였습니다."

End Sub

조건이 True가 될 때까지 명령문을 반복 실행

두 가지 방식으로 Until 키워드를 사용하여 Do...Loop문의 조건을 검사합니다. 아래 ChkFirstUntil

용례처럼 루프로 들어 가기 전에 또는 ChkLastUntil 용례처럼 루프를 적어도 한 번 실행한 다음

조건을 검사할 수 있습니다. 조건이 False인 동안 반복 실행됩니다.

Sub ChkFirstUntil()

Dim counter, myNum

counter = 0

myNum = 20

Do Until myNum = 10

myNum = myNum - 1

counter = counter + 1

Page 208: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 201 - 사용자 매뉴얼

Loop

MsgBox "루프를 " & counter & "번 반복하였습니다."

End Sub

Sub ChkLastUntil()

Dim counter, myNum

counter = 0

myNum = 1

Do

myNum = myNum + 1

counter = counter + 1

Loop Until myNum = 10

MsgBox "루프를 " & counter & "번 반복하였습니다."

End Sub

루프 안에서 Do...Loop문 끝내기

Exit Do문을 사용하여 Do...Loop문을 빠져 나갈 수 있습니다. 무한 루프를 피하는 것처럼 대개 어떤

상황에서만 빠져 나가려고 하므로 Exit Do문은 If...Then...Else문의 True 블록문에서 사용해야

합니다. 조건문이 False인 동안에는 루프를 변함없이 실행합니다.

아래 용례에서 myNum은 무한 루프를 만드는 값으로 지정되었습니다. If...Then...Else문은 이

조건을 검사하여 무한하게 반복하여 실행하지 않도록 합니다.

Sub ExitExample()

Dim counter, myNum

counter = 0

myNum = 9

Do Until myNum = 10

myNum = myNum - 1

Page 209: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 202 - 사용자 매뉴얼

counter = counter + 1

If myNum < 10 Then Exit Do

Loop

MsgBox "루프는 " & counter & "번 반복하였습니다."

End Sub

While...Wend문 사용

VBScript에서는 그 사용에 익숙한 사용자를 위해 While...Wend문을 제공하고 있습니다. 그러나

While...Wend문은 유연성이 부족하므로 그 대신 Do...Loop문을 사용하는 것이 좋습니다.

For...Next문 사용

For...Next문을 사용하면 특정 횟수만큼 한 블록의 명령문을 실행할 수 있습니다. For 루프는 루프를

반복할 때마다 그 값이 증감하는 카운터 변수를 사용합니다.

예를 들어, 아래 프로시저는 MyProc 프로시저를 50회 반복하도록 합니다. For문에서 카운터 변수

x와 그 시작과 끝 값을 지정합니다. Next문에서는 카운터 변수의 값을 하나씩 증가시킵니다.

Sub DoMyProc50Times()

Dim x

For x = 1 To 50

MyProc

Next

End Sub

Step 키워드를 사용하면 카운터 변수 값을 지정한 값만큼씩 증감시킬 수 있습니다. 아래 용례에서

루프를 한 번씩 반복할 때마다 카운터 변수 j는 2만큼씩 증가합니다. 루프를 마쳤을 때 total의 값은

2, 4, 6, 8, 10의 합이 됩니다.

Sub TwosTotal()

Dim j, total

For j = 2 To 10 Step 2

Page 210: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 203 - 사용자 매뉴얼

total = total + j

Next

MsgBox "총 " & total & "입니다."

End Sub

카운터 변수의 값을 감소시키려면 음수인 Step 값을 사용합니다. 끝 값을 시작 값보다 작게 지정해야

합니다. 아래 용례에서 루프를 한 번씩 반복할 때마다 카운터 변수 myNum은 2만큼씩 감소합니다.

루프를 마쳤을 때 total의 값은 16, 14, 12, 10, 8, 6, 4 , 2의 합이 됩니다.

Sub NewTotal()

Dim myNum, total

For myNum = 16 To 2 Step -2

total = total + myNum

Next

MsgBox "총 " & total & "입니다."

End Sub

Exit For문을 사용하면 카운터 변수가 끝 값에 도달하기 전에 For...Next문을 빠져 나갈 수 있습니다.

대개 오류가 발생하는 것처럼 어떤 특정 상황에서 루프를 빠져 나가려고 하므로 Exit For문은

If...Then...Else문의 True 블록문에서 사용해야 합니다. 조건문이 False인 동안에는 루프를 변함없이

실행합니다.

For Each...Next문 사용

For Each...Next 루프는 For...Next 루프와 비슷합니다. 지정한 횟수만큼 명령문을 반복 실행하는

대신 For Each...Next 루프는 컬렉션의 각 항목이나 배열의 각 요소에 따라서 명령문을 반복하여

실행합니다. 컬렉션의 요소 개수를 알 수 없는 경우에 특히 유용합니다.

아래 HTML 코드 용례에서는 Dictionary 개체의 내용이 여러 개의 입력란의 텍스트를 채우는 데

사용됩니다.

Page 211: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 204 - 사용자 매뉴얼

<HTML>

<HEAD><TITLE>폼과 요소</TITLE></HEAD>

<SCRIPT LANGUAGE="VBScript">

<!--

Sub cmdChange_OnClick

Dim d '변수를 작성합니다.

Set d = CreateObject("Scripting.Dictionary")

d.Add "0", "Athens" '키와 항목을 추가합니다.

d.Add "1", "Belgrade"

d.Add "2", "Cairo"

For Each I in d

Document.frmForm.Elements(I).Value = D.Item(I)

Next

End Sub

-->

</SCRIPT>

<BODY>

<CENTER>

<FORM NAME="frmForm"

<Input Type = "Text"><p>

<Input Type = "Text"><p>

<Input Type = "Text"><p>

<Input Type = "Text"><p>

<Input Type = "Button" NAME="cmdChange" VALUE="여기를 클릭하십시오."><p>

</FORM>

</CENTER>

Page 212: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 205 - 사용자 매뉴얼

</BODY>

</HTML>

VBScript 프로시저

프로시저의 종류

VBScript 프로시저에는 두 종류, 즉 Sub 프로시저와 Function 프로시저가 있습니다.

Sub 프로시저

Sub 프로시저는 Sub문과 End Sub문으로 묶어진 일련의 VBScript 명령문으로 동작을 수행하지만

그 값을 반환하지는 않습니다. Sub 프로시저에서는 호출하는 프로시저가 전달하는 상수, 변수 또는

식으로 된 인수를 사용할 수 있습니다. Sub 프로시저에서 인수가 없으면 해당 Sub문에 빈 괄호()가

있어야 합니다.

아래 Sub 프로시저는 내부(기본적으로 제공되는) VBScript 함수 두 개, 즉 MsgBox와

InputBox를 사용하여 사용자에게 정보를 알려줍니다. 그런 다음 해당 정보에 따른 계산 결과를

표시합니다. VBScript를 사용하여 만든 Function 프로시저에서 계산이 수행됩니다. Function

프로시저에 대해서는 뒤에서 설명됩니다.

Sub ConvertTemp()

temp = InputBox("화씨 온도를 입력하십시오.", 1)

MsgBox "섭씨 " & Celsius(temp) & "도입니다."

End Sub

Function 프로시저

Function 프로시저는 Function문과 End Function문으로 묶어진 일련의 VBScript 명령문입니다.

Function 프로시저는 Sub 프로시저와 비슷하지만 값을 반환하는 점이 다릅니다. Function

프로시저에서는 호출하는 프로시저가 전달하는 상수, 변수 또는 식으로 된 인수를 사용할 수

있습니다. Function 프로시저에서 인수가 없으면 해당 Function문에 빈 괄호가 있어야 합니다.

Page 213: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 206 - 사용자 매뉴얼

Function 문은 해당 프로시저에 있는 하나 이상의 명령문에서 그 이름에 값을 지정하는 방법으로

값을 반환합니다. Function문의 반환 데이터 형식은 언제나 Variant입니다.

아래 용례에서 Celsius 함수는 화씨 온도를 섭씨 온도로 계산합니다. ConvertTemp Sub 프로시저의

함수를 호출하면 인수 값을 가지고 있는 변수를 그 함수에 전달하고, 호출한 프로시저에 계산 결과를

반환하여 메시지 상자에 표시합니다.

Sub ConvertTemp()

temp = InputBox("화씨 온도를 입력하십시오.", 1)

MsgBox "섭씨" & Celsius(temp) & "도입니다."

End Sub

Function Celsius(fDegrees)

Celsius = (fDegrees - 32) * 5 / 9

End Function

프로시저 안팎으로 데이터 전달

각 데이터는 인수를 사용하는 프로시저에 전달됩니다. 인수는 프로시저에 전달할 데이터의 자리

표시자 역할을 합니다. 변수 이름으로 유효한 것이면 모두 인수로 사용할 수 있습니다. Sub문이나

Function문을 사용하여 프로시저를 작성하면 프로시저 이름 뒤에 괄호가 있어야 합니다. 모든 인수는

괄호 안에 쉼표로 구분하여 둡니다. 예를 들어, 아래 용례에서 fDegrees는 온도를 변환하는 Celsius

함수에 전달할 값의 자리 표시자입니다.

Function Celsius(fDegrees)

Celsius = (fDegrees - 32) * 5 / 9

End Function

데이터를 프로시저 밖으로 가져오려면 Function문을 사용해야 합니다. Function 프로시저는 값을

반환할 수 있지만 Sub 프로시저는 값을 반환할 수 없습니다.

코드에서의 Sub 프로시저와 Function 프로시저 사용

코드에 있는 Function 프로시저는 언제나 변수 지정이나 식의 오른쪽에 사용해야 합니다. 사용 예는

Page 214: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 207 - 사용자 매뉴얼

아래와 같습니다.

Temp = Celsius(fDegrees)

또는

MsgBox "섭씨 " & Celsius(fDegrees) & "도입니다."

다른 프로시저의 Sub 프로시저를 호출하려면 각각 쉼표로 구분된 필요한 인수들의 값과 함께

프로시저 이름만 입력하면 됩니다. Call문은 사용할 필요가 없지만, 이를 사용할 경우 인수를 괄호로

묶어야 합니다.

아래 용례에서는 MyProc 프로시저를 두 번 호출합니다. 한 번은 코드 안의 Call문을 사용하는 대신

다른 한 번은 사용하지 않습니다. 그러나 두 호출 모두 똑같은 작업을 수행합니다.

Call MyProc(firstarg, secondarg)

MyProc firstarg, secondarg

Call문을 사용하지 않을 경우에는 괄호를 생략한다는 점에 유의하십시오.

VBScript 코딩 규칙

코딩 규칙이란?

Microsoft Visual Basic Scripting Edition을 사용하여 코드를 작성하는 데 도움을 주는 제안

사항들입니다. 여기에는 아래 규칙을 포함하고 있습니다.

l 개체, 변수 및 프로시저의 명명 규칙

l 주석 작성 규칙

l 텍스트 서식 및 들여 쓰기 지침

일관성있는 코딩 규칙 집합을 사용하는 주된 이유는 스크립트의 구조와 코딩 양식을 표준화하여 모든

사람들이 코드를 쉽게 읽고 이해할 수 있게 하는 것입니다. 코딩 규칙을 사용하면 정확하고 읽기

쉬우며 애매하지 않은, 즉 다른 언어 규칙과 조화를 이루면서 되도록이면 직관적인 원본 코드를

작성할 수 있습니다.

Page 215: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 208 - 사용자 매뉴얼

상수 명명 규칙

VBScript의 초기 버전에는 사용자 정의 상수를 만들 수 있는 메커니즘이 없습니다. 그래서 상수를

사용할 경우에는 상수를 변수로 구현하고 모두 대문자만 사용하여 다른 변수와 구별했습니다. 또

밑줄(_)을 사용하여 여러 개의 구성 단어들을 구분했습니다. 사용 예는 아래와 같습니다.

USER_LIST_MAX

NEW_LINE

지금도 이 방법을 사용하여 상수를 식별할 수 있지만, 이제는 Const문을 사용하여 진정한 상수를

만들 수 있으므로 명명 규칙을 택일하여 사용할 수 있습니다. 이 규칙에서는 상수 이름 앞에

"con"이라는 접두사를 붙여서 대소문자 혼합 형식을 사용합니다. 사용 예는 아래와 같습니다.

conYourOwnConstant

변수 명명 규칙

읽기 쉽고 일관성있는 변수를 만들려면 VBScript 코드의 설명적인 변수 이름 앞에 아래와 같은

접두사를 사용합니다.

하위 형식 접두사 용례

Boolean bln blnFound

Byte byt bytRasterData

Date(Time) dtm dtmStart

Double dbl dblTolerance

Error err errOrderNum

Integer int intQuantity

Page 216: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 209 - 사용자 매뉴얼

Long lng lngDistance

Object obj objCurrent

Single sng sngAverage

String str strFirstName

변수 범위

변수는 언제나 유효한 가장 작은 범위로 정의해야 합니다. VBScript 변수의 범위는 아래와 같습니다.

범위 변수 선언 위치 가시성

프로시저 수준 Event, Function 또는 Sub

프로시저

변수를 선언한 프로시저 안에서만 볼

수 있습니다.

스크립트 수준 프로시저 밖에 있는 HTML

페이지의 HEAD 구역

스크립트의 모든 프로시저에서 볼 수

있습니다.

변수 범위 접두사

스크립트의 크기가 커지면 변수의 범위를 빨리 구별할 수 있는 값도 커집니다. 형식 접두사 앞에

단일 문자 범위 접두사를 붙이면 변수 이름을 부당하게 늘리지 않고도 이 효과를 얻을 수 있습니다.

범위 접두사 용례

프로시저 수준 없음 dblVelocity

스크립트 수준 s sblnCalcInProgress

Page 217: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 210 - 사용자 매뉴얼

설명적인 변수와 프로시저 이름

변수 이름이나 프로시저 이름의 본체는 대소문자를 섞어서 사용하며, 그 목적을 설명하는 데 필요한

만큼 완전해야 합니다. 또한 프로시저 이름은 InitNameArray 또는 CloseDialogIn처럼 동사로

시작해야 합니다.

자주 사용하거나 긴 용어는 표준 약어를 사용하여 적당한 길이의 이름을 유지하는 것이 좋습니다.

대개 변수 이름이 32자를 넘으면 읽기가 어렵습니다. 약어를 사용할 경우 전체 스크립트에 걸쳐서 그

일관성을 유지해야 합니다. 예를 들어, 스크립트 안이나 Cnt와 Count를 무작정 사용하면 혼란을

초래할 수 있습니다.

개체 명명 규칙

아래 표는 VBScript를 프로그램하는 동안 만날 수 있는 개체에 대해 권장되는 규칙을 보여줍니다.

개체 형식 접두사 용례

3D 패널 pnl pnlGroup

애니메이션 단추 ani aniMailBox

확인란 chk chkReadOnly

콤보 상자, 드롭다운 목록 상자 cbo cboEnglish

명령 단추 cmd cmdExit

일반 대화 상자 dlg dlgFileOpen

프레임 fra fraLanguage

가로 스크롤 막대 hsb hsbVolume

이미지 img imgIcon

레이블 lbl lblHelpMessage

Page 218: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 211 - 사용자 매뉴얼

선 lin linVertical

목록 상자 lst lstPolicyCodes

스핀 spn spnPages

텍스트 상자 txt txtLastName

세로 스크롤 막대 vsb vsbRate

슬라이더 sld sldScale

코드 주석 작성 규칙

모든 프로시저는 수행 작업을 간략히 설명하는 주석으로 시작합니다. 이 설명은 시간이 경과하면서

그 내용이 자주 바뀌어 불필요한 주석 관리 작업이나 더 바람직하지 않은 잘못된 주석을 가져오기

때문에 작업 방법인 구현 관련 세부 사항을 서술하지 않습니다. 코드 자체와 필요한 인라인

주석만으로 그 구현을 설명합니다.

목적이 분명하지 않고 프로시저에서 특정 범위에 놓이는 인수를 요구하면 프로시저에 전달되는

인수를 설명해야 합니다. 특히 참조 인수를 사용하여 프로시저에 의해 바뀐 함수나 변수의 결과 값도

각 프로시저의 시작 부분에서 설명해야 합니다.

프로시저 머리말 주석에는 아래와 같이 구역별 머리글이 필요합니다. 뒤에 나오는 "코드 서식화"

부분을 참조하십시오.

구역 머리글 주석 내용

목적 프로시저 수행 작업(수행 방법이 아님)

가정 그 상태가 해당 프로시저에 영향을 주는 외부 변수, 컨트롤 또는 기타 요소의

목록

결과 외부 변수, 컨트롤 또는 기타 요소에서의 프로시저 결과의 목록

입력 명확하지 않은 개별 인수에 관한 설명. 각 인수는 인라인 주석과 함께 별도의

Page 219: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 212 - 사용자 매뉴얼

줄에 있어야 합니다.

결과 값 반환되는 값에 관한 설명

중요 사항:

중요한 각 변수의 선언문에는 선언되는 변수의 용도를 설명하는 인라인 주석이 있어야 합니다.

복잡한 구현 세부 사항에만 인라인 주석이 필요하도록 변수, 컨트롤 및 프로시저의 이름을 명확하게

지정해야 합니다.

스크립트 시작 부분에 스크립트, 열거 개체, 프로시저, 알고리즘, 대화 상자 및 기타 시스템 종속성을

설명하는 개요를 포함시킵니다. 때로는 알고리즘을 설명하는 의사 코드도 유용할 수 있습니다.

코드 서식화

코드 서식화에서 논리 구조와 중첩을 끊임없이 반영할 수 있도록 되도록이면 화면 공간을 많이

확보해야 합니다. 여기에는 아래와 같이 몇 가지 지침이 있습니다.

표준 중첩 블록은 4칸을 들여 씁니다.

프로시저의 개요 주석은 1칸을 들여 씁니다.

개요 주석 뒤에 나오는 가장 높은 수준의 명령문은 4칸을 들여 쓰고, 중첩되는 각 블록문은 4칸을

추가로 들여 씁니다. 사용 예는 아래와 같습니다.

'*********************************************************

' 목적: UserList 배열에서 지정된 사용자가 맨 처음 나타나는 곳을 찾습니다.

' 입력: strUserList(): 검색되는 사용자 목록입니다.

' strTargetUser: 검색할 사용자 이름입니다.

' 결과: strUserList 배열에서 처음 나타난 strTargetUser에 대한 색인입니다.

' 대상 사용자가 없으면 -1을 반환합니다.

'*********************************************************

Function intFindUser (strUserList(), strTargetUser)

Dim i ' 루프 카운터입니다.

Page 220: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 213 - 사용자 매뉴얼

Dim blnFound ' 플래그를 찾는 대상입니다.

intFindUser = -1

i = 0 ' 루프 카운터를 초기화합니다.

Do While i <= Ubound(strUserList) and Not blnFound

If strUserList(i) = strTargetUser Then

blnFound = True ' 플래그를 True로 지정합니다.

intFindUser = i ' 결과 값을 루프 횟수로 지정합니다.

End If

i = i + 1 ' 루프 카운터를 증가시킵니다.

Loop

End Function

VBScript 예제

고급 VBScript 테크닉을 배우는 가장 빠른 방법은 많은 예제를 살펴보는 것입니다. 또한 개체 모델을

잘 아는 것도 좋은 방법입니다.

VBScript 예제 사이트 :

http://www.microsoft.com/korea/vbscript/samples/vbssamp.htm

Page 221: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 214 - 사용자 매뉴얼

XML이란?

XML(Extensible Markup Language)은 웹에서 데이터를 사용하기 위한 범용 언어입니다. XML 을

통하여 개발자는 매우 다양한 응용 프로그램으로부터 구조화된 데이터를 로컬 컴퓨팅 및

프레젠테이션을 위해 데스크톱으로 전달할 수 있습니다. XML 을 사용하여 특정 응용 프로그램에

대한 독특한 데이터 형식을 만들 수 있습니다. 또한 XML 은 서버 간에 구조화된 데이터의 전송을

위한 이상적인 형식입니다.

MSXML이란?

MSXML 은 핵심 XML 서비스를 제공하는 Microsoft 소프트웨어 구성 요소입니다.

Microsoft XML Parser의 기능은?

Microsoft 의 핵심 XML 서비스의 최근 버전은 다음 네 가지의 뚜렷한 기능을 제공합니다.

l DOM(Document Object Model) 기반 파서 - 텍스트 스트림(파일, 프로그램의 문자열 또

는 XML로 변환할 수 있는 기타 모든 텍스트)을 취하여 이를 체계적으로 조작할 수 있는 탐

색 가능 XML 트리 구조로 변환합니다.

l SAX(XML에 대한 단순 API) 파서 - 대형 문서의 처리 및 높은 처리량 시나리오에 대해 최

적화되어 있습니다. SAX는 문서를 읽고 파싱 이벤트(요소의 시작과 끝과 같은)를 응용 프

로그램에 직접 보고하는 이벤트 기반 파서입니다. 작성한 응용 프로그램은 처리기를 구현하

여 그래픽 사용자 인터페이스(GUI)와 매우 유사하게 서로 다른 이벤트를 처리합니다.

l XSLT 프로세서 - XSLT(Extensible Stylesheet Language for Transformations) 파일을

읽고 XSLT 파일의 지침을 XML 파일에 적용하여 특정 종류의 출력을 발생시킵니다. XML

구조를 만드는 것 이외에 XSLT 프로세서는 결과적인 XSLT 필터에 특정 양의 최적화를 수

Page 222: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 215 - 사용자 매뉴얼

행할 수 있으며 더욱 기술적으로는 컴파일러로 간주됩니다.

l 검증 파서(Validation parser) - DTD(document type definition) 또는 XML Schema를

읽고 결과적인 문서가 실제적으로 올바른 형식인지 그리고 여기에 스키마와 모순되는 데이

터가 없는지 확인합니다. 스키마만의 경우 검증 스키마는 스키마 자체를 HTML 목록 상자

의 옵션을 만드는 것과 같은 목적을 위해 참조할 수 있는 개체로 반환한다는 것을 참조하십

시오.

위의 모든 기능은 동일한 MSXML 라이브러리 패키지에 포함되어있으며 SDN XML 개발자 센터에서

무료로 얻을 수 있습니다.

MSXML, MSXML2 및 MSXML3간의 차이점은?

지난 3 년 동안 XML 은 여러 번 번안되었고 여러 가지 버전의 Microsoft XML 파서가 존재한다는

것은 아마 놀라운 것이 아닐 것입니다. Internet Explorer 4.0 에는 XML 파서의 초기 버전이

포함되어있으며 XSL, XML 데이터 또는 대부분의 기타 XML 기술(완전히 다른 DOM 모델을 가지고

있음)은 그 이후에 개발되었습니다. 파서의 이 초기 버전은 MSXML.dll 라이브러리에

포함되어있습니다. 사용하고 있는 파서를 MSDN XML 개발자 센터에서 더 최근의 파서로

업그레이드할 수 있습니다.

새로운 파서가 훨씬 우수하기 때문에 업그레이드를 단호히 권장합니다. Internet Explorer 5.0 에는

XSL 및 XML Schema 의 예비 버전이 포함되어 있는 MSXML 2.0 파서가 있습니다. MSXML2 는

SQL Server 2000 과 함께 판매되는 파서 버전입니다. MSXML2 는 성능을 강화시킨 기능을 많이

가지고 있으며 일반적으로 향상된 성능과 확장성을 갖습니다. MSXML3 은 현재 Technology

Preview 로 제공하고 있는 버전입니다. MSXML3 은 XSLT 및 XPath 지원뿐만 아니라 SAX

인터페이스를 제공합니다.

Page 223: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 216 - 사용자 매뉴얼

XML이 HTML을 대신할 수 있습니까?

XML 은 HTML 보다 우수한 유연성을 제공하지만 당분간은 이를 대체하지는 않을 것 같습니다. 사실

XML 과 HTML 은 상호 운용성이 뛰어납니다. Microsoft 가 바라는 것은 많은 제작자 및 개발자들이,

예를 들어 HTML 을 만들기 위해 XSLT 를 사용하는 식으로 XML 과 HTML 을 협력적으로 사용하는

것입니다.

HTML에 XML을 추가하면 어떤 장점이 있습니까?

웹에서 XML 을 사용하여 얻을 수 있는 몇 가지 장점을 아래에 설명하였습니다.

l 로컬 컴퓨팅을 위해 데이터를 전달합니다. 로컬 컴퓨팅을 위해 데스크톱으로 전달된 데이

터를 사용할 수 있습니다. XML 파서가 데이터를 읽을 수 있으며 그런 다음 이 데이터는

추가적인 보기나 처리를 위해 브라우저와 같은 로컬 응용 프로그램으로 전달됩니다. 이 데

이터는 또한 XML Object Model을 사용하는 기타 프로그래밍 언어 또는 스크립트를 사용

하여 조작할 수 있습니다.

l 사용자에 적합한 형태로 구조화된 데이터를 볼 수 있습니다. 데스크톱으로 전달된 데이터

는 다양한 방식으로 표현될 수 있습니다. 로컬 데이터 컬렉션은 사용자 기본 설정 및 구성

과 같은 인자에 기초하여 사용자에게 가장 적합한 뷰에서 동적으로 표현할 수 있습니다.

l 다양한 소스로부터 구조화된 데이트를 통합할 수 있습니다. 통상적으로 에이전트를 사용하

여 중간 계층 서버의 응용 프로그램 및 백 엔드 데이터베이스의 데이터를 통하여 데스크

톱 또는 기타 서버에 전달한 다음 추가적인 집계, 처리 및 분배 작업을 할 수 있습니다.

l 매우 다양한 응용 프로그램의 데이터를 설명합니다. XML은 확장성이 있기 때문에 웹 페이

지 컬렉션의 설명에서부터 데이터 레코드에 이르는 매우 다양한 응용 프로그램에 포함되

어있는 데이터를 설명하기 위해 사용할 수 있습니다. 데이터는 자체 설명을 가지고 있기

때문에 내장된 데이터 설명 없이 데이터를 받고 처리할 수 있습니다.

l 미립형 업데이트를 통해 성능을 향상시킵니다. XML에서는 미립형 업데이트가 가능합니다.

Page 224: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 217 - 사용자 매뉴얼

개발자는 변경이 생길 때마다 구조화된 데이터를 전부 보낼 필요가 없습니다. 미립형 업데

이트를 사용하면 변경된 요소만 서버에서 클라이언트로 보내면 됩니다. 변경된 데이터는

전체 페이지 또는 테이블을 새로 고칠 필요 없이 표현될 수 있습니다.

XML은 전문 개발자만을 위한 것입니까?

그렇지 않습니다. HTML 문서와 마찬가지로 XML 문서도 누구나(심지어 프로그래밍 경험이 전혀

없는 사람도) 만들 수 있습니다. XML 은 정보를 설명하는 표준 방식에 지나지 않습니다. 더욱이

XML 은 어떤 특수화된 소프트웨어를 사용하지 않고 작성할 수 있는 언어입니다. 일반적 의미의

코드를 작성할 필요 없이 텍스트 편집기에서 XML 문서를 작성한 다음 웹 사이트에 바로 올리기만

하면 됩니다.

XML을 시작하는데 필요한 것은 무엇입니까?

l XML 을 사용하기 위해서는 XML 문서를 읽고 그 내용을 처리할 수 있는 XML 파서가

필요합니다. Microsoft 는 MSDN XML 개발자 센터에서 다운로드할 수 있는 파서를

제공합니다.

l XML 문서를 만들려면 메모장 같은 텍스트 편집기 또는 HTML 페이지를 만들기 위해

사용하는 기타 모든 편집기를 사용할 수 있습니다. 완전한 XML 응용 프로그램을 만들려면

Microsoft® Visual Studio® 과 같은 프로그래밍 환경을 사용하십시오.

XML은 어디에 사용합니까?

XML 은 웹 사이트 작성 및 문서 작성에서부터 데이터베이스 통합 및 분산 프로그래밍에 이르기까지

놀라울 정도로 폭 넓은 응용 프로그램에서 사용되고 있습니다. XML 의 몇 가지 사용 영역은 다음과

같습니다.

Page 225: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 218 - 사용자 매뉴얼

l B2B 전송. 비즈니스 데이터(송장, 구매 요청서, 회계 및 세금 정보 및 그 이상)가 XML

형식으로 업체 간에 전자적으로 전송되고 있습니다. XML은 하나의 송장 형식을 또 다른

형식으로 변형 작성할 수 있는 편이성이 전혀 없는 이전의 EDI(electronic data

interchange) 형식보다 많은 장점을 제공합니다.

l 분산 프로그래밍. XML은 복합적인 다중 플랫폼 응용 프로그램 작성에 이상적이기 때문에

Windows 서버를 다른 운영 체제와 통합할 수 있습니다.

l 웹 사이트 아키텍처. XML의 계층 및 분산 성질로 인해 웹 사이트 개발자들은 웹 사이트의

전체 아키텍처 및 탐색 구조에서 XML의 사용을 점진적으로 증가시키고 있습니다. 내용 및

색인 테이블, 사용자 정보 및 웹 사이트의 상태를 추적하기 위한 XML 구조, HTML 기반

구성 요소 그리고 데이터 흐름을 처리하기 위한 전달 매체 모두가 점진적으로 XML 및

XSLT로 작성되고 있습니다.

l 데이터베이스 작업. XML은 데이터베이스와의 상호 작용에 대한 선택 수단으로 호응을 얻

고 있습니다(XML 레코드를 사용한 데이터베이스의 업데이트 또는 SQL 쿼리로부터 XML

데이터 집합을 검색). 이것은 또 한번 구현을 분리하는 장점을 가져다 줍니다. 데이터를

XML로 표현함으로써 실제 데이터베이스 구조에 대한 지식이 필요 없습니다.

l 문서 관리. 대부분의 회사는 서류 업무의 바다에서 허덕이고 있으며 이는 시간이 흐를 수

록 악화되기만 할 것 입니다. 문서를 더욱 쉽게 검색할 수 있도록 문서를 XML로 인코딩하

거나 더 효과적으로 참조할 수 있는 문서에 연결된 어떤 형식의 주석 컨텍스트를 제공하

기 위해 XML을 점진적으로 사용하고 있습니다.

XML을 몰라도 되나요?

인터넷 기반 분야에서 경쟁하길 원한다면 그렇지 않습니다. XML 은 우리가 프로그래밍 자체에 대해

가지고 있는 사고 방식의 패러다임을 바꾸는 언어입니다. 전통적인 전용 클라이언트/서버 응용

프로그램은 "언제 어디서나 액세스하는" 인터넷 서비스에 그 자리를 내주고 있으며 XML 은 데이터

액세스에서 폼 처리 그리고 이러한 새로운 환경에서의 표출을 다루기 위한 논리적 매체입니다.

Page 226: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 219 - 사용자 매뉴얼

Microsoft Internet Explorer 4.0은 XML을 지원합니까?

그렇습니다. Internet Explorer 4.0 은 XML 을 지원하기 위해 다음과 같은 기능을 제공합니다.

l 일반화된 XML 파서는 XML 파일을 읽은 다음 부가적인 처리를 위해 이것을 뷰어 같은 응

용 프로그램으로 넘겨줍니다. 응용 프로그램 개발자는 Microsoft에서 두 가지 파서를 사용

할 수 있습니다. 즉, C++의 Microsoft XML 파서 그리고Java의 Microsoft XML 파서입니

다.

l XML OM(XML Object Model)은 W3C(World Wide Web Consortium) 표준

DOM(Document Object Model)을 사용하여 XML 파서를 통해 구조화된 데이터에 체계적

으로 액세스할 수 있기 때문에 개발자는 이를 통하여 데이터의 상호작용과 컴퓨팅 능력을

얻습니다. 자세한 내용은 DOM 규정 을 참조하십시오.

l XML DSO(XML Data Source Object)를 통하여 개발자는 구조화된 XML 데이터에 연결하

고 DHTML의 데이터 바인딩 기능을 사용하여 이를 HTML 페이지에 공급할 수 있습니다.

Internet Explorer 5.0의 XML 지원 수준은?

Internet Explorer 5 는 다음과 같은 XML 지원을 제공합니다.

l XML의 직접 보기. Microsoft의 XML 구현은 HTML 문서를 보는 것과 마찬가지로 사용자가

웹 브라우저로 CSS(Cascading Style Sheet) 또는 XSL을 사용하여 XML을 볼 수 있도록

합니다.

l 고 성능, 검증 XML 엔진. Internet Explorer 4.0 개발자에 친숙한 XML 엔진이 상당히 강

화되었으며 W3C XML 1.0 및 XML 이름 공간을 완전히 지원함으로써 개발자는 웹에서 요

소 이름을 독특하게 부를 수 있고 따라서 동일 이름을 갖는 요소 간의 충돌을 피할 수 있습

니다. Windows가 XML 지원을 본래 갖추고 있다는 것은 개발자가 응용 프로그램 및 구성

Page 227: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 220 - 사용자 매뉴얼

요소 사이에서 이동시키는 데이터를 조작하고 읽기 위한 XML의 완전한 처리 능력에 의존

할 수 있음을 의미합니다.

l XSLT(Extensible Style Language for Transformation) 지원. 최근 W3C Working

Draft에 기반한 Microsoft XSLT 프로세서를 이용하여 개발자는 스타일시트를 XML 데이터

에 적용하고 쉽게 사용자 정의할 수 있는 이 데이터를 동적이고 유연한 방식으로 표시할 수

있습니다. 또한 Microsoft XSLT 프로세서의 쿼리 기능을 사용하여 개발자는 클라이언트 또

는 서버에 설정되어 있는 XML 데이터 내의 정보를 체계적으로 찾고 추출할 수 있습니다.

l XML Schemas. 스키마 는 요소 이름 및 풍부한 데이터 유형, 조합으로 나타낼

수 있는 요소 및 각 요소가 사용할 수 있는 특성 등을 포함하여 XML 문서의 규칙을 정의

합니다. 다중 계층 응용 프로그램을 가능하게 하기 위해 Microsoft는 W3C XML 참여 그룹

에 제출한 XDR(XML-Data Schema Reduced )에 기반하여 XML Schema에 대한 기술 개

요를 공개할 예정입니다.

l 서버 쪽 XML. 서버 쪽 XML 처리를 통하여 다중 분산 응용 프로그램 서버 간에 심지어는

운영 체제 경계를 넘어 데이터를 전달하는 표준 수단으로 XML을 사용할 수 있습니다.

l DOM(XML Document Object Model). XML DOM은 표준 개체 응용 프로그램 프로그

래밍 인터페이스로서 개발자에게 XML 문서 내용, 구조, 형식 및 그 이상에 대한 체계적 제

어를 부여합니다. Microsoft의 XML 구현에는 W3C의 XML DOM 권장안에 대한 완전한 지

원이 포함되어있으며 스크립트, Visual Basic 개발 시스템, C++ 및 기타 프로그래밍 언어

를 사용하여 액세스할 수 있습니다.

l C++ XML DSO(Data Source Object). XML DSO를 사용하여 HTML 요소를 직접 XML

데이터 아일랜드에 바인딩할 수 있습니다. 또한 이것은 성능을 향상시켰으며 다양한 XML

노드로의 바인딩 기능이 크게 향상되었고 Internet Explorer 5 베타 내의 새로운 모든 데

이터 바인딩 기능을 사용합니다.

Page 228: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 221 - 사용자 매뉴얼

HTML, DHTML 및 XML은 서로 어떤 관계가 있습니까?

HTML 은 CSS 와 연계하여 하이퍼링크 형식의 페이지를 만들고 표현하기 위해 사용합니다. DOM 을

통하여 DHTML 을 사용하면 언어 독립 스크립팅 및 기타 프로그래밍 언어를 통해 HTML 의 모든

요소에 액세스할 수 있으며 따라서 서버에 추가적인 요청 없이 클라이언트 쪽의 상호작용을

극적으로 증가시킵니다. 페이지의 개체 모델을 통하여 내용의 어떤 측면(추가, 삭제 및 이동을

포함하여)도 동적으로 변경할 수 있습니다.

구조화된 데이터를 얻기 위해 XML 을 추가함으로써 개발자는 풍부하고, 유연한 차세대 웹 응용

프로그램의 작성에 필요한 기술을 얻을 수 있습니다. XML 을 사용하여 개발자는 구조화된 데이터를

데스크톱에 전달하고 XML OM 을 통해 데이터의 컴퓨팅을 수행할 수 있습니다. 오늘 날 개발자들은

Microsoft Internet Explorer 4.0 및 Microsoft Internet Explorer 5 와 같은 브라우저에서 또는

스크립팅을 통한 기타 응용 프로그램에서 XML 기반 데이터를 표현할 수 있습니다. 또한 개발자는

XML 기반 데이터를 본질적으로 표시로 변환하는 XSLT 스타일시트를 사용하는 복잡한 스크립팅

없이 서식 규칙을 데이터에 적용할 수 있습니다. XML 기반 데이터를 표시하는 이 두 가지 방법을

사용하여 복잡한 데이터의 다중 보기를 생성할 수 있습니다.

XML이 중요한 이유는?

XML 은 컴퓨팅의 미래가 되기 위한 태세를 갖추고 있습니다. 하나의 기술로서 XML 의 효과는 포함

시스템에서 그래픽 인터페이스, 분산 시스템 및 데이터베이스 관리에 이르는 프로그래밍의 구석

구석에 스며들 것입니다. XML 은 소프트웨어 업계 간에 데이터 통신에 대한 사실상의 표준이

되었으며 세계적으로 거의 모든 산업에서 비즈니스 교환을 위한 기본 매체로 EDI 시스템을 빠르게

대체하고 있습니다. 인터넷 온라인 및 오프라인 모두의 경우에 대부분의 문서를 만들고 저장하는

언어로 유망하며 인터넷 응용 프로그램 서버에 대한 충분한 기초가 됨으로써 일부 사람들은 이것이

현재 생산되고있는 많은 수축 포장한 제품을 대체할 것으로 믿습니다.

Page 229: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 222 - 사용자 매뉴얼

Microsoft가 제공하는 XML 제품은?

Microsoft 는 수많은 분야에서 XML 리소스를 개발하기 위해 부단히 노력하고 있습니다.

l 데이터 액세스. 가장 최근에 구현한 ADO(ActiveX® Data Object)는 XML 생성 및 거의

일 년 동안의 소비를 지원하며 Microsoft SQL Server 2000은 SQL 기반 정보를 XML로

변환하고 또는 그 반대로 변환하기 위한 많은 인터페이스를 제공합니다.

l 브라우저 지원. Microsoft는 원시 구조 형태로 또는 XSL/CSS 스타일시트를 통해 XML 파

일을 읽을 수 있는 상업용 브라우저(Internet Explorer 5)를 만든 첫 회사였습니다.

l BizTalk Server 2000. Microsoft® BizTalk™ Server 2000은 XML을 포함하여 매우 다

양한 형식을 넘나들며 통신할 수 있는 수단을 제공하여 B2B 응용 프로그램을 활성화시키는

데 도움을 줍니다. 또한 BizTalk Server에는 많은 스키마 생성 및 매핑 도구가 포함되어있

어서 이를 사용하여 비즈니스 또는 상업적 요구에 따라 XML 구조의 개발을 폭 넓게 단순

화시킬 수 있습니다.

웹을 통한 전송을 위해 XML을 압축할 필요가 있나요?

일반적으로 XML 데이터의 압축에 대한 필요성은 응용 프로그램에 따라 다르며 크게 서버 및

클라이언트 간에 이동하는 데이터의 양에 의존합니다. 데이터의 구조를 설명하기 위해 사용하는

태그의 반복적 성질로 인해 XML 은 압축이 아주 잘 됩니다. HTTP 1.1 서버 및 클라이언트의 경우

압축이 표준이며 XML 은 자동으로 그 혜택을 얻는다는 것을 알아두면 좋습니다.

데이터 형식으로서 XML은 얼마나 안전합니까? XML에 보안을 추가할 예정은 있습니까?

XML 은 HTML 만큼 안전합니다. HTTP 에 암호화를 추가하기 위해 보안 HTTP(HTTPS)를 사용하여

HTML 을 보호할 수 있는 것처럼, 이는 또한 XML 을 보호하기 위해 사용할 수 있습니다. XML 은

구조화된 데이터를 표현하기 위한 텍스트 기반 형식입니다. XML 은 단순성 및 데이터와의 상호

Page 230: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 223 - 사용자 매뉴얼

작동성을 최대화합니다. XML 형식에 보안 및 인증을 추가하기 위해 많은 단계를 취할 수 있습니다.

우선 XML 은 클라이언트에 전송하기 전에 서버에서 암호화할 수 있으며 그런 다음 클라이언트에서

암호를 해독할 수 있습니다. 데이터에 적용되는 디지털 서명 자체도 XML 을 인증할 수 있습니다.

검증

DTD란 무엇이며 어디에 쓰입니까?

DTD(document type definition)는 XML 문서 클래스의 유효한 구문을 정의합니다. 즉, DTD 는

많은 요소 이름의 수, 조합하여 나타낼 수 있는 요소의 종류, 각 요소 유형이 사용할 수 있는

특성의 종류 등의 일람표입니다. DTD 는 XML 문서가 사용하는 것과 다른 구문을 사용합니다.

웹 개발자가 XML을 사용하여 데이터를 기술하는 경우 DTD를 포함시켜야 합니까?

그렇지 않습니다. XML 은 DTD 를 가지고 또는 이것 없이 데이터를 설명하기 위해 사용할 수

있습니다. "유효한" XML 이라는 용어는 DTD 에 참조를 다는 XML 데이터를 말하는 반면 "잘

구성된" XML 은 DTD 를 사용하지 않는 XML 을 말합니다 "잘 구성된" XML 의 추가는 XML 과

SGML(Standard Generalized Markup Language) 간의 근본적인 차이점 중의 하나입니다. 명확히

두 경우 모두 XML 자체는 언어에 대한 표준을 따라야 합니다. (예를 들어, 모든 태그는 닫아야

하고 겹치지 않아야 합니다)

XML 스키마란? DTD와 어떻게 틀립니까?

XML 1.0 은 XML 문서의 내용 모델을 정의하기 위한 메커니즘(DTD)을 제공하지만 내용 모델을

정의하는 더욱 포괄적이고 엄격한 방법이 확실히 필요합니다. XML 스키마는 특정한 XML 구조에

대한 정의(구성과 그 데이터 유형의 측면에서)입니다. XML 스키마는 XML Schema 언어를

Page 231: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 224 - 사용자 매뉴얼

사용하여 스키마에서 각 요소의 유형이 정의되는 방식 및 그 요소가 스키마와 연관시키는 데이터

유형을 지정합니다. 아마도 DTD 와 비교하여 가장 뚜렷한 스키마의 특징 중 하나는 스키마 그

자체가 XML 문서라는 것입니다. 이는 스키마가 설명하는 XML 을 읽는 동일한 도구로 스키마를

읽을 수 있다는 것을 의미합니다.

Microsoft 의 XML 서비스는 현재 XML-Data 스키마를 지원합니다. 이는 Internet Explorer 5 가

1999 년 3 월 판매되던 당시 W3C Schema 활동의 단편을 나타냅니다. XML-Data 스키마를

사용하여 개발자는 데이터 유형을 XML 문서에 추가하고 개방적인 내용 모델을 정의할 수 있습니다.

DTD 기능으로의 이러한 확장은 XML 을 사용한 프로그래밍에 매우 중요합니다.

그러나 W3C 는 XML Schema 표준이 될 XSD(XML Schema Definition)를 준비하고 있습니다.

Microsoft 는 규정이 권장안이 됨과 동시에 XSD 에 대한 지원을 핵심 XML 서비스의 부분으로

만들려고 계획하고 있습니다.

이름 공간이 무엇이며 이것이 왜 중요합니까?

이름 공간은 XML 의 또 다른 발전된 기능이며 XML 1.0 규정의 한 부분으로 W3C 문서에 약술되어

있습니다. 이름 공간을 통하여 개발자는 요소 이름 및 관계를 한정할 수 있습니다. 이름 공간은

요소 이름을 독특하게 인식할 수 있게 만들어서 동일한 이름을 가지고 있지만 다른 어휘로

정의되는 요소에 대한 이름 충돌을 피할 수 있습니다. 이름 공간은 여러 이름 공간의 태그가 섞이는

것을 허용하며 이것은 데이터가 여러 소스에서 기인하는 경우 필수적입니다.

예를 들어, 책방은 <TITLE> 태그가 <BOOK> 요소 내에만 포함되어있는 책의 제목을 의미한다고

정의할 것입니다. 그러나 인명부는 <TITLE>이 사람의 지위를 나타낸다고 정의할 것입니다. 예를

들면 다음과 같습니다.

<TITLE>President</TITLE>

이름 공간은 이러한 구분을 명확히 하는데 도움을 줍니다.

Page 232: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 225 - 사용자 매뉴얼

XSLT 및 XPATH

XSLT란?

XSLT (Extensible Stylesheet Language for Transformation)는 1999 년 11 월 16 일

승인된 공식 W3C 권장안입니다. XSLT 는 XML 구조를 또 다른 XML 구조, HTML 또는 기타 모든

텍스트 기반 형식으로 변환하기 위한 메커니즘을 제공한다는 점에서 단어의 마크업 및

프로그래밍적 의미에서 하나의 언어입니다(SQL 같은). XSLT 는 웹 페이지를 표시하기 위한 출력을

위해 사용할 수 있지만 XSLT 의 실제 능력은 CSS(Cascading Style Sheet)에서처럼 구조의

단순한 미디어 표현이 아닌 기초를 이루는 이러한 구조의 변경입니다.

XSL, XQL, XSL 패턴 및 XSLT간의 차이점은?

XSLT 의 기원은 XML 작성의 뚜렷한 이유가 범용의 데이터 설명 언어를 제공하는 것이 아니라

HTML 의 교체를 지향했을 당시 XML 문서를 구조적으로 변경하는 수단을 제공하기 위해 CSS 의

제한을 극복하려는 목적에서 기인합니다. 따라서 XSL(Extensible Stylesheet Language )은 XML

서식 작성의 새로운 수단을 만들려는 노력이 되었습니다.

그러나 하나의 형식에서 또 다른 형식으로 XML 을 변형할 수 있는 언어는 생성된 많은 코드를

근본적으로 단순화할 것이라는 것이 W3C 스타일 참여 그룹의 참가자 및 초기 XML 채택자

모두에게 명백하게 되었습니다. Microsoft 는 처음 XQL(XML Query Language)이라고 부른 제안을

W3C 에 공개하였습니다. 이것은 다시 W3C 에 의해 XSL 패턴 언어로 채택되었습니다. 이 언어의

대부분의 특징은 최종적으로 XSLT 규정이 되었습니다.

결과적인 표준은 변하는 초기 조건에 대해 XSLT 를 수정하기 위한 매개 변수, 코드의 함수 블록을

만들기 위한 명명 템플릿 그리고 숫자 및 문자열 조작을 위한 많은 강화된 함수들을

포함하였습니다. 또한 XSLT 에는 언어 내에 구축된 기능을 추가하기 위한 규정이 있으며 이것은

Microsoft 가 COM 개체 및 스크립팅에 대한 액세스를 포함하여 매우 유용한 많은 기능을 추가하기

위해 그 구현 과정에서 이용한 것입니다.

Page 233: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 226 - 사용자 매뉴얼

XSLT란?

XPath 는 문서에서 노드의 하위 집합을 선택하기 위해 단순한 구문을 제공하는 XML 에

대해 정의되는 쿼리 언어입니다. XPath 를 사용하여 디렉터리와 유사한 경로(따라서 이름)뿐만

아니라 경로에 대한 조건을 지정함으로써 요소 집합을 검색할 수 있습니다. XPath 는 XSLT 및

XML DOM 모두에 대해 매우 중요하며 XPointer 규정(URL[Uniform Resource Locator] 및 XPath

식의 조합에 기초하여 문서의 조각을 선택할 수 있도록 함)에 관계합니다.

XML에 대해 XSLT가 그렇게 중요한 이유는?

XSLT 는 하나의 XML 문서를 또 다른 XML 문서로 변환하는 언어입니다. 이것은 XSLT 가 단일

소스에서 XML 데이터 추출, 사용자가 동적으로 변경할 수 있는 웹 페이지의 풍부한 보기 작성

그리고 대상 지정 통신을 위한 데이터의 필터링에 대한 메커니즘을 제공한다는 의미입니다.

XSLT 는 비즈니스 규칙을 인코드하기에 충분히 견고합니다. XSLT 는 데이터로부터 그래픽(웹

페이지에 한정되지 않음)을 생성할 수 있습니다. XSLT 는 심지어 다른 서버와의 통신을 처리할 수

있으며(특히 XSLT 로 통합될 수 있는 스크립팅 모듈과 연계하여) XSLT 자체의 본문 내에 해당

메시지를 생성할 수 있습니다. 데스크톱 시스템 내의 대부분의 상호작용을 대체할 것 같지는

않지만(성능 및 용이한 사용 모두에 관계된 이유로 인해), 결국에는 XSLT 가 차후 수년 내에

시스템 간 통신에 대한 기본 "프로그래밍" 언어 중 하나가 될 것으로 기대됩니다.

XSLT와 CSS간의 차이점은? 둘 모두 스타일시트 아닙니까?

CSS(Cascading Style Sheet)는 표시 속성을 HTML 요소에 할당함으로써 작동합니다. CSS 는

페이지의 가시적 외관을 결정하고 소스 문서의 구조를 변경하지 않습니다.

한편, XSLT 는 XML, HTML 또는 일반 텍스트로 작성된 출력과 소스 문서의 일정 패턴을 매핑할 수

있도록 하는 템플릿 기반 언어로 알려져 있습니다. XSLT 를 사용하면 XML 문서의 구조를 다른

Page 234: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 227 - 사용자 매뉴얼

XML 문서로 변환할 수 있습니다. 예를 들어, XML 문서의 순서 변경, 요소의 추가/삭제, 조건

테스트 수행 또는 요소 집합을 통한 반복 등을 수행할 수 있습니다.

XSLT 와 CSS 는 호환성이 없는 표준이 아닙니다. XML 을 사용하여 웹 페이지를 만드는 유용한

기술 중 하나는 XSLT 를 사용하여 XML 을 목록 또는 테이블과 같은 구조로 변환한 다음 그 결과에

CSS 를 적용하여 이러한 구조가 해당 미디어에서 어떻게 보일 것인지를 제어하는 것입니다.

XSLT 에서 CSS 를 만들 수도 있습니다.

표준

Microsoft는XML 표준을 얼마나 준수합니까?

Microsoft 는 실제적으로 이 언어의 시작 이래로 중요하게는 W3C 가 지난 수 년간 만든 대부분의

작업 초안 및 XML 권장안에 적어도 한명 그리고 일부 경우에는 몇 명의 Microsoft 직원이

참여하고 의견이 반영된 이래로 XML 의 최전선에 있습니다. Microsoft 는 XML 을 모든 사용자가

혜택을 누릴 수 있는 방식으로 개발하기 위해 W3C 표준안 작업에 전념해왔으며 XML 규정, DOM,

XSLT 및 스키마 정의 언어(Schema Definition Language)를 포함하여 많은 상이한 영역의

개발에서 중요한 참여자의 역할을 하였습니다. Microsoft 는 새로 생겨나는 규정 및 표준을

준수하기 위해 노력합니다.

XML과 W3C(World Wide Web Consortium)는 어떤 관계가 있습니까?

W3C 는 활동적인 XML 참여 그룹입니다. Microsoft 는 1996 년 6 월 이 그룹의 공동 창설자이며 그

이래로 Netscape Communications Corp, IBM 및 Oracle 을 포함하여 매우 많은 업체가

참가하였습니다. XML 표준 과정에 대한 자세한 내용은 W3C 웹 사이트 에서 얻으십시오.

Page 235: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 228 - 사용자 매뉴얼

W3C에서 XML의 위치는 어떻습니까?

XML 버전 1.0 은 1998 년 12 월 공식적으로 승인되었으며 현재 안정된 표준입니다. 현재 XML

규정 및 W3C 내의 제출 및 평가 과정에 대한 자세한 정보는 W3C 웹 사이트 를

참조하십시오.

W3C에서 DOM의 위치는 어떻습니까?

DOM Level 1 에 대한 W3C 문서는 권장안 지위를 가지고 있습니다. 이는 W3C 가 현재 DOM 을

World Wide Web 에서의 표준으로 추진하고있다는 것을 의미합니다. DOM 및 W3C 내의 제출 및

평가 과정에 관한 자세한 내용은 DOM 규정 을 참조하십시오.

도구 지원

SQL Server 및 ADO는 XML을 지원합니까?

ADO(Microsoft ActiveX Data Object) 기술은 데이터베이스 레코드 집합(데이터 레코드의 집합)을

XML 형식으로 변환하는 다양한 수단뿐만 아니라 주어진 구조에서 XML 을 취하고 이것을 ADO 가

지원하는 모든 데이터베이스로 다시 변환하는 도구(SQL Server 및 Oracle 데이터베이스를

포함하여)를 제공합니다. 또한 MSXML2 및 MSXML3 의 XML DSO(Data Source Object)를

통하여 임의 XML 을 ADO 에 직접 로드하여 레코드 집합을 생성할 수 있습니다.

또한 SQL Server 2000 을 이용하면 웹 페이지를 불러오는 것과 매우 동일한 방식으로 URL 을

통해 XML 을 직접 설정 및 검색할 수 있습니다. 이는 본질적으로 SQL Server 데이터를 XSL 필터

및 웹 페이지를 포함하여 기본적으로 XML 문서를 보낼 수 있는 어느 곳으로도 통합할 수 있다는

것을 의미하기 때문에 데이터베이스 작업을 위한 강력한 메커니즘입니다. 더욱이 SQL Server

데이터에서 XML 이 생성되는 방식을 제어하기 위한 사용자 정의 템플릿을 설정할 수 있기 때문에

데이터베이스는 XHTML 페이지를 생성하기 위한 강력한 도구가 됩니다.

Page 236: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 229 - 사용자 매뉴얼

마지막으로 BizTalk Server 같은 응용 프로그램을 이용하면 데이터 소스의 수에 관계 없이 서로

간에(XML 문서에서 데이터베이스, Excel 및 Word 로) 매핑할 수 있고 웹 아키텍처에 대한 복잡한

데이터 파이프라인을 만들 수 있으며 XML 데이터베이스에 필요한 효과적인 스키마를 구축할 수

있습니다.

XML을 빠르게 사용하는데 도움이 될 수 있는 도구로 Microsoft가 현재 제공하는 것이 있습니까?

데이터 교환을 위한 XML 기반 서버인 Microsoft BizTalk Server 2000 은 전자 상거래 비즈니스

커뮤니티 운영을 위한 인프라 및 도구를 제공합니다. BizTalk Server 에 대한 토대는 규칙 기반

비즈니스 문서 전달, 변환 그리고 인프라의 추적입니다. 이 인프라를 통해 기업은 회사 경계를

내에서 또는 이를 넘나들며 응용 프로그램 간의 비즈니스 문서(예: 구매 요청서 및 송장)를

교환함으로써 비즈니스 처리를 통합, 관리 및 자동화할 수 있습니다. 자세한 내용은 Microsoft

BizTalk Server 2000 을 참조하십시오.

Page 237: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 230 - 사용자 매뉴얼

SOAP란?

SOAP(Simple Object Access Protocol)은 기존 인터넷 인프라를 이용하여 인터넷 상에서 작동하는

폭 넓게 분산된 복잡한 컴퓨팅 환경을 만드는 수단입니다. SOAP 는 매우 다양한 방식으로 인터넷

상에서 상호 간에 직접 통신하는 응용 프로그램에 관한 것입니다. SOAP 에 대한 자세한 내용은

SOAP 규정 을 참조하십시오.

XML은 3계층, 웹 가능 응용 프로그램 구축을 위한 Microsoft Windows® DNA(Windows

Distributed InterNet Application) 전략에 얼마나 적합합니까?

XML 은 구조화된 데이터를 중간 계층에서 데스크톱으로 빠르게 이동시키는 수단이 되고 있습니다.

XML 기반 데이터는 중간 계층의 에이전트를 사용하여 여러 백 엔드(데이터베이스) 소스로부터

통합할 수 있습니다. 개발자들이 데이터를 더욱 정확하게 설명하고 교환할 수 있기 때문에

스키마(XML-Data 부분 참조)는 이 과정을 향상시킬 수 있습니다.

문제와 해결책

Load() 메서드를 호출한 후에도 문서 개체가 비어있는 이유?

기본적으로 연산은 비동기적으로 로드됩니다. 이는 http URL 위치를 제공하는 경우 load()

메서드가 즉시 반환되며 데이터가 서버에서 아직 돌아오지 않았기 때문에 문서 개체가 여전히

비어있다는 것을 의미합니다. 이를 해결하려면 다음 문자열을 코드에 추가하십시오.

xmldoc.async = false;

또한 독립 실행형 C++ 응용 프로그램에서 http XML 문서를 로드하는 경우 다운로드를 계속하려면

메시지 대기열을 쿼리해야 합니다.

Page 238: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 231 - 사용자 매뉴얼

외국 및 특수 문자가 있는 문서를 로드하는 방법?

문서에는 다음과 같은 외국 문자가 포함될 수 있습니다.

<test>foreign characters (안녕) </test>

uoia와 같은 외국 문자는 확장 문자열로 앞 부분에서 선언해야 합니다. 외국 문자는 UTF-8로 인코

딩하거나 다음과 같이 다른 인코딩으로 지정할 수 있습니다.

<?xml version="1.0" encoding="EUC-KR"?>

<test>foreign characters (안녕) </test>

이제 XML 이 올바로 로드됩니다.

XML 에서는 기타 문자가 예약되어있으며 또한 다르게 처리해야 합니다.

<foo>This & that</foo>

위의 XML은 다음 오류를 발생시킵니다.

Whitespace is not allowed at this location.

Line 0000001: <foo>This & that</foo>

Pos 0000012: ----------^

앰퍼샌드(&)는 XML 의 통어적 구조의 부분이며 단순히 XML 데이터 소스에 놓이는 경우

앰퍼샌드로 해석되지 않습니다. "엔티티"라는 특수 문자 시퀀스로 대체해야 합니다.

<foo>This & that</foo>

다음 문자들은 해당 엔티티가 필요합니다.

< &lt;

& &amp;

> &gt;

" &quot;

' &apos;

Page 239: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 232 - 사용자 매뉴얼

따옴표는 태그 내에서 특성 값에 대한 구분 기호로 사용되며 따라서 특성 값 내에서는 항상 사용할

수 없습니다. 예를 들어 다음은 오류를 반환합니다.

<foo description='John's Stuff'>

여기서 큰따옴표는 특성 구분 기호로 그리고 특성 값 자체에서 모두 사용되었습니다. 이를

해결하려면 다음과 같이 특성 구분 기호에 대한 작은따옴표를 사용하거나

<foo description="John's Stuff">

또는 큰따옴표를 엔티티 &apos;로 확장할 수 있습니다.

<foo description='John&apos; Stuff'>

위의 두 경우 모두 XML 개체 모델(Object Model)의 getAttribute 메서드를 통해 특성 값 John's

Stuff를 반환합니다. 작은따옴표의 경우에도 비슷하게 엔티티를 사용할 수 있습니다.

&quot;.

또한 텍스트를 CDATA 부분 내에 넣음으로써 요소 내용에 있는 특수 문자를 처리할 수 있습니다.

다음은 유효합니다.

<xml>

<![CDATA[ This & that <stuff> is just "text" content. ]]>

</xml>

이 예에서 XML 개체 모델은 CDATA 노드를 다음 문자열을 nodeValue 로 반환하는 xml 노드의

자식으로 나타냅니다.

This & that <stuff> is just "text" content.

Page 240: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 233 - 사용자 매뉴얼

Visual Studio 6.0 C++에서 MSXML COM 구성 요소 사용하는 방법?

Visual C++ 6.0 에서 MSXML COM 구성 요소를 사용하는 가장 쉬운 방법은 #import 지시어를

사용하는 것입니다.

#import "msxml.dll" named_guids no_namespace

이것은 모든 IXML* 인터페이스 및 인터페이스 ID를 정의하여 이를 응용 프로그램에서 사용할 수

있도록 합니다. 또한 MSXML 유형 라이브러리, 헤더 파일 및 INETSDK에서 클래스 IID를 포함

하는 uuid lib를 얻을 수 있습니다.

XML에서 HTML 엔티티 사용하는 방법?

다음 XML 에는 HTML 엔티티가 포함되어있습니다.

<copyright>Copyright © 1999, Microsoft Inc, All rights reserved.</copyright>

이것은 다음 오류를 발생시킵니다.

Reference to undefined entity 'copy'.

Line: 1, Position: 23, ErrorCode: 0xC00CE002

<copyright>Copyright © 1999, ...

----------------------^

오류가 발생하는 이유는 XML 이 5 개의 내장 엔티티만을 가지고 있기 때문입니다. 내장 엔티티에

대한 자세한 내용은 외국 및 특수 문자가 있는 문서를 로드하는 방법을 참조하십시오.

HTML 엔티티를 사용하려면 이를 DTD로 정의해야 합니다. DTD에 대한 자세한 내용을 보려면

W3C XML 권장안 을 참조하십시오. 이 DTD를 사용하려면 다음과 같이 DOCTYPE 태그에

이것을 직접 포함시키십시오.

<!DOCTYPE foo SYSTEM "http://msdn.microsoft.com/xml/general/htmlentities.dtd">

<copyright>Copyright © 1999, Microsoft Inc, All rights reserved.</copyright>

Page 241: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 234 - 사용자 매뉴얼

이것을 로드하려면 IXMLDOMDocument 인터페이스의 validateOnParse 속성을 중지해햐

합니다. 이것을 Validator Test Page 에 붙여넣은 다음 DTD 검증(validation)을 중지하고

Validate 를 누릅니다. 문서가 로드되고 사용권 문자가 검증자(validator) 페이지 끝에 있는 DOM

트리에서 사용 가능함을 참조하십시오.

DTD 검증을 이미 수행하였다면 다음과 같이 HTML 엔티티를 기존 DTD에 매개 변수 엔티티로 포

함시켜야 합니다.

<!ENTITY % HTMLENT SYSTEM

"http://msdn.microsoft.com/xml/general/htmlentities.dtd">

%HTMLENT;

이것은 모든 HTML 엔티티를 정의하여 XML 문서에서 이를 사용할 수 있도록 합니다.

특성에 대한 공백의 처리 방식?

XML DOM 에는 요소의 텍스트 내용에 액세스하기 위한 세 가지 방법이 있습니다.

속 성 작 동

nodeValue TEXT, CDATA, COMMENT 및 PI 노드의 원래 텍스트 내용(공백 포함)을 원래 XML 소스

에서 지정한 대로 반환합니다. ELEMENT 노드 및 DOCUMENT 자체에 널을 반환합니다.

Data nodeValue와 동일

text 지정된 하부 트리에서 여러 TEXT 및 CDATA 노드를 귀납적으로 연결하고 결합된 결과를

반환합니다.

참고: 공백은 새줄(newline), 탭(tab) 및 공간(space) 문자로 이루어집니다.

nodeValue 속성은 문서가 로드된 방식과 현재 xml:space 유효범위에 상관 없이 항상 원래

문서에 있는 것을 반환합니다.

Page 242: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 235 - 사용자 매뉴얼

text 속성은 지정된 하부 트리에서 모든 텍스트를 연결하고 엔티티를 확장합니다. 이것은 문서가

로드된 방식, preserveWhiteSpace 스위치의 현재 상태 그리고 현재 xml:space 유효 범위에

다음과 같이 의존합니다.

문서가 로드되었을 때 preserveWhiteSpace = true

preserveWhiteSpace

=true

preserveWhiteSpace

=true

preserveWhiteSpace

=false

preserveWhiteSpace

=false

xml:space=preserve xml:space=default xml:space=preserve xml:space=default

보존 보존 보존 보존 및 잘림

preserveWhiteSpace = false when the document is loaded

preserveWhiteSpace

=true

preserveWhiteSpace

=true

preserveWhiteSpace

=false

preserveWhiteSpace

=false

xml:space=preserve xml:space=default xml:space=preserve xml:space=default

반 보존 반 보존 및 잘림 반 보존 반 보존 및 잘림

여기서 보존은 원래 XML 문서에 있는 것과 같은 정확한 원래 텍스트 내용을 의미하며 잘림은 앞

및 뒤 공간이 제거되었음을 의미하고 반 보존은 "중요한 공백"은 보존되고 "중요하지 않은 공백"은

정규화되었다는 것을 의미합니다. 중요한 공백은 텍스트 내용 내부의 공백이며 중요하지 않은

공백은 다음과 같이 태그 사이의 공백입니다.

<name>\n

\t<first> Jane</first>\n

\t<last>Smith </last>\n

</name>

이 예에서 빨간 부분이 중요하지 않은 공백이며 무시할 수 있는 반면 녹색 부분은 텍스트 내용의

부분이기 때문에 중요한 공백이고 따라서 중요한 의미를 지니므로 무시할 수 없습니다. 따라서 본

예에서 텍스트 속성은 다음 결과를 반환합니다.

Page 243: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 236 - 사용자 매뉴얼

상태 반환 값

보존 "\n\t Jane\n\tSmith \n"

보존 및 잘림 "Jane\n\tSmith"

반 보존 " Jane Smith "

반 보존 및 잘림 "Jane Smith"

"반 보존"은 중요하지 않은 공백을 정규화한다는 것에 주의하십시오. 예를 들어 새줄 및 탭 문자는

병합되어 하나의 공간 문자가 됩니다. xml:space 특성 및 preserveWhiteSpace 스위치를

변경할 수 있으며 text 속성은 그에 따라 다른 값을 반환합니다.

CDATA 및 xml:space="preserve" 하부 트리 경계

다음 예에서 CDATA 노드 또는 "보존" 노드의 내용은 있는 그대로 연결되며 중요하지 않은 공백의

정규화에 참여하지 않습니다. 예를 들면

<name>\n

\t<first> Jane </first>\n

\t<last><![CDATA[ Smith ]></last>\n

</name>

이 경우 CDATA 노드 내부의 공백은 결코 "중요하지 않은" 공백으로 "병합"되지 않으며 결코

잘리지 않습니다. 따라서 "반 보존 및 잘림"의 경우 다음을 반환합니다.

"Jane Smith "

여기서 및 태그 사이의 중요하지 않은 공백은 CDATA 노드의 내용과 상관 없이 포함됩니다.

CDATA 를 다음으로 교체하는 경우 동일한 결과가 반환됩니다.

<last xml:space="preserve"> Smith </last>

Page 244: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 237 - 사용자 매뉴얼

엔티티는 특수합니다.

엔티티는 DTD 의 부분으로 로드 및 파싱되고 DOCTYPE 노드 하에 나타납니다. 엔티티는 어떤

xml:space 유효범위를 꼭 갖지는 않습니다. 예를 들면 다음과 같습니다.

<!DOCTYPE foo [

<!ENTITY Jane "<employee>\n

\t<name> Jane </name>\n

\t<title>Software Design Engineer</title>\n

</employee>">

]>

<foo xml:space="preserve">&Jane;</foo>

preserveWhiteSpace=false(DOCTYPE 태그의 유효범위에서)라고 가정하면 엔티티가 파싱되는

경우 중요하지 않은 공백은 소실됩니다. 엔티티는 공백 노드를 갖지 않게 됩니다. 트리의 모양은

다음과 같을 것입니다.

DOCTYPE foo

ENTITY: Jane

ELEMENT: employee

ELEMENT: name

TEXT: Jane

ELEMENT: title

TEXT>:Software Design Engineer

ELEMENT: foo

ATTRIBUTE: xml:space="preserve"

ENTITYREF: Jane

Page 245: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 238 - 사용자 매뉴얼

DOCTYPE 내의 ENTITY 노드 하에 노출된 DOM 트리는 어떤 WHITESPACE 노드도 포함하지

않음을 주목하십시오. 이는 엔티티 참조가 xml:space="preserve"의 유효범위에 있더라도

ENTITYREF 노드의 자식이 또한 WHITESPACE 노드를 갖지 않음을 의미합니다.

어떤 주어진 문서에서 참조된 모든 ENTITY 인스턴스는 항상 동일한 트리를 갖습니다.

엔티티가 절대적으로 공백을 보존해야 하는 경우 엔티티가 자체 내에 고유의 xml:space 특성을

지정하거나 문서 preserveWhiteSpace 스위치를 true 로 설정해야 합니다.

Page 246: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 239 - 사용자 매뉴얼

특성에 대한 공백의 처리 방식?

특성 값에 액세스하는 몇 가지 방법이 있습니다. IXMLDOMAttribute 인터페이스는 nodeValue

속성을 가지고 있으며 이것은 Microsoft 확장인 text 속성 및 nodeValue 와 같습니다. 이러한

속성은 다음을 반환합니다.

속성 반환 text

attrNode.nodeValue

attrNode.value

getAttribute("name")

원래 문서에 있는 것과 같은 정확한 내용(엔티티가 확장되어)을 반환합니

다.

attrNode.nodeTypedValue 널

attrNode.text 앞, 뒤 공백이 잘리는 것을 제외하고 nodeValue와 동일

XML Language 규정은 XML Application 에 대해 다음 동작을 정의합니다.

특성 유형 반환 text

CDATA ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, 에뮬레이션

반 정규화 완전히 정규화

여기서 반 정규화는 새줄 및 탭 문자가 공간으로 변환된다는 것을 의미하지만 여러 공간은 하나의

공간으로 병합되지 않습니다.

XML 개체 모델에서 공백의 처리 방식?

때로 XML OM 은 공백 문자를 포함하는 TEXT 노드를 나타냅니다. 대부분의 경우 공백이

제거되므로 이것은 혼란을 가져옵니다. 예를 들어 다음 XML 예제를 살펴봅니다.

<?xml version="1.0" ?>

<!DOCTYPE person [

Page 247: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 240 - 사용자 매뉴얼

<!ELEMENT person (#PCDATA|lastname|firstname)>

<!ELEMENT lastname (#PCDATA)>

<!ELEMENT firstname (#PCDATA)>

]>

<person>

<lastname>Smith</lastname>

<firstname>John</firstname>

</person>

위의 XML 은 다음의 트리를 생성합니다.

Processing Instruction: xml

DocType: person

ELEMENT: person

TEXT:

ELEMENT: lastname

TEXT:

ELEMENT: firstname

TEXT:

"person" 요소에 대한 내용 모델이 MIXED 이기 때문에 firstname 과 lastname 은 공백만 있는

TEXT 노드에 의해 둘러싸입니다. 이것은 #PCDATA 키워드를 포함합니다. MIXED 내용 모델은

요소가 그들 사이에 텍스트를 배치시킬 수 있다는 것을 나타냅니다. 따라서 다음도 유효합니다.

<person>

My last name is <lastname>Smith</lastname> and my first name is

<firstname>John</firstname>

</person>

이것은 다음과 같은 친숙해 보이는 트리를 생성합니다.

Page 248: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 241 - 사용자 매뉴얼

ELEMENT: person

TEXT: My last name is

ELEMENT: lastname

TEXT: and my first name is

ELEMENT: firstname

TEXT:

"is" 단어 앞, <lastname> 뒤에 그리고 </lastname> 앞, "and" 단어 뒤에 공백이 없다면 문장을

이해하기 힘듭니다. 그래서 MIXED 내용 모델의 경우 텍스트의 조합, 공백 및 요소는 연관이

있습니다. MIXED 가 아닌 내용 모델의 경우에는 그렇지 않습니다.

공백만 있는 TEXT 노드를 없애려면 "person" 요소 선언에서 #PCDATA 키워드를 제거하십시오.

<!ELEMENT person (lastname,firstname)>

그러면 다음의 깨끗한 트리가 생성됩니다.

Processing Instruction: xml

DocType: person

ELEMENT: person

ELEMENT: lastname

ELEMENT: firstname

XML 선언의 용도는?

XML 선언은 XML 문서의 맨 위에 기입해야 합니다.

<?xml version="1.0" encoding="utf-8"?>

이것은 다음 사항을 지정합니다.

Page 249: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 242 - 사용자 매뉴얼

l 문서가 XML 문서임. 이것은 MIME 유형이 없어졌거나 지정되지 않은 경우 어떤 파일이

text/xml 유형임을 발견하기 위해 MIME 탐지기가 사용할 수 있습니다.

l 문서가 XML 1.0 규정을 따름. XML의 차후 버전이 나오는 경우 이것이 중요하게 됩니다.

l 문서 문자 인코딩. 인코딩 특성은 옵션이며 UTF-8이 기본으로 되어있습니다.

참고: XML 선언은 XML 문서의 첫 줄에 있어야 합니다. 따라서 다음 XML 파일은

<!--HEADLINE="Dow closes as techs get hammered"-->

<?xml version="1.0"?>

다음의 파서 오류를 발생시킵니다.

Invalid xml declaration.

Line 0000002: <?xml version="1.0"?>

Pos 0000007: ------^

참고: XML 선언은 옵션입니다. 맨 위에서 주석 또는 처리 지침을 지정해야 한다면 XML 선언을

어디에도 두지 마십시오. 그러나 인코딩은 기본으로 UTF-8 입니다.

XML 문서를 읽기 가능 형식으로 인쇄하는 방법?

DOM 을 사용하여 처음부터 문서를 작성함으로써 XML 파일을 생성하는 경우 사이에 공백이 없이

모든 것이 하나의 줄 위에 있게 됩니다. 이것이 기본 작동입니다.

Internet Explorer 5 로 작성한 기본 XSL 스타일시트는 읽기 가능 형식으로 XML 문서를 표시하고

인쇄합니다. 예를 들어 IE5 를 설치한 경우 nospace.xml 파일을 보면 다음과 같이 나타납니다.

여러분의 브라우저에 다음 트리가 표시되어야 합니다.

- <ORDER>

- <ITEM NAME="123">

Page 250: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 243 - 사용자 매뉴얼

<NAME>XYZ</NAME>

<PRICE>12.56</PRICE>

</ITEM>

</ORDER>

XML 에 삽입된 공백이 없습니다.

읽기 가능 XML 을 인쇄하는 것은 상이한 종류의 내용 모델을 정의 하는 DTD 를 가지고 있는 경우

특히 상당히 까다롭습니다. 예를 들어, MIXED 내용 모델(#PCDATA)에서 공간은 내용의 의미를

바꿀 수 있기 때문에 이를 삽입하지 않을 것입니다. 예를 들어, 다음 XML 을 살펴봅시다.

<B>E</B><I>lephant</I>

이것은 다음보다 나은 출력이 아닙니다.

<B>E</B>

<I>lephant</I>

외냐 하면 단어 경계가 더 이상 올바르지 않기 때문입니다.

이 모든 것은 자동 인쇄를 어렵게 만듭니다. 읽기 가능 XML 을 인쇄하려면 DOM 을 사용하여

공백을 적합한 위치에 텍스트 노드로 삽입해야 합니다.

DTD에서 이름 공간 사용 방법?

DTD에서 이름 공간을 사용하려면 이름 공간을 사용하는 요소의 ATTLIST 선언에서 다음과 같이 이

를 선언합니다.

<!ELEMENT x:customer ANY >

<!ATTLIST x:customer xmlns:x CDATA #FIXED "urn:...">

이름 공간은 #FIXED 유형이어야 합니다. 특성에서의 이름 공간도 동일한 방식으로 작용합니다.

<!ELEMENT customer ANY >

Page 251: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 244 - 사용자 매뉴얼

<!ATTLIST customer

x:value CDATA #IMPLIED

xmlns:x CDATA #FIXED "urn:...">

이름 공간 및 XML Schema

DTD 와 XML Schema 는 섞을 수 없습니다. 예를 들어 다음 예문은

xmlns:x CDATA #FIXED "x-schema:myschema.xml"

myschema.xml에서 정의된 스키마 정의를 사용하지 않습니다. DTD과 XML Schema의 사용은 상

호 배타적입니다.

Page 252: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 245 - 사용자 매뉴얼

Visual Basic에서 XMLDSO 사용 방법?

다음 XML 예문을 살펴봅니다.

<contacts>

<person>

<name>Mark Hanson</name>

<telephone>206 765 4583</telephone>

</person>

<person>

<name>Jane Smith</name>

<telephone>425 808 1111</telephone>

</person>

</contacts>

다음과 같이 ADO Recordset에 바인딩할 수 있습니다.

1. 새 VB 6.0 프로젝트를 만듭니다.

2. Microsoft ActiveX Data Objects 2.1 이상, Microsoft Data Adapter Library 및

Microsoft XML 버전 2.0에 참조를 추가합니다.

3. 다음 코드를 사용하여 XML 데이터를 XML DSO 제어에 로드합니다.

4. Dim dso As New XMLDSOControl

5. Dim doc As IXMLDOMDocument

6. Set doc = dso.XMLDocument

7. doc.Load ("d:\test.xml")

8. 다음 코드로 DataAdapter를 사용하여 DSO를 새 Recordset 개체에 매핑합니다.

9. Dim da As New DataAdapter

10. Set da.Object = dso

Page 253: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 246 - 사용자 매뉴얼

11. Dim rs As New ADODB.Recordset

Set rs.DataSource = da

12. 데이터에 액세스합니다.

13. MsgBox rs.Fields("name").Value

이것으로 문자열 "Mark Hanson"이 표시됩니다.

Page 254: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 247 - 사용자 매뉴얼

Java에서 XML DOM 사용하는 방법?

IE5 버전의 MSXML.DLL 이 이미 설치되어 있어야 합니다. Visual J++ 6.0 의 Project

메뉴에서 Add COM Wrapper 를 선택하고 COM 개체 목록에서 "Microsoft XML 1.0"을

선택합니다. 그러면 필요한 Java 래퍼가 "msxml"이라는 새로운 패키지로 만들어집니다. 이렇게

미리 만든 Java 래퍼 는 다운로드하여 사용할 수도 있습니다. 이 클래스는 다음과 같이 사용할

수 있습니다.

import com.ms.com.*;

import msxml.*;

public class Class1

{

public static void main (String[] args)

{

DOMDocument doc = new DOMDocument();

doc.load(new Variant("file://d:/samples/ot.xml"));

System.out.println("Loaded " + doc.getDocumentElement().getNodeName());

}

}

코드 샘플은 sun 사의 예제 모음에서 3.8MB 테스트 파일인 "ot.xml"을 로드합니다. Variant

클래스는 Win32 VARIANT 원시 유형을 래핑하기 위해 사용됩니다.

노드를 검색할 때마다 실제로 새로운 래퍼를 가져오기 때문에 노드에서 포인터 비교를 사용할 수

없습니다. 따라서 다음 코드 대신

IXMLDOMNode root1 = doc.getDocumentElement();

IXMLDOMNode root2 = doc.getDocumentElement();

if (root1 == root2)...

다음을 사용하십시오.

Page 255: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 248 - 사용자 매뉴얼

if (ComLib.isEqualUnknown(root1, root2)) ....

.class 래퍼의 총 크기는 약 160KB 입니다. 그러나 W3C 규정을 완전히 준수하려면 IXMLDOM*

래퍼만을 사용해야 합니다. 다음 클래스는 이전의 IE 4.0 XML 인터페이스이며 msxml 폴더에서

삭제할 수 있습니다.

l IXMLAttribute*,

l IXMLDocument*, XMLDocument*

l IXMLElement*,

l IXMLError*,

l IXMLElementCollection*,

l tagXMLEMEM_TYPE*

l _xml_error*

그 결과 크기가 147KB 로 줄어듭니다. 또한 다음의 항목을 추가적으로 삭제할 수 있습니다.

• DOMFreeThreadedDocument

Java 응용 프로그램의 다중 스레드에서 XML 문서에 액세스합니다.

• XMLHttpRequest

XML DAV HTTP 확장을 사용하여 서버와 통신합니다.

• IXTLRuntime

XSL 스타일시트 스크립팅 개체를 정의합니다.

• XMLDSOControl

Page 256: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 249 - 사용자 매뉴얼

HTML 페이지에서 XML 데이터에 바인딩합니다.

• XMLDOMDocumentEvents

파싱 중 콜백을 반환합니다.

그 결과 크기가 116KB 로 줄어듭니다. 크기를 더 줄이려면 DOM 자체가 두 계층으로 존재한다는

사실을 염두에 두십시오. 핵심 계층은 다음으로 구성됩니다.

• DOMDocument, IXMLDOMDocument

• IXMLDOMNode*

• IXMLDOMNodeList*

• IXMLDOMNamedNodeMap*

• IXMLDOMDocumentFragment*

• IXMLDOMImplementation

• IXMLDOMParseError

Page 257: ReportExpress 사용자 매뉴얼 · 마이크로소프트사와 ... ReportExpress의 아키텍쳐 그림 1에서 보면, 보고서 뷰어가 데이터 연결을 요청할 때 데이터베이스(Oracle,

- 250 - 사용자 매뉴얼

보존해야 하는 DTD 정보는 다음과 같습니다.

• IXMLDOMDocumentType

• IXMLDOMEntity

• IXMLDOMNotation

XML 문서의 모든 노드는 IXMLDOMNode 유형이며 이 유형은 완전한 기능을 제공하지만 각 노드

유형에 대해 상위 래퍼가 존재합니다. 따라서, DOMDocument 래퍼를 수정하고 이러한 특정

유형을 변경하여 IXMLDOMNode 를 대신 사용하는 경우 다음의 모든 인터페이스도 삭제할 수

있습니다.

• IXMLDOMAttribute

• IXMLDOMCDATASection

• IXMLDOMCharacterData

• IXMLDOMComment

• IXMLDOMElement

• IXMLDOMProcessingInstruction

• IXMLDOMEntityReference

• IXMLDOMText

이를 삭제하면 크기가 61KB 로 줄어듭니다. 그러나 IXMLDOMElement 의 경우 getAttribute

및 setAttribute 메서드가 유용합니다. 다른 방법으로 다음을 사용할 수 있습니다.

IXMLDOMNode.getAttributes().setNamedItem(...)