연습문제

Download Report

Transcript 연습문제

Chapter 1
OZ Overview
Lesson 1. Introduction
Lesson 1. Introduction
Introduction
교육의 목적
본 교육 교재는 오즈 기본 교육 과정을 통해 오즈 쿼리 디자이너와 오즈 리포트
디자이너를 이용하여 기본적인 리포팅을 할 수 있는 사용자들에게 보다 높은
수준의 보고서 작성을 위한 고급 기능 사용 방법을 숙지시키고자 제작되었습니다.
이 교육을 통하여 보고서 개발자들은 다양한 데이터 가공을 이용하여 고급 보고서를
작성할 수 있는 방법을 자세히 배웁니다. 그리고, 오즈 어플리케이션 디자이너를
이용하여 웹 화면을 만드는 방법도 배우게 됩니다.
Chapter 2
다양한 데이터셋 작성
Lesson 1. Group Data Store
Lesson 2. FILE / HTTP / XML Store
Lesson 3. User Data Store
Lesson 4. Control Dataset
Lesson 1. Group Data Store
교육목표
Group Data Store(GDS) 이용하여 데이터셋 작성
GDS에서 사용되는 속성 이해
수직/수평 분할 이용하여 데이터셋 작성
Group Data Store
Group Data Store란?
다른 데이터 소스(데이터베이스, UDS, File/HTTP Store, XML DTD Store)에서
생성된 데이터셋을 다수의 데이터셋으로 분할하는 2차 데이터 소스로서
마스터-디테일 보고서에서 주로 사용됩니다.
1차 데이터 소스
2차 데이터 소스
Group Dataset 설정
Group Dataset 설정 따라하기
 원본 데이터셋 만들기
: ODBC를 이용하여 데이터셋 생성 (ex. SQL_product)
Select * from product
 Group Data Store를 이용하여 Data Source 생성
: 만들어 놓은 원본 데이터셋을 설정합니다.
Group Dataset 설정(계속)
마스터셋의 [Statement]에는 ‘true’를, 디테일셋의 [Statement]에는 마스터셋과
연관되는 조건을 다음과 같이 입력합니다.
< 마스터 그룹 데이터셋 – dept >
< 디테일 그룹 데이터셋 – emp >
Group Dataset 속성
GDS에서 설정되는 데이터셋의 속성은 다음과 같습니다.
 Consume Row : 원본셋의 데이터를 여러 개의 그룹 데이터셋으로 분할할 경우 한 행의
데이터를 모두 분할하고 다음행을 가져오는 시점에 ‘True’를 설정합니다.
하나의 Group Data Store 내의 데이터셋들 중에서 가장 하위의 데이터셋만
‘True’로 설정합니다.
 마스터셋 : 디테일셋의 속성 창에서 마스터 셋을 설정합니다.
수직분할
원본 데이터셋을 수직 분할하여 부서 데이터셋과 사원 데이터셋으로 나눌 수 있습니다.
코드
부서명
부서위치
10
ACCOUNTING
NEW YORK
CLARK
MANAGER
2572
10
ACCOUNTING
NEW YORK
KING
PRESIDENT
5500
10
ACCOUNTING
NEW YORK
MILLER
CLERK
20
RESEARCH
DALLAS
JONES
MANAGER
3123
20
RESEARCH
DALLAS
CHAN
ANALYST
3450
30
SALES
CHICAGO
ALLEN
SALESMAN
1600
30
SALES
CHICAGO
MARTIN
SALESMAN
1312
사원명
직급
데이터셋 분리 조건
 마스터 셋 (부서) – [Statement] : true [Consume Row] : false
 디테일 셋 (사원) – [Statement] : #부서 데이터셋.부서코드#==#원본 셋.부서코드#
[Consume Row] : true
급여
920
수평분할
원본 셋이 각 코드별로 보고서 양식에서 표현하는 형태가 다를 경우 다음과 같이 분할합니다.
이 경우에는 모든 데이터셋의 [Consume Row]속성을 ‘true’로 합니다.
상품코드
A
A
A
상품명
FLAT TV 19”
FLAT TV 21”
FLAT TV 25”
단가
상품코드
상품명
단가
A
FLAT TV 19”
500,000
A
FLAT TV 21”
800,000
A
FLAT TV 25”
1,500,000
…
…
500,000
…
800,000
1,500,000
< A 셋 > (조건) #원본셋.코드# == “A”
…
B
광폭 타이어
100,000
B
타이어 V
180,000
상품코드
상품명
단가
C
사과맛 음료수
500
B
광폭 타이어
100,000
C
포도맛 음료수
…
…
500
B
타이어 V
180,000
< B 셋 > (조건) #원본셋.코드# == “B”
Lesson 2. FILE / HTTP / XML Store
교육목표
CSV / XML 데이터를 이용하여 FILE Store 작성
CSV / XML 데이터를 이용하여 HTTP Store 작성
DTD나 XSD 를 이용하는 XML 파일을 데이터셋에서 이용
FILE Store (CSV Dataset)
CSV Dataset
일반 텍스트 파일(csv 형식 또는 txt 형식)을 데이터 소스로 활용하는 기능입니다.
<CSV Dataset >
FILE Store (XML Dataset)
XML Dataset
일반 텍스트 파일이나 데이터 소스로 활용하는 기능으로 CSV 형식이나 DTD
또는 XSD를 이용하지 않는 표준 XML 형식을 지원합니다.
<XML Dataset >
HTTP Store (CSV/XML Dataset)
HTTP Dataset
 데이터를 만드는 형태는 FILE Store와 같습니다.
단, 데이터 파일이 오즈 서버에 파일 형태가 아닌 웹 페이지에 존재합니다.
<운영시 사용될 파일>
http://oz.forcs.com/demo_kr/sales.asp
<디자인시 사용될 파일>
demo_httpstore.txt
XML Store
XML Store란?
오즈가 제공하는 XML 기반 데이터 소스로서, FILE/HTTP Store와는 달리
DTD나 XSD를 이용하는 XML 파일을 데이터 소스로 이용할 수 있습니다.
<DTD Store >
Lesson 3. User Data Store
User Data Store
UDS란?
JDBC/ODBC를 통해 데이터베이스로부터 데이터를 가져오는 것과 마찬가지로
사용자 애플리케이션에서 파일이나 XML, 벡터, 스트림, EJB 객체 등의 형태로
데이터를 받아 오즈의 데이터 소스로 변환해 주는 기능을 담당합니다.
UDS 호출
사용자는 UDS Java Interface에 따라 다양한 형태의 사용자 데이터를 오즈가 인식할
수 있는 결과셋 객체 형태로 가공하여 전달하는 방법을 구현해야 합니다.
User Data Store가 구현된 Class 파일이 잘 연결되면 다음과 같이 실행시킵니다.
Lesson 4. Control Dataset
교육목표
스크립트 쿼리를 이용하여 동적 SQL문 작성
만들어진 ODI 파일 다시 사용하기
스크립트 쿼리
 쿼리 디자이너의 매뉴얼 모드에서 스크립트를 이용할 수 있습니다.
 쿼리에 조건을 주어 동적인 실행문을 만들 수 있습니다.
 오즈 스크립트를 이용하여 조건문으로 SQL 문장을 만든 후 setQueryString 함수를
이용하여 작성된 SQL문을 설정합니다.
Dynamic Dataset
Dynamic 쿼리 리포트
 데이터에 대한 필드 정보 등이 운영 시점에 동적으로 결정되는 보고서
 동적으로 변하는 필드 정보로 인해 디자인 시점에 필드 정보를 설정할 수 없는 경우 이용
 쿼리 결과 데이터 필드를 ROWIDX, COLUMN, VALUE 세가지 고정 항목으로 저장
 보고서 형태는 리스트 형태로 제한
Dynamic Dataset
데이터베이스, UDS, FILE/HTTP Store, XML DTD
Store를 통해 가져온 데이터를 Dynamic 쿼리 리포트
를 구성하기 위한 형태로 변경해주는 2차 데이터셋
입니다.
Dynamic Dataset (계속)
Dynamic 쿼리 따라하기
< 쿼리 디자이너에서 USER Parameter를 이용하여 동적인 실행문을 생성 >
Dynamic Dataset (계속)
리스트로 표현하기
 Dynamic Dataset은 모든 쿼리 결과를
ROWIDX, COLUMN, VALUE 세가지 고정 항목으로 저장합니다.
 Dynamic Dataset이 생성하는 세가지 데이터 필드
 ROWIDX : 실제 데이터셋의 레코드 번호
 COLUMN : 실제 데이터셋의 필드 이름
 VALUE : 해당 필드의 데이터 값
 실행 시점에 이들 세가지 고정 항목으로부터
동적인 필드 정보를 찾아 재구성하는 기능을 제공합니다.
< Dynamic Dataset이 저장된 odi파일을
리포트 디자이너에서 호출한 결과>
Include ODI
이미 작성하여 서버 리파지토리 혹은 로컬 작업 폴더에 저장된 ODI 파일을 가져와
현재 편집중인 ODI 파일에 추가하여 사용할 수 있습니다.
※ 설정된 ODI 파일에 대한 경로인 OZ URL은 서버 리파지토리에 연결되어 있는 경우
[Repository Root]의 경로를 의미하며, 서버 리파지토리에 연결되어 있지 않은 경우
[Local Explorer]의 경로를 의미합니다.
연습문제
제공되는 Database의 Car_info와 Car_sales 테이블을 원본 데이터셋으로 하여Group
Dataset을 이용하고 “지역별/사업소별 영업 실적” 보고서를 만들어 봅니다.
실행문
[Master] Set1
true
[Detail1] Set2
#Set1.Region#==#Region#
[Detail2] Set3
#Set2.BranchOffice#==#BranchOffice#
조건
 DB 구조를 분석한 후 해당 SQL문을 생성합니다.
 중분류는 지역별로, 소분류는 지점별로 소계, 중계, 대계로 나타냅니다.
 다른 위치에 헤더를 표현하기 위해서 밴드의 감추기 속성과 스크립트를 이용합니다.
 밴드의 페이지 넘기기 속성을 이용하여 중분류별로 페이지를 구분합니다.
Chapter 3
리포트 디자이너 고급 활용
Lesson 1. 밴드와 라벨의 활용
Lesson 2. 컨테이너 컴포넌트 활용
Lesson 3. 입력 / 사용자 컴포넌트 이용
Lesson 1. 밴드와 라벨의 활용
교육목표
라벨과 밴드의 세부 속성 제어
노트 컴포넌트 사용
리전 컴포넌트 사용
Auto Size
다량의 텍스트를 나타낼 경우 텍스트의 길이에 따라 컴포넌트의 크기가 자동으로 변하는
옵션입니다.
 자동 줄바꾸기 : 텍스트가 긴 경우 컴포넌트 크기에 맞게 자동
으로 여러 라인으로 잘라서 출력합니다.
 클립핑 : 표시할 데이터의 양이 컴포넌트의 크기보다 클 경우
컴포넌트안에 들어가는 내용만 표시하도록 설정합니다.
자동크기조정 : 표시할 데이터의 양이 컴포넌트의 크기보다 큰
경우 컴포넌트를 자동으로 확대 조정하도록
설정합니다.
 자동크기 줄어듬 : 표시할 데이터의 양이 컴포넌트의 크기 보다
작은 경우 컴포넌트의 크기를 자동으로 축소
조정합니다. 단, [자동크기 조정] 속성이
’예’로 설정된 경우에만 유효합니다.
Auto Size (계속)
자동줄바꿈, 자동크기조정, 클리핑 속성을 다르게 적용해 봅니다.
※ 데이터 밴드위에 라벨이 있다면 밴드의 [자동크기조정]속성도 “예”로 합니다.
자동크기조정 마법사
우측 또는 아래에 위치한 라벨 사이의 자동크기조정을 설정하기 위한 마법사입니다.
 자동크기조정 [Enable]을 선택하면 해당 라벨의 데이터 양이 유동적일 경우 데이터 양에 따라
라벨의 크기는 자동으로 조정할 수 있게 합니다.
 컴포넌트의 크기가 조정될 경우 해당 컴포넌트의 오른쪽이나 아래쪽에 위치한 컴포넌트를
설정하여 자동으로 변화될 크기만큼 위치가 자동 조정되도록 합니다.
 특정 [라벨 컴포넌트]를 선택 후 마우스 오른쪽을 클릭하여 나타나는 메뉴 중 [자동크기조정]을
선택하여 실행합니다.
오즈 뷰어에서 라벨 편집
오즈 뷰어에서 편집을 가능하게 하고, 수정된 내용은 출력 또는 다른 형태의 파일로
저장할 때에도 적용 됩니다.
 이동 가능 : (오즈 뷰어에서) 컴포넌트를 이동할 수 있게
설정합니다.
 편집 가능 : (오즈 뷰어에서) 컴포넌트의 내용을 수정할 수
있도록 설정합니다.
 속성변환 가능 : (오즈 뷰어에서) 컴포넌트의 속성을 변경
할 수 있도록 설정합니다.
라벨의 프린트 속성 제어
 Visible : (오즈 뷰어에서) 해당 컴포넌트를 출력할지 여부
를 설정합니다.
※ visible이 ‘false’로 설정된 라벨 컴포넌트도 인쇄가능 속성
이 ‘true’인 경우는 프린터로 인쇄됩니다.
 인쇄가능 : 해당 컴포넌트를 프린터로 인쇄하거나 파일로
저장시 포함할지 여부를 설정합니다.
 인쇄시 & 포함 : 데이터에 ‘&’가 들어있는 경우 프린터 제어
코드로 인식되어 ‘&’로 인쇄되지 않습니다.
내부적으로 &를 인쇄하기 위해 &&로 변환
할 때 사용합니다.
라벨의 고급 속성
 Ref.Copy :
오즈 뷰어를 통해 보고서 실행시 밴드 위의 여러
라벨이 반복해서 생성될 때 디자인시 만든 원본 라벨을
복사하여 여러 개의 라벨들이 만들어집니다.
이때 복사된 라벨들이 같은 속성을 공유할지 여부를
설정합니다. (Ref.Copy를 ‘예’로 하면 속성을 공유
하기 때문에 메모리 사용을 줄일 수 있습니다. )
 CRLF를 LF로 변환 :
Windows의 Newline 문자열인 CRLF를 UNIX와 JAVA의
Newline 문자열인 LF로 변환할 때 사용합니다.
라벨의 표시 형식 제어
라벨에 표현되는 텍스트의 표시 형식을 지정합니다.
 스크립트로 라벨 속성 제어(표시형식)
 문자 표현 (NULL일 경우 숫자형으로 서식을 주게 되면 Pattern Error)
setattr("format",“STRING");
 정수를 천의 자리마다 , 로 부분
setattr("format","#,###");
 소수 두 자리까지 표현하고 소수 첫번째 자리와 일의 자리가 0 일 경우 반드시 0으로 표현
setattr("format","#,##0.0#");
 음수와 양수의 표현
setattr("format","△#,###;▽#,###");
 특별형
setattr("format","$ #### ");
setattr("format","Dollar ####");
밴드의 속성 제어
마스터-디테일 보고서에서 밴드 감추기 이용
 감추기 : 밴드 활성화/비화설화 및 보이기/감추기
 페이지 넘기기 : 해당 밴드의 데이터를 출력한 후 다음 페이지로 넘기도록 설정
<중분류의 데이터 밴드 감추기 속성이 “아니오”와 “예”를 각각 적용 >
더미 밴드의 활용
 더미 밴드를 이용하여 마지막 페이지의 라벨을 테이블 형태로 채우기
 데이터 밴드의 더미(풋터) 속성을 1로 놓아 더미밴드를 생성
 반복 횟수와 페이지 끝에서 멈춤 속성으로 더미 밴드를 제어
노트 컴포넌트
데이터베이스의 Binary, BLOB, Long Varchar, CLOB 등과 같은 타입으로 저장된
대용량 텍스트 데이터를 보고서에 삽입하고자 할 때 사용합니다.
데이터 가져오기
 데이터 형태 – ‘일반’
텍스트 : http://oz.forcs.com/demo_kr/largetext.txt 또는 file:/D:/test/오즈설치.txt
 데이터 형태 – ‘데이터’
필드명 : content (데이터 필드명 설정)
노트 컴포넌트의 너비 조정
 노트의 자동 줄바꾸기 옵션
 자동 줄바꾸기가 ‘예’인 경우 : 디자인시 설정한 노트 컴포넌트의 너비대로 자동 줄바꾸기가
수행되어 아래로 자동 크기 조정이 수행
 ‘아니오’인 경우 : 노트의 컴포넌트가 용지의 오른쪽 끝까지 확장된 상태에서 자동 줄바꾸기가
적용
연습문제
부서별로 장비의 내용을 출력하고, 그룹별로 건수를 나타내는 보고서를 작성합니다.
방법
 FileStore를 이용하여 원본 데이터를 만듭니다.
 GDS를 이용하여 부서별로 마스터와 디테일 셋으로 데이터셋을 나눕니다.
 스크립트를 이용하여 그룹별 소계를 나타냅니다.
into cnt;
cnt = totalRowCount("buseo_jangbi.detail");
::totalCnt = ::totalCnt + cnt;
setattr("caption",(string)cnt + " 건");
 써머리 밴드의 “새 페이지 무시” 속성을 이용하여 전체 건수를 표현합니다.
setattr("caption",(string)::totalCnt + " 건");
Lesson 2. 컨테이너 컴포넌트 활용
교육목표
크로스탭으로 다양한 형태 작성
차트의 활용
Drill-Down 이용한 차트 구현
크로스탭의 고급 옵션 (1)
각 필드에서 sum,avg,max,min 등을 선택할 수 있으나 <shift 키>를 이용하여 여러 선택
값을 같이 나타낼 수 있습니다.
크로스탭의 고급 옵션 (2)
상하위 피봇이 같은 값일 때 합치기
크로스탭 마법사의 [고급 옵션] 버튼을 이용하면 다른 두 피봇(데이터 필드)의 값이
같을 때 반복되지 않도록 라벨을 합쳐서 보이도록 합니다.
크로스탭의 고급 옵션 (3)
데이터가 한건일 때 소계 출력 생략
선택한 기준 필드에 대한 데이터 건수 (그룹핑한 건수)가 한건일 때 해당 기준 필드
의 소계 출력을 생략합니다.
크로스탭의 고급 옵션 (4)
그룹핑한 건수가 한건일 때 해당 기준 필드의 소계 출력을 생략과 상하위 피봇의 값이
같은 경우 셀 합치기를 하여 아래와 같은 보고서 작성이 가능합니다.
Drill-Down
스크립트 창의 [링크 마법사] 버튼을 이용하여 다음과 같이 Drill-Down 스크립트를 자동
생성시킵니다.
차트를 이용한 Drill-Down 구현
파이 차트를 이용한 첫번째 폼의 Drill-Down을 이용하여 막대 차트로 표현되는 두번째
폼을 호출합니다.
이용되는 ODI 만들기
Drill_Down.odi
select country, sum(Money) as mon from sale_report
group by country
Drill_Down_Detail.odi
Select Country, State as City, Money from sale_report
where country = '#OZParam.country#'
차트를 이용한 Drill-Down 구현(계속)
차트 마법사를 이용하여 차트 구현
< Drill-Down.ozr >
< Drill-Down_Detail.ozr >
차트를 이용한 Drill-Down 구현(계속)
차트의 스크립트 편집창에서 [링크 마법사] 버튼을 클릭하면 다음과 같이 Drill-Down 스
크립트가 자동으로 생성됩니다.
자동으로 생성된 스크립트
setLinkServer("127.0.0.1",8003,"07DRILL_DROWN_DETAIL.ozr");
setLinkParam("country","미국");
setLinkOption("odi.odinames","07DRILL_DROWN_DETAIL");
setLinkOption("odi.07DRILL_DROWN_DETAIL.pcount","1");
setLinkOption("odi.07DRILL_DROWN_DETAIL.args1","country=미국");
연습문제
파이 차트를 이용하여 “국가별 세일즈 현황 보고서”를 만들고, 해당 국가를 클릭하면
상세한 현황이 나오도록 Drill-Down 기능을 이용하여 보고서를 구성합니다.
SQL문
[Drill_Down.odi]
select country, sum(Money) as mon from sale_report
group by country
[Drill_Down_Detail.odi]
select country, state as city, money from sale_report
where country = '#OZParam.country#'
조건
 DB 구조를 분석한 후 해당 SQL문을 생성합니다.
 파이 차트의 Chart_tooltip_rowpivot 값을 받아 Drill-Down이 되도록 스크립트를
적용합니다.
 패러미터로 국가의 값을 받아 세부 내용을 나타내는 두번째 보고서를 구현합니다.
Lesson 3. 입력 / 사용자 컴포넌트
교육목표
입력 컴포넌트 이용
사용자 컴포넌트에 대한 이해
입력 컴포넌트
오즈 뷰어에서 버튼, 라디오 버튼, 체크 박스, 텍스트 박스, 콤보 박스 등을 이용하여
사용자가 입력한 값을 받아 웹 애플리케이션으로 값을 전달하고자 할 때 사용합니다.
 버튼 : 오즈 뷰어에서 타 입력 컴포넌트를 통해 입력 받은 값들을 외부 사용자 애플리케이션에
전달합니다. (버튼의 [URL] 속성에 해당 애플리케이션의 URL을 입력하며 POST/GET 방식을
지원합니다.)
 라디오 버튼 : 여러 개를 하나의 그룹으로 묶고 버튼들은 [Group Name] 속성에 같은 이름을 설정합니다.
(그룹안의 라디오 버튼은 반드시 하나만 체크될 수 있습니다.)
 체크 박스 : 선택되지 않은 체크 박스의 데이터도 ‘true’,’false’ 값으로 모두 전송합니다.
(체크 박스는 라디오 버튼과 달리 그룹 개념이 없이 각각 동작합니다.)
 텍스트 박스 : 텍스트 박스는 속성 중의 [데이터 형태]를 데이터로 설정함으로써 데이터셋과 연동
가능합니다. (속성에서 해당 데이터셋의 [필드 이름]을 설정할 수 있습니다.)
 콤보 박스 : 디자인시 Newline으로 구분된 아이템을 리스트 형태로 보여줍니다.
([Seleced Idx] 속성으로 바인딩시 최초에 선택되어질 아이템의 index를 설정할 수 있습니다.)
입력 컴포넌트(계속)
입력 컴포넌트 활용 예제
버튼
체크 버튼
라디오 버튼
콤보 박스
텍스트 박스
DESCRITION
[SEND] 버튼을 누르면 오즈 뷰어에 현재 페이지의
입력 컴포넌트 값이 설정된 URL에 해당하는
사용자 애플리케이션으로 전달됩니다.
사용자 컴포넌트
사용자 컴포넌트를 추가/개발하여 라벨의 그리기 타입으로 이용 가능합니다.
입력 컴포넌트 활용 예제
‘사용자’로 설정
임의의 우편번호 입력
호출하고자 하는 클래스명 입력
연습문제
입력 컴포넌트 활용 예제를 구현하여 Customer Profile 리포트를 작성합니다.
 조건
 입력 컴포넌트를 이용하여 보고서
디자인을 다음과 같이 합니다.
 값을 받는 JSP 또는 ASP를
구현합니다.
 DB에 연동하여 데이터 값을
입력합니다.
Chapter 4
오즈 리포트 뷰어의 제어
Lesson 1. 오즈 뷰어의 실행 형태 조정
Lesson 2. 오즈 이벤트 사용
Lesson 3. 대용량 데이터 처리 옵션
Lesson 1. 뷰어 실행 형태 제어
교육목표
태그를 이용하여 뷰어의 세부 제어
초기화 스크립트 사용
다양한 형태의 보고서 출력
OZCommand 함수 사용법 숙지
대용량 데이터 호출시 효과적인 뷰어 태그 사용
오즈 뷰어 실행 형태 제어
Object 태그 활용
 실행 형태
 Preview : 뷰어 윈도우상에서 보고서 미리보기
 Print : 보고서 미리보기 없이 프린터로 직접 인쇄하기
 Export : 보고서 미리보기 없이 다양한 파일 형태로 직접 저장하기
 보고서 미리보기 없이 프린터로 직접 인쇄하기
 프린트 옵션 창은 띄우기
<param name="viewer.mode" value="print">
 프린트 옵션 창 없이 바로 프린트 하기
<param name="viewer.mode" value="print">
<param name="print.mode" value="silent">
 보고서 미리보기 없이 다양한 파일 형태로 직접 저장하기
<param name="viewer.mode" value="export">
 동시 수행 가능
<param name="viewer.mode" value=“print, export, preview">
오즈 뷰어 호출시 배경 옵션 제어
 오즈 뷰어의 툴바 기능을 자바 스크립트를 이용하여 제어할 수 있습니다.
(Object 호출 태그 밖의 특정 웹 페이지 소스에 위치시켜 뷰어의 툴바가 보이지 않아도
오즈 뷰어 옵션 제어 가능)
<input type="button" value="open" onClick="ozviewer.script('open')">
<input type="button" value=“export" onClick="ozviewer.script(‘export')">
<input type="button" value="print" onClick="ozviewer.script('print')">
<input type="button" value=“savedm" onClick="ozviewer.script(‘savedm')">
<input type="button" value="navigator" onClick="ozviewer.script('navigator')">
<input type="button" value="vhome" onClick="ozviewer.script('vhome')">
<input type="button" value="vprev" onClick="ozviewer.script('vprev')">
<input type="button" value="vnext" onClick="ozviewer.script('vnext')">
<input type="button" value="vend" onClick="ozviewer.script('vend')">
<input type="button" value="hhome" onClick="ozviewer.script('hhome')">
<input type="button" value="hprev" onClick="ozviewer.script('hprev')">
<input type="button" value="hnext" onClick="ozviewer.script('hnext')">
초기화 스크립트
 오즈 뷰어의 여러 옵션 중 HTML 태그로 값을 설정하기에는 보안상 문제가 되는 옵션들
이 있을 경우 이를 폼 파일의 스크립트로 처리하여 HTML 소스상에서 수정할 수 없도록
합니다.
※ 초기화 스크립트로 설정된 호출 태그가
우선순위가 높습니다.
<param name="toolbar.all" value=“true">
<param name="toolbar.save" value=“false">
<param name="toolbar.refresh" value=“false">
<param name="connection.refreshperiod"
value=“00:00:30">
[Jsp/asp/html등에서 Object 태그안에서 처리]
setReportOption("toolbar.all","true");
setReportOption("toolbar.save","false");
setReportOption("toolbar.refresh","false");
[ozr 파일에 저장되므로 소스가 보이지 않음]
setReportOption("connection.refreshperiod","00:00:30");
멀티폼 보고서 만들기
 하나의 뷰어 안에서 보고서 트리를 이용하여 여러 보고서를 조회할 때 사용합니다.
보고서명과 개수는 오즈 뷰어의 왼쪽 트리에서 확인할 수 있습니다.
<호출 방법의 예>
<object id="ozviewer" width = "800" height = "600"
classid="CLSID:64DA633F-E73B-4344-83BF-48483346CD53">
<param name="viewer.namespace" value="companyname\ozviewer">
<param name="connection.reportname" value="carsales.ozr">
<param name="connection.server" value="127.0.0.1">
<param name="connection.port" value="8003">
<param name="viewer.ismultidoc" value="true">
<param name="viewer.childcount" value="2">
<param name="child1.connection.server" value="127.0.0.1">
<param name="child1.connection.port" value="8003">
<param name="child1.connection.reportname" value="orders.ozr">
<param name="child2.connection.server" value="127.0.0.1">
<param name="child2.connection.port" value="8003">
<param name="child2.connection.reportname" value= "salesemployee.ozr">
</object>
Lesson 2. 오즈 이벤트 사용
교육목표
오즈 뷰어의 실행 결과를 이용하는 방법 이해
OZCommand 함수 사용법 숙지
오즈 이벤트 사용(OZCommand)
오즈 뷰어에서 어떤 액션이 완료된 시점에 해당 액션이 완료되었음을 알려 주기 위해
자바 스크립트로 이벤트를 보낼 수 있습니다.
 OZCommand는 이벤트 함수를 통합한 이벤트 전달 함수로 여러 종류의 이벤트를
모두 처리합니다.
 code와 args라는 두개의 인자값을 가지고 있습니다.
 code값에는 이벤트 종류를 구분하기 위해 ‘post’, ‘progress’, ‘print’, ‘export’ 중 하나
가 전달됩니다.
 args값에는 각 이벤트별로 기존 함수(OZXXXCommand)의 인자값들을 ‘;’로 구분
해
서 전달됩니다. OZPostCommand(cmd, msg)
오즈 이벤트 사용(OZPostCommand)
 오즈 뷰어가 브라우저에 뜨기 직전에 실행됩니다.
: Close 등의 명령어(층)를 넣어 실행된 브라우저를 종료할 수도 있습니다.
<script language= "JavaScript" for="OZViewerControl" event="OZPostCommand(cmd, msg)">
alert(command);
alert(msg);
</script>
<OBJECT id = "OZViewerControl" CLASSID="CLSID:64DA633F-E73B-4344-83BF48483346CD53" width=“800" height=“600">
<param name="connection.servlet" value="http:// 127.0.0.1:8088/oz30/server">
<param name="connection.reportname" value="chart_rotation_edit.ozr">
<param name="viewer.postcommand" value="command;messages">
</object>
 오브젝트 태그 ‘id’ 속성값은 스크립트의 ‘for’ 속성값과 동일해야 합니다.
 스크립트의 ‘event’ 속성값은 위의 표에서와 같이 오즈의 각 이벤트에 해당하는
함수명을 명시합니다.
오즈 이벤트 사용(OZPrintCommand)
 오즈 뷰어에서 프린트된 후 정보를 OZPrintCommand 함수로 보내줍니다.
<script language="JavaScript"
for="OZViewerControl" event="OZPrintCommand(msg, code, reportname, printername,
printcopy, printrange, username)">
alert('reportname='+reportname);
alert('printername='+printername);
alert('printcopy='+printcopy);
alert('printrange='+printrange);
alert('username='+username);
alert('code='+code);
alert('msg='+msg);
if(code=="1"){ alert(msg);}
if(code=="0"){ alert(msg);}
</script>
<OBJECT id = "OZViewerControl" CLASSID="CLSID:64DA633F-E73B-4344-83BF48483346CD53" width=“800" height=“600">
<param name="connection.servlet" value="http://127.0.0.1:8088/oz30/server">
<param name="connection.reportname" value="chart_lotation_edit.ozr">
<param name="print.command" value="true">
</OBJECT>
오즈 이벤트 사용(OZProgressCommand)
 오즈 뷰어에서 처리되는 작업의 code값을 OZProgressCommand로 보내줍니다.
<script language = "JavaScript" for="OZViewerControl" event="OZProgressCommand(code,
args)">
alert(code);
alert(args);
</script>
<OBJECT id = "OZViewerControl" CLASSID="CLSID:64DA633F-E73B-4344-83BF48483346CD53" width=“800" height=“600">
<param name="connection.servlet" value="http://127.0.0.1:8088/oz30/server">
<param name="connection.reportname" value="chart_lotation_edit.ozr">
<param name="viewer.progresscommand" value="true">
</OBJECT>
오즈 이벤트 사용(OZExportCommand)
 오즈 뷰어에서 익스포트된 후 정보를 OZExportCommand 함수로 보내줍니다.
<script language="JavaScript"
for="OZViewerControl" event="OZExportCommand(code,path,filename)">
alert("path="+path);
alert("filename="+filename);
if(code=="1"){
alert("익스포트 성공");
}
if(code=="0"){
alert("익스포트 실패");
}
</script>
<OBJECT id = "OZViewerControl" CLASSID="CLSID:64DA633F-E73B-4344-83BF48483346CD53" width=“800" height=“600">
<param name="connection.servlet" value="http://127.0.0.1:8088/oz30/server">
<param name="connection.reportname" value="chart_lotation_edit.ozr">
<param name="export.command" value="true">
</OBJECT>
Lesson 3. 대용량 데이터 처리 옵션
Preview
 보고서 데이터가 클 경우 메모리와 디스크를 적절히 이용하여 미리보기시에
뷰어의 뜨는 속도를 제어할 수 있습니다.
<OBJECT id="ozviewer" width = "800" height = "600" CLASSID="CLSID:64DA633F-E73B4344-83BF-48483346CD53">
<param name="connection.servlet" value="http://127.0.0.1:8088/oz30/server">
<param name="connection.reportname" value="대용량_10만.ozr">
<param name="odi.odinames" value="대용량_10만">
<param name="connection.pageque" value="1">
<param name="odi.대용량_10만.clientdmtype" value="FILE">
<param name="odi.대용량_10만.serverdmtype" value="MEMORY">
<param name="odi.대용량_10만.fetchtype" value="concurrent">
</object>
<서버에서 데이터 모듈을 생성하면서 동시에 뷰어로 전송하는 병렬 수행의 예>
Direct Print
 보고서 데이터가 클 경우 메모리와 디스크를 적절히 이용하여 프린트의 스풀을
이용하면서 출력할 수 있습니다.
<OBJECT id="ozviewer" width = "800" height = "600" CLASSID="CLSID:64DA633F-E73B4344-83BF-48483346CD53">
<param name="connection.servlet" value="http://127.0.0.1:8088/oz30/server">
<param name="connection.reportname" value="대용량_10만_1.ozr">
<param name="odi.odinames" value="대용량_10만">
<param name="viewer.mode" value="print">
<param name="print.mode" value="silent">
<param name="print.printbypage" value="true">
<param name="odi.대용량_10만.clientdmtype" value="FILE">
<param name="odi.대용량_10만.serverdmtype" value="MEMORY">
<param name="odi.대용량_10만.fetchtype" value="concurrent">
</object>
<서버에서 데이터 모듈을 생성하면서 동시에 프린터 스풀로 전송하는 병렬 수행의 예>
Chapter 4
오즈 애플리케이션 디자이너 사용
Lesson 1. 기본 컴포넌트 제어
Lesson 2. 복합 컴포넌트 제어
Lesson 3. Data Action
Lesson 4. 오즈 리포트 연동
Lesson 5. 애플리케이션 뷰어 호출
Lesson 1. 기본 컴포넌트 제어
교육목표
버튼, 텍스트박스 등 단순 컴포넌트들의 속성 및 스크립트 확인
Event와 Script 사용하기
Component - Controls
Button
CheckBox
RadioButton
ReportButton
ComboBox
CheckListBox
ListBox
TreeView
Component - Controls
TextBox
NumericUpDown
MaskTextBox
Label
PictureBox
ProgressBar
HTMLView
Component - Controls
ActiveXControl
CustomControl
ReportViewer
DateTimePicker
MonthCalendar
Splitter
Component - Invisibles
Invisible Component
 Board에 포함되지 않아 보이지는 않지만 내부적으로 사용되는 컴포넌트입니다.
 Invisibles 창에서 확인할 수 있습니다.
Timer
ContextMenu
ToolTip
Component – Container Controls
Container Component
 여러 컴포넌트를 그룹을 지을 때 사용되어집니다.
 해당 컴포넌트 내에 포함된 모든 컴포넌트에 대한 Enable, Visible 속성을
제어할 수 있습니다.
Panel
GroupBox
TabControl
Events & Script
Event 선택
 각 컴포넌트에 Event를 선택하고 스크립트를 작성합니다.
 JavaScript에서 지원하는 기본 기능과 language Spec이 사용됩니다.
OnInitialize
Initialize 직전에 발생
OnPostInitialize
Initialize 가 끝난 후 발생
OnPreFinalize
Finalize 직전에 발생
OnClick
아이템이 클릭된 후에 발생
OnSelectedIndexChanged
선택된 item 이 변경된 후 발생
OnItemCheckChanged
아이템의 check 상태가 변경된 후 발생
OnItemSelected
아이템이 선택된 후 발생
OnSelectedNodeChanged
선택된 node 가 변경된 후 발생
연습문제
과제
여러 컴포넌트를 이용하여 회원 가입 양식 화면을 만듭니다.
조건
 TextBox, Button, Combobox, CheckBox, RadioButton 을 사용합니다.
 다른 Board를 ShowDialog 함수를 이용하여 우편번호 검색 창을 띄웁니다.
var b = Form1.ShowDialog("Dialog_Form2", "Title", true, 100, 100);
 “등록” 버튼을 클릭하여 사용자의 Action 결과를 받아 옵니다.
Lesson 2. 복합 컴포넌트 제어
교육목표
Table, Grid, CrossTab, Chart 컴포넌트의 구현
복합 컴포넌트의 마법사 사용방법
Component – Table(1)
테이블의 데이터셋 지정
 Repository창에서 사용될 ODI파일을 더블클릭 하여 선택합니다.
 DataInfos창에서 선택된 ODI파일의 DataSet명, 필드정보, 파라미터를
확인할 수 있습니다.
 테이블 속성창의 DataSource부분에서 ODIKey와 DataSet을 지정합니다.
<Repository창에서 odi호출>
<DataInfos에서 호출된 odi정보 확인>
<테이블에 데이터 셋 지정>
Component – Table(2)
Table Wizard
 테이블마법사을 이용하여 나타낼 컬럼을 선택합니다.
Component – CrossTab(1)
CrossTab 데이터셋 설정
 ODI파일 호출은 테이블 컴포넌트 사용과 동일합니다.
 데이터셋을 Drag&Drop하여 크로스탭의 DataSet의 속성값을 지정할 수 있습니다.
Drag&Drop
크로스탭 컴포넌트
DataSet이 지정됨
<Repository창에서 odi호출>
<DataInfos에서 호출된 odi정보 확인>
<크로스탭에 데이터 셋 지정>
Component – CrossTab(2)
CrossTab Wizard
 데이터 필드를 열,행,값에 Drag&Drop하여 지정합니다.
Component – Grid(1)
Grid를 이용하여 동적 표현
 표시할 Data를 Grid 각각의 셀에 표시하는 Script Coding 합니다.
Grid는 Table와 달리 Wizard 기능이 없어 별도의 코딩이 필요함
GetCell(rowIndex, columnIndex)로 Cell 객체를 얻어 .Value 속성으로 데이터 표시
 Grid Title, Cell등의 모양을 디자인하는 Script Coding 합니다.
Grid는 Table와 달리 Wizard 기능이 없어 별도의 코딩이 필요함
GetCell(i,j), .GetTitle(j)로 Title 객체를 얻어 Text와 BackColor등 설정
Component – Grid(2)
엑셀과의 연관성
 Grid내의 데이터를 엑셀로 Copy & Paste가 가능합니다.
엑셀의 데이터를 오즈 어플리케이션 Grid에 복사가 가능하므로, DB에 데이터를
Insert할 때에 기존 데이터를 쉽게 이용할 수 있습니다.
Component – Chart(1)
Chart Wizard
 차트 마법사를 이용하여 X,Y축에 필드를 지정하고 차트의 옵션을 줍니다.
Component – Chart(2)
Chart Wizard – Y축
오즈 파라미터 이용하여 조회
ODI 파라미터 Refresh
 입력 받은 값을 이용하여 조회 버튼 등으로 차트, 크로스탭, 테이블 등에 나타난 값을 조회합니다.
var datamanager = _GetDataManager();
var datamodule = datamanager.GetDataModule("ozcar"); // odi 이름
var dataset = datamodule.GetDataSet("SQL_query");
//GetDataSet("SQL_query", null, true);
//true값이면 무조건 DB접근하여 Refresh Data
datamodule.UpdateOZParam("FromDate", "00-01-01");
datamodule.UpdateOZParam("ToDate", "00-01-31");
dataset.RefreshDataSet();
// 데이터 셋 이름
연습문제
제공되는 DB와 SQL을 이용하여 “지역별 제조 회사별 차량 판매 현황”을 크로스탭과
차트를 이용하여 화면을 구성합니다.
CrossTab & Chart의 데이터셋
ComboBox의 데이터셋
SELECT a.Region, a.BranchOffice,
SELECT OrderDate
a.Quantity, a.TotalAmount,
b.Maker, b.CarName
FROM Car_info a, Car_sales b
where a.CarID = b.CarID and
a.OrderDate > '#OZParam.FromDate#'
and a.OrderDate < '#OZParam.ToDate#'
order by a.Region, a.BranchOffice
FROM Car_info
WHERE OrderDate < '00-05-31'
ORDER BY OrderDate ASC
Lesson 3. Data Action
교육목표
DB에 데이터를 삽입, 삭제, 변경 하기
오즈 파라미터를 이용하여 동적으로 Data Refresh하기
QueryDesigner에 DML입력
행 삽입/삭제/변경
 데이터 셋을 만들고, 해당 데이터 셋의 오른쪽 마우스를 이용
Table Component 이용한 Insert, Update, Delete
Table 이용하기
 작성 방법
순서1. 테이블 마법사를 이용하여 필드를 선택하고, #OZDeleteFlag# 도 추가 합니다.
순서2. 마법사의 오른쪽 속성창에서 모든 라벨에 대하여 ColumeEditable 속성을
“True” 로 합니다.
순서3. 테이블의 속성 중 AllowInsert AllowDelete AllowUpdate 을 모두 True 로 지정합니다.
순서4. 버튼 등에 Onclick 이벤트에 CommitQueuedActions() 함수를 이용하는
스크립트를 추가합니다.
var result = Table1.CommitQueuedActions();
(※ 참고 : 위의 Method는 추가된 기능입니다. 지원되지 않는 버전의 디자이너가 있습니다.)
Table Component 이용한 Insert, Update, Delete
Table의 CommitQueuedActions 함수
 특징
 컴포넌트에 보여지는 데이터의 값들을 스크립트로 읽어 오지 않아도
Table컴포넌트에 표시된 데이터를 바로 Insert / Update / Delete 할 수 있습니다.
 테이블 마법사에서 #OZDeleteFlag#를 이용하여 만들어진 체크 박스의 칼럼에
체크를 하고, CommitQueuedActions() 함수가 적용된 버튼 등을 사용하면 전체
행 삭제가 가능합니다.
연습문제
고객 정보를 추가, 삭제, 수정하는 화면을 만듭니다.
조건
 CUSTOMER 테이블을 이용하여 쿼리를 만듭니다.
 테이블 컴포넌트를 이용하여 화면을 만듭니다.
 버튼에 다음과 같이 스크립트를 적용합니다.
var result = Table1.CommitQueuedActions();
if(result.length > 0){
_MessageBox(result);
}
Lesson 4. 오즈 리포트 연동
교육목표
OZApplication뷰어에서 ReportControl을 이용하여 오즈리포트를 띄우기
ReportButton을 이용하여 프린트하기
ReportControl
오즈 리포트 뷰어 띄우기
 일반 버튼을 이용하여 리포트 호출
 ReportControl의 OnPreApplyReport 이벤트에 리포트 관련 파라미터 추가
ReportButton
오즈 리포트 출력
 리포트 뷰어를 띄우지 않고 바로 출력을 해야 할 경우 사용합니다.
 ReportButton의 OnPreApplyReport 이벤트에 리포트 관련 파라미터를 추가합니다.
연습문제
ReportControl과 ReportButton을 이용하여 리포트를 띄우고, 출력합니다.
조건
 텍스트 박스로 조회 조건을 입력받습니다.
 일반 버튼을 이용하여 ReportControl과 연동합니다.
 ReportControl에 리포트 호출 관련 스크립트를 적용합니다.
 ReportButton을 이용하여 리포트를 출력합니다.
Lesson 5. 애플리케이션 뷰어 호출하기
교육목표
브라우저에서 오즈 애플리케이션 뷰어 호출 방법 숙지
OZ Application Viewer 설치
Client PC에 어플리케이션 뷰어가 설치 되도록 하는 설치 태그
<OBJECT id=ZTransferX style="LEFT: 0px; TOP: 0px"
codeBase=http://127.0.0.1/ozapplication/ZTransferX.cab#version=1,0,2,4
height=0 width=0 classid="CLSID:C7C7225A-9476-47AC-B0B0-FF3B79D55E67"
VIEWASTEXT>
<PARAM NAME="download.Server" VALUE="http://127.0.0.1/ozapplication">
<PARAM NAME="download.Port" VALUE="80">
<PARAM NAME="download.Instruction" VALUE="OZAViewerOCX.idf">
<PARAM NAME="install.Base" VALUE="<PROGRAMS>/Forcs">
<PARAM NAME="install.Namespace" VALUE=“companyName">
</OBJECT>
OZ Application Viewer 호출
OZA 호출 태그
 오즈 서버 타입이 Daemon 인 경우 연결부 Tag 생성
<param name="repository_agent.ozserver.server" value=“127.0.0.7">
<param name="repository_agent.ozserver.port" value="8003">
 오즈 서버 타입이 Servlet 인 경우 연결부 Tag 생성
<param name="repository_agent.ozserver.servlet" value="http://127.0.0.1:8080/oz/server">
<OBJECT bgcolor="#FFFFFF" width = "800" height = "600" ID="OZAppViewer"
CLASSID="CLSID:907A00F3-7390-4EF2-931B-360546587804" VIEWASTEXT>
<param name="repository_agent.type" value="FROM_OZSERVER">
<param name="repository_agent.ozserver.server" value=“127.0.0.1">
<param name="repository_agent.ozserver.port" value="8003">
<param name="ozadoc.path" value=“sample.oza">
</OBJECT>