Presentation is loading. Please wait.

Presentation is loading. Please wait.

파워빌더 교육 교재 V12 정보전략팀장 왕희복 010 – 5670 -0005.

Similar presentations


Presentation on theme: "파워빌더 교육 교재 V12 정보전략팀장 왕희복 010 – 5670 -0005."— Presentation transcript:

1 파워빌더 교육 교재 V12 정보전략팀장 왕희복 010 –

2 목 차 과정의 이해 2. 파워빌더 구성의 이해 3. DB페인터의 상세 사용법, 트랜잭션의 이해 4. Windows의 이해
목 차 과정의 이해 - 파워스크립트 개요 - Naming Rule - 이벤트와 함수 - Date 관련함수 - 숫자 관련 함수 - File 관련함수 - ini 파일 관련 함수 - Resistry 관련함수 - Null과 EmptyString의 차이 2. 파워빌더 구성의 이해 - user object - Non Visual Object - Visual Object - User Object의 상속 3. DB페인터의 상세 사용법, 트랜잭션의 이해 - SQL Anywhere 데이터베이스 만들기 - 시스템 테이블 - Object Layout - Extended Attribute - 테이블 관리하기 - Transaction 4. Windows의 이해 - 윈도우 오브젝트 - 윈도우 타입 - 윈도우 프로퍼티 - 윈도우 컨트롤 - 메뉴의 이해 - 메뉴의 작성 - 메뉴아이템 이벤트와 함수 5. 객체의 이해 - 파워빌더의 객체지향(OOP) 지원 - 파워빌더의 객체 - 상속 6. 윈도우 주요이벤트, 함수, 윈도우 계층의 이해 - 윈도우의 이벤트와 함수 - 윈도우 주요이벤트 - 주요 함수 - 윈도우 계층구조

3 7. 파워스크립트 상세설명 8. User Object의 이해/사용 9. DW의 이해 10. DW 페인터의 구성
- 파워스크립트 개요 - Naming Rule - 이벤트와 함수 - Data 관련함수 - 숫자 관련함수 - File 관련함수 - ini 파일 관련함수 - Resistry 관련함수 - Null과 EmptyString의 차이 8. User Object의 이해/사용 - User object - Non Visual Object - Visual object - User object의 상속 9. DW의 이해 - 데이터 윈도우 개요 - DW객체와 DW컨트롤의 구분 – Object할당 - Presentation Style - DataSource - DDDW(Drop Down Data Window) - DDDW의 활용 – Getchild() - 데이터스토어란? 10. DW 페인터의 구성 - Design Painter의 구조 - Design Painter 상세 - DW페인터의 컨트롤 - Data object의 메뉴 11. DW객체 주요속성의 이해 - DW Painter의 속성창 - Data object Column의 속성설정 - Edit Style - Format Style - Font - Column Specification - Data - Control List - 주요창 12. DW객체의 주요함수 - 주요함수 13. DW 컨트롤의 주요 함수 - 데이터 윈도우 컨트롤 - DW 컨트롤의 주요이벤트 14. Edit Control/Buffer - Edit 컨트롤의 이해 - Buffer

4 1. 파워빌더 구성의 이해 목표 목차 ▣ 파워빌더의 개발툴의 구성을 이해한다 ▶ 파워빌더 개발환경 ▶ 파워빌더의 화면구성
파워빌더 교육 1. 파워빌더 구성의 이해 목표 ▣ 파워빌더의 개발툴의 구성을 이해한다 목차 ▶ 파워빌더 개발환경 ▶ 파워빌더의 화면구성 ▶ 오브젝트 브라우저와 라이브러리 페인터 ▶ 워크스페이스와 타겟, 어플리케이션 파워빌더 교육 (주)MNP

5 파워빌더 개발환경 Title Bar Menu Bar Tool Bar Client Area System Tree Output 창 Status Bar ① Title Bar : 해당 어플리케이션을 독립적으로 움직일 수 있게 해 주며, 오른쪽 끝 부분을 보면, 최소화 버튼, 닫기 버튼으로 이루어진 컨트롤 메뉴를 가지고 있다. ② Menu Bar : MDI 구조의 어플리케이션의 모든 동작을 메뉴를 통해서 이루어지게 되며, MDI 구조 에 꼭 필요한 요소이다. ③ Tool Bar : 메뉴 중에서 많이 쓰이는 것을 실행하기 더 쉽게 하기 위해 Icon화 해서 넣는 곳이다. ④ Status Bar : 메뉴에 대한 설명(Menu Properties 에서 MicroHelp 부분)이 나타나는 곳이며, 상태에 대한 정보를 나타낼 수도 있다. ⑤ Client Area : MDI 구조의 어플리케이션 안에서 열리는 모든 Sheet들이 열리게 되는 공간이다. 이 공간이상으로 최대화 될 수는 없으며, 파워빌더에서는 mdi_1으로 호출된다. ⑥ System Tree : 객체들(Workspace, Target, Window등)을 계층구조로 보여준다. ⑦ Output : PowerBuilder관련 메시지를 보여줌 (스크립트 에러, 객체 위치 정보등) 파워빌더 교육

6 : incremental build/Full Build/Deploy Workspace/ Skip/Stop
아이콘 설 명 : NEW 새로운 객체를 만들 때 (Workspace, Target, Window, datawindow 등등) : inherit 상속을 받아서 어떠한 객체를 만들 때 사용(Window, Menu, User Object) : Open 객체를 열고자 할 때 사용되며, 이 버튼으 누르면 나타나는 대화상자의 Objects of Type을 통해 Type 별로 객체를 볼 수 있다. : Run/Preview 객체 별로 실행 결과를 선택하여 볼 수 있으며, 실제 실행화면과 같이 객체 내부에 작성한 Script들을 모두 수행한다. : System Tree/Output TreeView와 Output창을 활성화 시킨다. : To do List 현재 작업 공간에 대한 Link를 걸어서 각 내용으로 바로 갈 수 있도록 한다. : Browser 계층 간의 상속 관계를 보거나, OCX나 DLL을 사용할 때, 지원하는 함수들을 볼 때 주로 사용된다. : Clip Window 많이 사용되는 스크립트들을 저장해 놓을 수 있다. : Library 라이브러리 내용을 검토하고 관리할 수 있다. System Tree가 없는 파워빌더 7이하의 버전에서 많이 사용되었다. : DB profile DB를 새로 연결하거나, 등록할 때 사용된다. : Application Server Profile 사용되는 Appication Server에 대한 정보를 저장해 놓아서, 파워빌더에서 바로 서버로 배포될 수 있게 ID 및 PassWord등을 저장한다. : DataBase Painter DB를 새로 생성, 연결 뿐만 아니라, Table의 속성 및 조회, 설정등을 저장한다. : Edit PBR(PowerBuilder Resource) 작성이나 ini 파일을 만들때 사용되며, 파워빌더용 메모장이라고 생각하면 된다. : incremental build/Full Build/Deploy Workspace/ Skip/Stop Build 및 배포에 관한 것으로, Workspace에 작성된 모든 프로젝트에 대한 것을 한번에 수행, Skip, 중지를 할 수 있다. : Debug/Select and Debug 하나의 Workspace에 여러 개의 Target이 존재하므로, 다른 Target에 있는 것을 선택하려면, Select and Debug를 선택해서, 원하는 Target을 선택하면 된다. :Run/Select and Run Target별로 실행을 할 수 있다. Select and Run으로 원하는 Target을 선택하면 된다. : Exit 종료 파워빌더 교육

7 파워빌더 화면 구성 System Tree Clip window
◈ PowerBuilder Target 및 쓰이는 object들을 계층적으로 보여주는 것 버튼을 눌러서 나타내거나, 없앨 수 있다. ▶개발의 편리성 ▶ Drag&Drop 기능 ▶ Syntax 오류 방지 ▶ 검색 기능 강화 ▶ 현재 작업중인 Target Blob 포맷으로 보여줌. Clip window ◈ 스크립트 작성시 많이 사용되는 문장을 여러 개를 등록해서 사용할 수 있다. 를 눌러서 나타내거나, 없앨 수 있다. 등록할 Script를 선택하여 반전 시킨 후 Clip Window가 있는 곳으로 Drag & Drop 후 정보를 입력하면 된다. ▶ 스크립트 저장소 ▶ 반복되는 스크립트 재활용 ▶ Drag&Drop 사용가능 ▶ 파워사이트의 Favorite 기능 파워빌더 교육

8 오브젝트 브라우저와 라이브러리 페인터 Output
◈ 전체 어플리케이션을 Compile 할 때 Error나 Warning등을 표시하는 공간이다. 를 눌러서 나타내거나, 없앨 수 있다. 파워빌더는 객체 별로 Compile이 되고, 에러가 나면, 해당 객체에 또 다른 Output 창이 생기므로, 보통은 화면을 넓게 사용하기 위해 사용하지 않는다. ▶ 실행절차 확인 ▶ 컴파일과 마이그레이션등에 사용 오브젝트 브라우저와 라이브러리 페인터 파워빌더의 리소스 ◈ 파워빌더는 많은 객체들로 구성되어 있고 그 객체들을 포함하고 있는 라이브러리 (PBL)가 있다. 라이브러리와 객체들은 라이브러리 페인터와 오브젝트 브라우저를 통하여 관리한다. 라이브러리 페인터가 물리적인 객체를 관리한다면 오브젝트 브라우저는 논리적인 객체를 관리한다고 할 수 있다. 오브젝트 브라우저 ◈ 객체 단위로 구분되어 있으며, 객체의 구성요소와 연관관계를 쉽게 알 수 있다. 을 선택하면 다음화면과 같이 Object Browser화면이 나타난다. 파워빌더 교육

9 ◈ 라이브러리들이 나열되고 더블클릭을 통해서 그 라이브러리 내에 존재하는 객체들
라이브러리 페인터 ◈ 라이브러리들이 나열되고 더블클릭을 통해서 그 라이브러리 내에 존재하는 객체들 을 볼 수 있도록 확장하거나 이미 확장된 라이브러리를 축소시킬 수 있다. 아이콘을 클릭하면 라이브러리 페인터가 열린다. ◈ 메뉴에서 Entry – Library를 선택하거나, PBL을 선택하고 오른쪽 버튼을 누르면 Create, Delete, Build Runime Library, Optimize등 라이브러리를 관리하는 여러가 지 기능을 사용할 수 있는 Popup메뉴가 나타난다. ㆍ라이브러리 Create - 메뉴바의 Entry – Library의 create를 클릭하거나 파워바의 를 클릭하면 PBL을 생성하는 화면이 나타난다. 파워빌더 교육

10 - 현재 존재하는 PBL을 삭제한다. 해당 PBL이 응용프로그램에 등록되어서
사용하기 위해서는 타겟의 Properties 화면에서 Library List탭을 선택하고 그 곳에 PBL의 전체경로를 적어주면 된다. ㆍ라이브러리 Delete - 현재 존재하는 PBL을 삭제한다. 해당 PBL이 응용프로그램에 등록되어서 사용중이면 지울 수 없다는 화면이 나타나며, 응용프로그램에 등록되지 않은 PBL은 화면과 같이 삭제할 것인지 다시 한 번 묻는 대화상자가 나 타난다. ㆍOptimize - 선택된 PBL을 최적화 시킨다. PBL내부적으로 새로운 객체들이 생성, 수 정 또는 삭제되면 객체들의 위치(디스크의 물리적 위치)가 여기저기 섞이게 되는데 이때 Optimize가 잘 정돈해 주는 역할을 한다. 중간에 한 번씩 Optimize 작업이 필요하다 파워빌더 교육

11 ㆍRuntime Library - PBD나 DLL라이브러리를 생성해 준다. 옵션 설명 파워빌더 교육 Machine Code
Pcode를 사용할 것인지 Machine Code를 사용할 것인지를 결정한다. Trace Information Trace 파일의 생성을 결정한다. Machine Code에서만 사용이 가능하다. Error Context 실행 파일을 만들어 실행할 때 발생되는 에러에서 객체, EVENT, 스크립트의 행 번호 등을 보기 위해서는 이 체크박스를 선택해야 한다. Machine Code에서만 사용이 가능하다. Build Type 객체 재생성(컴파일)에 대한 타입으로서, 전체를 할 것인지 수정된 것만 할 것인지를 결정한다. Executable Format 32비트로 만들 것인지 16비트로 만들 것인지를 결정한다. Machine Code에서만 사용이 가능하다. Optimization Machine Code에서만 사용가능 No Optimization : 최적화를 하지 않는다. Space : 공간에 있어서 최적화를 하며 파일의 크기가 작아질 것이다. - Speed : 속도에 대해서 최적화를 하게 되지만 대신 파 일의 크기가 커진다. Resource File Name 라이브러리 내에 포함시키고자 하는 아이콘이나 그림 등의 경로가 들어있는 리소스 파일을 선택한다. 확장자는 PBR이며 텍스트(ASCII) 파일이다. 한 라인씩 필요한 파일의 이름이 적혀있다. 외부 파일들은 실행파일 생성시 자동으로 실행파일에 포함되지 않는다. 보통 객체에 직접 연결되어 있는 파일은 라이브러리 생성시 파워빌더가 자동으로 포함시켜 준다. 그러나 스크립트 상에서 연결지어준 경우는 자동으로 포함되지 않는다. 그래서 그 파일들은 이 리소스 파일을 통해서 라이브러리에 넣게 되는 것이다. 파워빌더 교육

12 - 라이브러리 페인터에서 객체를 선택하고 메뉴에서 Entry – Library Item을 선
ㆍ객체의 관리 - 라이브러리 페인터에서 객체를 선택하고 메뉴에서 Entry – Library Item을 선 택하거나, 선택된 객체 위에서 오른쪽 버튼을 누르면 다음화면에서 객체를 관 리할 수 있다. - 객체의 복사, 이동, 삭제 ㆍ Edit : 선택된 객체의 페인터화면을 열어서 수정작업을 할 수 있다. ㆍ Copy : 선택된 객체들을 다른 PBL로 복사한다. ㆍ Move : 선택된 객체들을 다른 PBL로 이동시킨다. ㆍ Delete : 선택된 객체들을 PBL내에서 삭제한다. ㆍExport - 이 기능은 객체를 파워빌더가 정의하고 있는 파일 형식으로 만든다. 그리고 이 파일은 다시 PBL내로 Import될 수 있다. 확장자는 SR + ‘각 객체의 첫글자’가 기본이 된다. 즉 윈도우 객체는 SRW, 데이터윈도우객체는 SRD와 같이 만들어진다. Export한 파일을 확인할 때는 라이브러리 페인터에서 해당파일을 더블클릭하거나 파워바의 아이콘 을 클릭하면 Editor 페인터가 나타난다. 파워빌더 교육

13 - Export된 파일을 다시 PBL내의 객체로 만들어 주는 일을 하는 것이 Import이다. 이때
대상 PBL이 타겟에 등록되어 있어야 하며, 해당 PBL의 Popup 메뉴에서 이 아이템을 선택하면 다음화면이 나타난다. 여기서 Import 하고자 하는 파일을 선택한다. ㆍRegenerate - PBL내에 존재하는 객체들은 두 가지 형태로 존재하는데 이메뉴를 선택하게되면 소스 를 바탕으로 컴파일 코드를 재생성 해주게 된다. ㆍSearch - 선택된 객체 내의 문자를 찾아낸다. 객체내에서 사용된 문자열을 찾은 결과는 아래와 같이 나타나며 찾은 결과를 더블클릭하 면 해당 문자열이 사용된 객체의 페인터로 바로 갈 수 있다. 파워빌더 교육

14 - 이전의 버전으로 만들어진 PBL을 현재 버전에서 사용하려 할 때, 다음화면과 같은 화면이 열린다.
ㆍFull Build - 라이브러리 페인터에서 타겟을 선택한 다음, 메뉴에서 Entry >> Target >> Full Build를 선택하면 모든 객체들을 Build한다. ㆍMigrate.. - 이전의 버전으로 만들어진 PBL을 현재 버전에서 사용하려 할 때, 다음화면과 같은 화면이 열린다. 보통, 현재의 Workspace에 이전 버전으로 생성된 타겟을 추가하거나 이전 버전의 Workspace를 오픈 할 때 Migration 화면이 열리게 된다. OK버튼을 선택하면 파워빌더가 자동으로 모든 처리를 하게 되며 오류가 발생하면 파워빌더 하단 Output 윈도우의 Errors탭에 에러내용을 보여준다. 파워빌더 교육

15 워크스페이스와 타겟, 어플리케이션 워크스페이스 만들기 타겟 생성 파워빌더 교육
File>New를 누르거나, 파워바의 를 누른다. 저장의 확장자는 파일이름.PBW(PowerBuilder Workspace)로 저장되고, 연관된 타겟(PBT)들을 관리하는 역할을 한다. 타겟 생성 실제 어플리케이션을 포함하는 Target을 만들기 위해서는, 메뉴 File > New를 누르거나, 파워바의 를 누른다. 파워빌더 교육

16 Application Server Component
일반적인 파워빌더 프로그램을 개발할 때 사용된다.보통 애플리케이션은 시작부분에서 데이터베이스와의 접속을 위한 초기작업을 수행한 후 최초의 윈도우를 열게되고, 마지막 윈도우가 닫힐때 애플리케이션이 종료된다. Template Application 어플리케이션을 만드는 마법사(EAServer나 Sql db에 연결하는 애플리케이션 생성시 필요한 커넥션 오브젝트가 자동 생성된다.실제 많이 사용되지 않는다.) Existing 대부분 Target이 없었던 파워빌더 7버전 이하의 것에서 파워빌더 8 이후의 버전으로 Migration 할 때 사용 EAServer Component EAServer에 배포되는 재규어 컴포넌트의 특성들을 가지고 있다. Application Server Component 파워빌더 11에 새롭게 들어온 타겟으로 Server Plug-in 기능을 사용할 때 사용되며, EAServer 이외에, WebSphere 6.1, WebLogic 9.2,Jboss 4.0.4를 지원한다. 다음 창에서 타겟과 라이브러리를 생성할 수 있다. 타겟 추가 Target들을 관리 하는 Workspace에서 오른 쪽 마우스를 눌러서, 추가 할 수 있으며, Target을 제거할 때는 Target에 오른쪽 마우스로 클릭한 후 Remove Target을 누른다. 지워진 Target은 물리적으로 지워 진 것이 아니고, System Tree창 안에서만 사라진 것으로 언제든지 다시 추가 할 수 있다. Add Target…. : 기존에 만들어져 있는 타겟을 Workspace에 연결한다. 파워빌더 교육

17 라이브러리 추가 라이브러리 연관함수 파워빌더 교육
어플리케이션이 하나의 라이브러리(PBL)이 아닌 한 개 이상의 라이브러리들로 구성되어 있을 경우 이 라이브러리들은 파워빌더의 패스에 등록되어 있어햐 하며 이 Library Search Path는 해당 어플리케이션이 실행 될 때, 실행되는 객체들을 가진 물리적 저장 공간인 library들의 참조 순서를 가리킨다. 따라서, 많이 사용하게 되는 pbl은 상단 부에 지정하는 것이 좋다. 새로운 PBL을 만들고 지우는 법은 타겟의 방법과 동일하며, 기존에 있는 PBL을 추가 하려면, Browse를 선택해서 원하는 pbl이 있는 위치를 지정하면 된다. 지우려면, 해당 문구를 지우거나 팝업 메뉴에서 Remove Library를 클릭해도 된다. 타겟과 마찬가지로 물리적으로 지워지는 것이 아니라 파워빌더의 시스템트리에서만 사라지게 되는 것으로, 추후 필요시 다시 추가 할 수 있다. 라이브러리 연관함수 파워빌더에서는 직접 PBL을 가지고 어떤 작업을 할 수 있도록 몇 개의 함수를 제공한다. LibraryCreate() : 아무것도 없는 파워빌더의 PBL를 만들어 준다. LibraryDelete() : 라이브러리 파일을 삭제하거나, 그 안에 데이터 윈도우만 지울 수도 있다. LibraryDirectory() : PBL내에 존재하는 객체들의 종류를 알 수 있다. 사용자는 모든 object의 리스트나 명시한 타입의 object 리스트를 얻을 수 있다. LibraryExport() : PBL내의 모든 객체들을 Export받을 수 있다. 객체는 syntax로써 export 된다. LibraryImport() : 라이브러리로부터 DataWindow를 import 한다. LibraryImport는 라이브러리내의 object를 재 생성하기 위하여 DataWindow object의 syntax를 사용한다 파워빌더 교육

18 Additional Properties
파워빌더 교육 어플리케이션 응용프로그램을 구성하는 여러 요소들을 관장하고, 프로그램 시작과 종료에 관한 작업을 처리하는 파워빌더만의 특별한 오브젝트 따라서, 이 오브젝트는 전체 어플리케이션에 대한 정보, 예를 들어 글자크기, 글자형태, 시작할 때 해야하는 일, 끝날 때 해야 하는 일들에 대한 정보를 가지고 있다. 어플리케이션 오브젝트에서 기본 폰트, 실행 파일을 만들 때의 아이콘 설정들을 Additional Properties에서 할 수 있다. Additional Properties Text Font – 데이터윈도우 객체를 제외한 나머지 객체에서 작업 할 경우에 기본 적으로 적용될 Font를 지정. Header, Label, Column Font- 데이터윈도우와 관련된 Font이다. Icon – 아이콘을 설정하면 파워빌더로 만든 어플리케이션 EXE파일에 Icon이 생긴다. 파워빌더 교육 (주)MNP

19 Variable Types – 파워빌더에서 기본적으로 사용하고 있는 전역함수를 개발자가 정의한 객체로 바꿔서 사용할 수 있다.
어플리케이션 Event Open Event : 어플리케이션이 시작하면서 가장 먼저 발생되는 이벤트로 반드시 처음에 시작될 윈도우를 열어야 한다. 경우에 따라 차이는 있지만 보통 데이터베이스와 연결되는 내용도 이곳에 기술하게 된다. Close Event : 어플리케이션 종료할 때 발생되는 이벤트로 일반적으로, 데이터베이스 연결을 종료하거나 메모리에 올라가 있는 것들을 해제시켜주는 작업을 한다. 어플리케이션 종료시 추가로 처리할 내용이 있으면 이곳에서 작성하면 된다. SystemError Event : 어플리케이션이 실행중에 시스템을 스크립트에서 잘못 제어했을 경우 발생되는 이벤트로 시스템이 그냥 DOWN되는 경우를 최소하기 위해, 에러 처리에 대한 내용을 작성한다. Idle Event : 어플리케이션 전체를 기준으로 일정한 시간이 지나면 발생되는 이벤트로 Idle()함수로 Event가 발생될 시간간격을 지정할 수 있다. Idle()함수는 Open EVENT에 작성되어 있다. 파워빌더 교육

20 2. DB페인터의 상세 사용법, 트랜잭션의 이해 목표 목차 ▣ 데이터베이스를 관리하며 트랜잭션을 정확히 이해한다.
파워빌더 교육 2. DB페인터의 상세 사용법, 트랜잭션의 이해 목표 ▣ 데이터베이스를 관리하며 트랜잭션을 정확히 이해한다. - DB페인터를 사용하여 데이터베이스를 관리한다. - 트랜잭션을 이해하여 잘 사용할 수 있다. 목차 ▶ SQL Anywhere 데이터베이스 만들기 ▶ 시스템 테이블 ▶ Object Layout ▶ Extend Attribute ▶ 테이블관리하기 ▶ Transaction 파워빌더 교육 (주)MNP

21 데이터베이스 만들기 파워빌더12를 인스톨 하면, 개발자 버전으로 제공되는 SQL Anywhere 10.0을 이용해서 데이터베이스 파일 및 테이블들을 생성할 수 있다. 파워바에서 을 선택한 후, Database Painter를 띄운다. ODB ODBC 밑에 Utilities에 있는 Create ASA Database를 선택하면 다음과 같은 창이 뜬다. 파워빌더 교육

22 Prompt for Password During Connect
Create DB 설명 분류 설명 User ID - ASA는 Default로 DBA이고 PassWord는 sql이다. Database Name - 만들고자 하는 데이터베이스 이름을 넣는 곳이다. Prompt for Password During Connect - 연결되어 있을 때, 비밀번호를 물어보는 창이 뜨게 할 것인지에 대한 옵션 Use Transaction Log - 해당 데이터베이스에 대한 로그 파일을 만들어 주는 것으로 만약 필요없다면, 체크를 풀어주면 로그 파일이 작성되지 않는다. Default로는 데이터베이스 파일과 동일한 이름.log 파일로 데이터 베이스와 동일한 폴더에 작성된다. Collation Sequence 데이터베이스에서의 문자열 비교를 하기 위해 사용되는 코드 페이지의 순서를 셋팅 할 수 있고, 일반적으로 사용되는 ASCII(binary) 코드는 lower 128 characters를 사용한다. 만약 개발자가 영어가 아닌 다른 언어를 사용하려면, 코드를 지정해야한다. Encrypt database - 데이터베이스 파일을 암호화해서 작성함으로써, 누군가 데이터베이스 파일을 볼 때, 암호화 해서 보여지게 된다. 하지만 데이터베이스 파일은 압축되지 않으므로, 파일의 사이즈가 커지게 된다. Case Sensitive Values - 테이블과 컬럼 안의 있는 모든 이름들이 대소문자를 구분하도록 하는 것이다. Java Enabled - 데이터베이스를 자바에서 사용하고자 할 때, 체크를 하는 것이고, 자바에서 사용하려면, 해당 데이터베이스의 시스템 테이블에 Sybase runtime java classes에 관련된 내용들을 인스톨 해야한다. Blank Padding - 체크하면, 데이터베이스 안의 데이터들의 뒤에 빈 공란이 붙었을 때, 나중에 빈 공란은 무시하는 것이다. DataBase Name 부분에서 버튼을 눌러서 창을 열고, 만들고자 하는 폴더에 member.db파일을 입력 하고 OK버튼을 누르고, 한글 데이터가 입,출력 되기 위해서는 Collation Sequence에 EUC_KOREA 또는 949KOR를 유니코드 테이블을 생성하기 위해서는 UTF8을 넣는다. 파워빌더 교육

23 OK버튼을 클릭하면 다음과 같이 데이터베이스 파일이 생성되고 내부적으로 DSN이 자동으로 등록되고, Db Profile에서 Profile이 등록된 것을 확인할 수 있다.
파워빌더 교육

24 시스템테이블 보기 Catalog table 파워빌더 교육
파워빌더의 시스템 테이블(PowerBuilder Catalog Table)은 파워빌더 데이터베이스 페인터에서 기본적으로 보이지 않도록 되어 있고, 다음과 같이 ‘Show System Tables’를 선택해서 활성화를 해주어야만 보이게 된다. 보이지 않던 테이블들은 으로 표시 되면서 보이게 된다. 파워빌더의 시스템테이블 외에 DBMS에서 제공되는 시스템 테이블도 확인 할 수 있다. Catalog table 파워빌더의 데이터윈도우에 할당되어진 각 컬럼의 확장된 속성을 저장하고 있는 5개의 파워빌더 시스템 테이블은 ‘PoverBuilder Catalog Table’라고 불리며, Validation Rule, Display Format, Font등에 대한 정보를 가지고 있다. 분류 설명 Pbcatcol - 각 칼럼의 Extended Attribute 정보 Pbcatedt - Edit Style의 정보 Pbcatfmt - Display Format의 정보 Pbcattbl - 데이터베이스에 있는 테이블의 정보 Pbatvld - Validation Rule의 정보 파워빌더 교육

25 Object Layout . 파워빌더의 Extended Attribute 란 ? 파워빌더 교육
Table의 칼럼에 대한 확장정의 정보입니다. Extended attributes 는 레이블, 헤딩, 커맨트, 에디트스타일, validation rules, column widths, heights, justification 등의 정보를 정의하며  특별한 확장속성 시스템테이블에 저장됩니다. 파워빌더와 인포메이커는 새로운 dw를 생성시 default 값으로  extended attribute를 사용합니다. Object Layout 오브젝트 레이아웃에서는 테이블의 구조도를 볼 수 있다. 보고자 하는 테이블에서 오른쪽 마우스를 누르면 나오는 팝업 메뉴에서 Add to Layout을 누르거나, 데이터베이스의 Table중에 보고자 하는 테이블을 오브젝트 레이아웃으로 마우스로 끌어다 놓으면 해당 테이블 구조를 볼 수 있다. 만약 끌어다 놓은 테이블 간의 연관 관계가 있다면, Primary 키 , Foreign 키 등이 표시되며 관계를 볼 수 있다. Primary 키 컬럼과 Foreign 키 컬럼의 이름은 일치할 필요는 없다. 파워빌더 교육

26 Extended Attribute ㆍDisplay Format 파워빌더 교육
윈도우 컨트롤 오브젝트의 Editmask는 컨트롤 오브젝트와 성격이 비슷하지만 다른 특성을 가지고 있다. Editmask 컨트롤은 윈도우에서 사용할 뿐이며, 사용자가 작성하기 이전에 이미 정해진 포멧이 보이는 반면 디스플레이 포맷은 테이블의 각 컬럼별로 설정할 수 있으며, 사용자가 작성하기 이전에는 정해진 포맷이 보이지 않는다. 사용자가 새로운 형식을 만들기 위해서는 Display Formats에서 팝업 메뉴를 나타나게 하고, 그 중에 New를 선택하여 작성한다. 파워빌더 교육

27 ㆍEdit Styles Edit Styles은 윈도우 컨트롤 오브젝트의 Editmask 컨트롤 오브젝트와 똑같다. 컬럼에 적용해서 사용할 수 있다는 것과 여러 형태를 가지고 있다는 것이 차이점이다. 에디트 스타일은 입력된 값을 검증 할 수 있는 정해진 포맷을 가진 컨트롤로 데이터의 디스플레이 형태를 조정한다. 다음은 Member 01에 작성되어져 있는 Edit Style List이다. Edit Style은 7가지 형식(Chack box, DropDownDataWindow, DropDownListBox, Edit, EditMask, RadioButtons, InkEdit)로 만들 수 있다. 새로운 형식을 만들기위해, Edit Styles에서 오른쪽 마우스 클릭하여 New를 선택 파워빌더 교육

28 Display Column Data Column
Edit Limit : 사용자가 입력할 수 있는 문자의 수를 제한 하고자 할 때, 해당 문자 수를 작성한다. Case : 소문자, 대문자(Any, Lower, Upper)로 변경하고자 할 때, 적절한 값을 선택한다. Use Code Table : 코드 테이블이란 Edit스타일을 사용할 테이블로써, 화면에 나타나게 될 Display 값과, 데이터베이스에 저장될 Data값을 갖는다. 사용자가 보는 값은 남자,여자인데, 실제 데이터베이스에 들어가는 값이 M,F라한다면, 남자가 Display Column이고, M이 남자의 데이터 값으로 사용자가 남자를 선택하면 데이터베이스에 M이 입력되어진다. 이것을 나타내려면 다음과 같이 값을 선택한다. Display Column Data Column 남자 M 여자 F 주의! – EmptyString is Null을 체크. EditMask를 이용하지 않고 Edit를 이용한 것은 EditMask에는 Empty String is Null이 없기 때문이다. 숫자를 입력 받는 경우는 반드시 체크되어 있어야만 하는 옵션이다. 숫자 입력 후에 입력된 숫자를 다시 지우고 다른 칼럼으로 이동하려 하면 에러가 발생된다. 이것은 EmptyString(“”)의 type을 문자로 보기 때문에 숫자 칼럼에서 에러가 발생한다. 작성을 한 후, 파워빌더 메뉴의 파일>Save All을 통해서 저장한다. ChackBox 컬럼에서 두 개 이상의 값들 중에 하나의 값만을 선택하는 경우를 만들고자 한다면, 체크 박스 형식을 사용하면 된다. Edit Style 부분은 새로만드는 Edit Style이름을 정해주고, Text는 체크박스 옆에 나타내고자 하는 내용을 적는다. Data Value의 on, off는 사용자가 선택 했을 때, 또는 선택하지 않았을 때, 데이터 윈도우 버퍼에 넣고자 하는 데이터 값을 넣는다. 파워빌더 교육

29 DropDownDW EditMask 파워빌더 교육
드롭다운데이터 윈도우형식을 만들고자 한다면, 그전에 올바른 형식을 가진 데이터오브젝트를 가지고 있어야 한다. Name부분은 새로 만드는 Edit Style의 이름을 입력하고, DataWindow부분에 오른쪽의 부분을 클릭해서, 이미 작성해 놓은 데이터 오브젝트를 할당한다. 드롭다운 데이터 윈도우에서 사용할 수 있는 컬럼의 데이터 값은 최대 511문자이하로 제한되어 있다. EditMask 에디트 형식과 비슷하게, 사용자가 값을 직접 입력하지만, 형식화된 데이터를 나타낸다. Mask에 있는 부분을 지우고, 자신이 원하는 스타일로 작성하면 된다. 작성 방법은 Options 밑에 Type을 String(문자), Number(숫자), Date(날짜), Time(시간), DateTime(날짜시간), 중에 나타내고자 하는 것을 선택하면 그에 따라 Masks의 리스트에 나타나는 것이 틀려지며, 디폴트 값인 String을 선택했다면, 오른쪽에 Masks에 리스트에서 !(대문자), ^(소문자), #(숫자), a(알파벳), x(모든것을 받아들임), 이들 중에 원하는 것으로 나타내면 된다. 파워빌더 교육

30 InkEdit DropDownListBox 파워빌더 교육 InkEdit는 Tablet PC에서의 입력 처리를 위한 것이다.
Edit Style에는 새로만드는 이름을 지정해주고, Empty String is Null은 앞에서 언급한 바와 같이 주의하여야한다. Code Table에 Display value에는 화면에 나타나게 될 값을, Data value에는 실제 데이터베이스에 들어갈 값을 입력한다. 파워빌더 교육

31 RadioButtons Validation Rules 파워빌더 교육 Edit Style에는 새로만드는 이름을 지정해주고,
칼럼에 입력된 값이 유효한 값인지 확인할 수 있도록 만들어진 규칙. 데이터의 타입 및 범위는 데이터 베이스에서 규정하지만 그 이외의 기준은 (예를 들어 주민번호 조회시, 남자인지 여자인지의 구별등.)  파워빌더에서 제공하는 기능을 사용하여 개발자가 원하는 컬럼에 원하는 검사 룰을 넣을 수 있다. Validation Name : 추후에 불러 쓰기 위해서 붙이는 이름 Data Type : 입력 받고자 하는 타입을 설정 String(문자), Number(숫자), Date(날짜), Time(시간), DateTime(날짜시간) Message : 검증 룰에 위배되었을 때, 출력 되는 메시지 박스에 출력될 내용. 파워빌더 교육

32 테이블 관리하기 테이블 생성 파워빌더 교육 파워빌더 교육 (주)MNP 1980년 이전에 태어난 사람은 가입하지 못하도록
만든다. 저장은 파워빌더 메뉴의 파일  Save All을 클릭. @col은 사용자가 입력한 값을 반환하는 것이고, Functions에는 여기에서 사용 가능한 함수들을 보여준다. 테이블 관리하기 테이블 생성 DB Painter의 DB의 테이블에서 오른쪽 마우스를 클릭하여 New Tables 선택하여 작성. Column Name : 컬럼명을 지정한다. Data Type : 데이터타입 선택. 데이터 타입은 선택된 데이터베이스 종류에 따라 다르게 나타난다. Width : 컬럼의 길이를 지정. Dec는 소수 이하 자리수 표시 Null : Yes/No 선택.(Priamary Key는 Null을 허용하지 않게 잡아준다. Default : 선택한 값이 자동으로 들어가게 해주며 기본은 아무값도 들어가지 않는 None이다. 저장 버튼을 누르면 다음과 같이 테이블명을 입력 할 수 있다. 파워빌더 교육 (주)MNP

33 Key 생성 파워빌더 교육 테이블에 유일한 값인 Primary Key를 생성해야 데이터 값을 넣을 수 있다.
NewPrimary Key를 클릭하여 컬럼에서 Primary Key로 정해줄 컬럼 이름에 체크한 후 저장한다. Foreign 키는 다른 테이블에 Primary 키로서 존재한다. 한 테이블이 여러 개의 서로 다른 테이블과 관련될 수 있기 때문에 하나 이상의 Foreign 키를 가질 수도 있다. New Foreign Key를 선택하고, General에서 test_name을 선택하고 Primary 탭에서 해당 테이블을 선택한 후 저장하면 Object layout 창에 Foreign 키 생성된 것을 볼 수 있다. 파워빌더 교육

34 테이블 값 조회/입력 테이블 변경/삭제 파워빌더 교육
Table에서 오른쪽 마우스 버튼 클릭, Edit Data를 선택하면, 세가지의 Data Window Presentation Style로 아래 Results 창에서 테이블의 데이터를 조회할 수 있다. Results에서 오른쪽 마우스를 클릭하여 Insert Row를 선택하여 테이블에 직접 데이터를 입력할 수 있다. 입력후엔 Save Changes를 클릭하여 저장한다. 테이블 변경/삭제 Alter Table로 컬럼의 이름 및 크기, 초기값을 바꿀 수 있다. 데이터 타입과 Null값허용에 대한 것은 바꿀 수 없다. 크기는 더 크게 늘릴 수는 있으나, 줄일 수는 없다. 마지막 컬럼에서 Tab 키를 누르면 새로운 Row가 추가된다. 하지만, Null 값 허용은 바로 전의 컬럼의 옵션을 그대로 따라가게 된다. Drop Table을 선택하여 테이블 삭제 확인 메시지가 나온 후 ‘예’를 클릭하면 테이블이 삭제 된다. 파워빌더 교육

35 백업 데이터값 백업 : 자료를 조회하여 오른쪽 마우스를 클릭하여 Save Rows As를 선택, 다이얼로그 창이 나타나면 원하는 형태로 저장할 수 있다. (With headers는 타이틀 부분을 포함할지를 구분한다.) 데이터베이스 백업 : 테이블의 스키마 정보를 뽑아내는 Export Syntax를 이용하여 스키마 정보를 백업할 수 있다. DBMS와 데이터소스를 선택하면 Activity log 탭에 테이블을 Create하는 SQL문이 추출된다. 이 테이블을 다른 데이터베이스에 연결하여 ISQL Session에 생성된 SQL문을 생성하여 다른 데이터베이스에서 테이블을 생성할 수 있다. 테이블의 데이터 값을 가져오려면 데이터값까지 가지고 있는 SQL문을 실행하거나 파일로 저장된 데이터를 Exprot하면 된다. 외에 Data PipeLine을 사용할 수도 있다. 파워빌더 교육

36 Data Pipeline 파워빌더 교육 데이터베이스를 통해 데이터의 복제를 만드는 개체
데이터 파이프라인의 Painter에 파이프라인을 만들 수 있다. 파이프라인을 사용할 수 있는 몇가지 방법 중에 동일한 다른 DBMS에 하나 이상의 테이 블에서 데이터 파이프를 할 수 있다. Data Pipeline에 접근하기 위해서 페인터 바의 pipeline 아이콘을 클릭하거나, 테이블에서 오른쪽 마우스를 통해 팝업 메뉴를 나오게 한 후, Data Pipeline을 선택하면 된다. NewDatabase Tab에 Data Pipeline을 클릭할 수도 있다. 오른쪽 마우스를 통한 방법 Table : 생성할 테이블 이름 Key : primary key Options : Create – Add Table(타겟에 테이블 생성) Replace – Drop/Add Table(테이블 교체) Refresh – Delete/Insert Rows(중복데이터 삭제 후 삽입) Append – Insert Rows(데이터 추가) Update – Update/Insert Rows(중복데이터 확인 후 삽입) Commit : 100건 수정마다 자동으로 커밋명령 수행 Max Errors : 최대 허용 가능 에러 Extended Attributes : 해당 테이블의 컬럼에 할당되어 있는 디스플레이 포맷, 에디트 스타일, 검증룰 또한 옮길 수 있다. 페인터 바의 Destination Profile을 옮기고자 하는 데이터베이스와 테이블을 선택하고 실행 아이콘을 클릭한다. 파워빌더 교육

37 Transaction Transaction의 이해 파워빌더 교육
파워빌더는 트랜잭션 오브젝트(Transaction Object)를 사용해서 데이터베이스에 접i속한다. 트랜잭션 오브젝트는 파워빌더 데이터베이스 인터페이스(PowerBuilder DataBase Interface)에 데이터베이스 연결 정보를 전달하고 연결된 데이터베이스로 부터 넘어오는 정보들을 다시 파워빌더 데이터베이스 인터페이스로부터 받아오는 역할을 담당하는 ‘통신용 오브젝트’이다. < Client> < DB Server > Application Defalt (SQLCA)제공 Transaction Object <Network> DataBase Vendor Database Interface PowerBuilder Database Interface 위 그림은 파워빌더 애플리케이션이 데이터베이스와 통신하는 과정을 보여주고 있다. 트랜잭션 오브젝트로는 파워빌더가 디폴트로 제공하는 SQLCA(SQL Communication Area)가 사용되며, “PowerBuilder Database Interface”는 연결하고자 하는 데이터베이스의 종류와 연결 방식에 따라 각기 다른 드라이버가 사용된다. 여러 개의 데이터베이스에 동시에 접속하고자 한다면 데이터베이스 개수만큼 트랜잭션 객체를 만들어 사용하거나 필요할 때마다 트랜잭션 객체의 속성을 바꾸어준 후에 데이터베이스를 접속해서 사용하면 된다. 트랜잭션 객체도 하나의 객체이므로 이름, Event 그리고 속성을 가지고 있다. 이름 : SQLCA를 사용할 수도 있고, 새롭게 만들 수도 있다. Event : Constructor와 Destructor가 있다. SQL문장이 사용될 때마다 데이터베이스와 통신 한다는 것을 의미. 속성 분류 Data Type 설명 AutoCommit Boolean True : 자동으로 Commit을 처리 False : Commit이나 RollBack을 만나면 처리 DataBase String 연결될 데이터베이스의 이름 DBMS 연결 시 사용할 Drive (ODBC,Oracle,Sybase,Informix등) DBParm DBMS에 연결할 때 필요한 Parameter. Lock Isolation LEVEL LogID Server에 Log On User의 ID 파워빌더 교육

38 기본 Transaction SQLCA 사용자 Transaction 생성 파워빌더 교육
분류 Data Type 설명 LogPass String Server에 Log On User의 패스워드 ServerName 데이터베이스가 존재하는 Server 이름 SQLCode Long SQL문 처리에 대한 성공 또는 실패한 처리 결과 Code SQLDBCode 각 DBMS의 Error Code SOLErrText 각 DBMS의 Error Message SQLNRows 에러가 발생된 Row의 수 기본 Transaction SQLCA 파워빌더에서는 기본적으로 전역변수로 SQLCA를 제공한다. SQLCA는 개발자가 별도의 작업없이 사용할 수 있다. 그 내용은 Application 객체에서 Additional Properties에서 확인 할 수 있다. 사용자 Transaction 생성 개발자가 Transaction에 추가 기능을 넣어서 사용하고자 할 때는 직접 만들어서 사용하면 된다. 신규로 Standard Class를 선택하고 Transaction Class를 선택한다. 필요에 따라 event에 스크립트를 기술하거나 함수 등을 추가할 수 있다. 파워빌더 교육

39 Transaction에서 Stored Procedure 사용하기
만들어진 사용자 Transaction 객체에서 Local External Functions를 선택하고 오른쪽 버튼을 누른 후에 Remote Stored Procedure를 선택한다. 연결된 데이터베이스에 만들어진 Stored Procedure와 함수의 목록이 나온다. 사용하고자 하는 것을 선택하고 OK를 하면 등록된다. subroutine internal_openxml(string xml,string xpath,long flags,string namespaces) RPCFUNC ALIAS FOR "~"dbo~".~"internal_openxml~"“ 아래와 같이 스크립트에서 사용할 수 있다. Sqlca.internal_openxml(ls_xml,ls_xpath,ll_flags,ls_namespaces) Reference로 연결되어 결과값을 받는 경우는 호출하기 전에 빈 값을 채워보내야 결과값을 받을 수 있는 경우가 있다. 사용자 Transaction사용 1. SQLCA는 application객체에서 additional Properties창에서 변경하여 사용할 수 있다. 파워빌더 교육

40 동시에 여러 데이터베이스 사용하기 파워빌더 교육 2. 전역변수에 선언하여 사용할 수 있다. Global Variable 선언
p2n_Transaction gtr_trans 스크립트 작성 if not isValid(gtr_trans) then gtr_trans = CREATE p2n_Transaction end if gtr_trans.DBMS = “O10 Oracle10g (10.1.0)” gtr_trans.LogPass = “password” gtr_trans.ServerName = “service.WORLD” gtr_trans.LogId = “user” gtr_trans.AutoCommit = False gtr_trans.DBParm = “DisableBind = 1” Connect Using gtr_trans; 동시에 여러 데이터베이스 사용하기 1. 사용할 데이터베이스 별로 사용자 트랜잭션 객체를 만든다. 오라클 : tr_oracle 사이베이스 : tr_ase 2. 사용하고자 하는 용도에 맞도록 변수를 선언한다. 보통 전역변수 tr_oracle gtr_ora tr_ase gtr_ase 3. 트랜잭션 객체를 생성하고 데이터베이스와 연결한다. gtr_ora = CREATE tr_oracle gtr_ase = CREATE tr_ase gtr_ora.DBMS… gtr_ase.DBMS… Connect Using gtr_ora; Connect Using gtr_ase; 4. 스크립트에서 사용한다. Select … using gtr_ora; Insert … using gtr_ase; Update … using gtr_ora; If gtr_ora.sqlcode = 0 then Commit Using gtr_ora; Commit Using gtr_ase; Else Rollback using gtr_ora; Rollback using gtr_ase; 파워빌더 교육

41 4. Windows의 이해 목표 목차 ▣ Window 오브젝트와 컨트롤, 메뉴 오브젝트를 이해한다. 윈도우의 타입별 생성
파워빌더 교육 4. Windows의 이해 목표 ▣ Window 오브젝트와 컨트롤, 메뉴 오브젝트를 이해한다. 윈도우의 타입별 생성 윈도우 컨트롤의 생성 다양한 메뉴의 생성 목차 ▶ 윈도우 오브젝트 ▶ 윈도우 타입 ▶ 윈도우 프로퍼티 ▶ 윈도우 컨트롤 ▶ 메뉴의 이해 ▶ 메뉴의 작성 ▶ 메뉴아이템 이벤트와 함수 파워빌더 교육 (주)MNP

42 Window 오브젝트 윈도우 오브젝트 윈도우 생성 파워빌더 교육
비쥬얼 오브젝트(화면에 보이는 오브젝트)로 파워빌더에서 작성한 프로그램을 사용자에게 보여 줄 수 있는 유일한 객체이며, 사용자와 파워빌더의 어플리케이션과의 인터페이스 역할을 한다. 윈도우 생성 메뉴 Files > New를 선택하고, PB Object Tab에서 ‘Window’(윈도우)를 선택 하면, 윈도우 오브젝트가 생성된다. 파워빌더 교육

43 Window 타입 윈도우타입 선택 윈도우 Property에서 Window Type을 선택해야 한다. 각 타입을 나타내는 명칭 뒤에 ‘!’이 붙어 있는 것은 열거형(Enumerate) Data-Type을 나타내는 것으로 몇 가지 정해져 있는 것 중에 한가지를 선택할 수 있는 것을 의미한다. Main-Type Window : 윈도우가 로딩되더라도, 다른 윈도우와는 무관하게 동작하며, 독립적이다. 일반적으로, 어플리케이션의 초기 윈도우로 사용된다 Child-Type Window : Parent 윈도우의 상황이나 내용의 상세정보를 보여줄 때 사용. Parent 윈도우 안세만 존재할 수 있으며 Parent윈도우의 영역 밖으로 이동 하였을 때 영역 밖 부분은 잘리고, Parent 윈도우가 닫히면 닫힌다. Response-type Window : Modal 방식의 윈도우 사용자에게 어떤 값을 꼭 확인을 받고자 할 경우에 사용된다.(예 : 경고나 에러 메시지) Popup-type Window : Parent 윈도우에서 열린다. MDI – type, MDIHelp-Type Window : MDI는 Main-Type을 포함 할 수 있는 유일한 윈도우 타입이며, 대부분이 MDI의 Frame위에 각각의 윈도우를 호출하는 방식으로 쓴다. MDI에서의 모든 동작은 메뉴를 통해 이루어지며, MDI와 MDIhelp의 차이점은 상태바가 있고, 없고의 차이이다. 따라서, MDI – Type보다는 MDIHelp-Type이 많이 쓰이게 된다. MDI-Type의 윈도우는 여러 윈도우를 MDI 안에 띠울 수 있는 윈도우이다. Mdi_1의 이해 MDI로 윈도우를 구성하게 되면 main type의 윈도우가 sheet로 열리게 된다. OpenSheet(w_main01, w_mdi_main) OpenSheet(w_main02, w_mdi_main) 이것은 MDI내에 두 개의 main 윈도우(sheet)가 열린 것이다. 이때 main윈도우가 열리는 공간은 MDI윈도에 있는 mdi_1 객체이다. Mdi윈도우에 컨트롤(Command Button 등)중에서 아무거나 올려 놓게되면 보고자 하는 윈도우가 사라지고 보이지 않는다. 이런 경우에는 mdi_1의 영역을 별도로 지정해 주어야만 한다. 파워빌더 교육

44 Window 프로퍼티 General Tab 파워빌더 교육 Title : 윈도우명
Tag : 윈도우를 구별 할 수 있게 하는 Index Tag : 윈도우를 구별 할 수 있게 하는 Index Visible : 윈도우를 보이거나 안보이게 하는 Design>Show Invisibles를 체크하면 Visible 속성이 꺼진 객체도 볼 수 있으나, 실행하면 보이지 않는다. Enabled : Uncheck하게 되면, Read Only와 같이 어떠한 활성화도 시킬 수 없다. Title bar : 윈도우의 Title bar를 나타내게 하는 것으로, Child-type이외에는 default로 가지고 있다. Control Menu : 윈도우의 오른쪽 상단부에 위치하는 최소화, 최대화, 닫기버튼을 나타내기 위한 공간이다. Maxbox,Minbox : 윈도우의 최대화, 최소화 버튼을 활성화 하는 것이다. ClientEdge : 체크를 하면, 윈도우의 Edge가 표현된다. ContextHelp : 윈도우가 Response-Type일 경우만 활성화 할 수 있으며, 윈도우의 오른쪽 상단에 ‘?’이 나타나며, 사용자가 ‘?’를 클릭하고, 어떠한 객체를 선택하면 해당 객체의 help 이벤트를 타게되며, 메시지 박스로 설명을 적어 놓는 방식으로 동작 RightToLeft : 윈도우의 오른쪽에 있는 즉 Control Menu를 왼쪽으로 보내고, Title이 오른쪽에 표시된다. Center : 화면 정중앙에 위치하도록 하는 속성 Resizable : 윈도우의 크기를 조정하지 못하도록 하는 속성 Window Type : 윈도우의 종류를 지정. 예를 들어 일반용, MDI용 부모창, 대화상자 용 등 지정 가능 Window State : 윈도우가 열릴 때, 창의 크기를 정상, 최대, 최소 크기로 열리도록 지정하는 지정하는 속성 Icon : 윈도우 왼쪽 상단에 표시되는 아이콘 종류 파워빌더 교육

45 Window 컨트롤 윈도우컨트롤이란? 윈도우컨트롤 사용 윈도우컨트롤의 용도 파워빌더 교육
윈도우 컨트롤 오브젝트란 윈도우에서 사용가능한 객체들을 말하며, 윈도우 디자인을 향상시키고, 사용자와 어플리케이션 간의 인터페이스가 된다. 컨트롤도 이벤트를 가질 수 있으며, 스크립을 실행시키거나 함수를 호출 할 수 있다. 윈도우컨트롤 사용 툴바에서 선택하거나, 메뉴바 Insert>Control에서 추가 할 수 있다. 사용할 객체를 선택하고, 윈도우 원하는 위치에 클릭하면 된다. 윈도우컨트롤의 용도 1 8 2 10 3 11 4 12 13 6 14 5 7 9 5 파워빌더 교육

46 1. Command Button Control과 Picture Button : 어떠한 행동을 실행하기 위해 사용된다.
커맨드 버튼 안의 text의 색상 및 정렬 방법은 따로 변경할 수 없다. - 프로퍼티 설명 Text : 커맨드 버튼의 밖에 보여지는 글이다. Default : 체크를 하면, 실행시켰을 때, 포커스 가 이버튼으로 있게되며, 사용자가 다른 동작 없이 그냥 엔터키를 칠 경우, 이 커맨드버튼의 Clicked이벤트 가 실행된다. Cancel : 체크를 하면, ESC키를 눌렀을 경우 이 커맨드버튼의 Clicked이벤트가 실행되 다. 주로 취소를 위한 버튼을 만들고 그 버튼의 속성으로 지정된다. FlatStyle : 처음 실행할때는 보더가 없으나 사용자에게 포커스가 이동하면 보더 가 생긴다. 즉 3D효과를 낼 수 있다. - Command Button과 Picture Button의 차이 : Picture Button은 그림을 넣을 수 있다. 2. Check Box, Radio Button, Group Box Control : 체크박스는 여러 값 중 선택을 받고자 할 경우 사용되지만, 한 개만 선택할 수 있다. Checked속성을 체크하면 시작할 때, 디폴트로 선택된 형태로 나타난다. Automatic속 성을 체크 하지 않으면 해당 윈도우 오브젝트 안에 GroupBox로 묶지 않으면, 체크 박스 및 라디오 버튼을 선택할 수 없다. 체크 박스 컨트롤에는 Three State라는 속성이 있는데, 이것은 꺼짐, 켜짐 이 두가지 상태 이외에, ‘알려지지 않음’같은 상태를 나타내야 할 때가 있을 때 사용하며, 체크 박스 내부가 회색 바탕으로 칠해져서 나타난다. 그룹박스는 공통되고, 연관된 객체들을 묶어서, 그룹화 할 때, 사용된다. 파워빌더 교육

47 파워빌더 교육 3. Static Text : 사용자에게 텍스트를 보여줄 때
StaticHyperLink : 특정 웹 페이지로 링크되어지는 텍스트를 표시하기 위해 사용된다. 4. Picture : 사용자가 원하는 그림파일을 넣을때 PictureHyperLink : 특정 웹 페이지로 링크되는 그림파일을 표시하기 위해 사용된다. URL에 링크될 주소 삽입 5. Single Line Edit : 사용자에게 한 줄의 텍스트를 입력 받을 때 사용되는 것이다. Multi Line Edit : 한 줄 이상의 값을 입력 받고자 할 때에는 멀티라인 에디트 컨트롤을 사용한다. 6. HScrollBar : Position 속성에 좌표값을 설정해서 스크롤 박스의 위치를 설정할 수 있다. VScrollBar : MinPosition을 통해, 최소 좌표값과, MaxPositon을 통해, 최대 좌표값을 설 정 할 수 있다. 파워빌더 교육

48 파워빌더 교육 6. Hprogress, Vprogress Bar : 진행율을 나타낼 때 사용되며, 예를 들어, 파일의 복사나,
조회되는 상태의 속도를 표시할 때 사용된다. 진행이 됨에 따라, 프로그래스 바는 시스템 반전 색상으로 채워진다. -프로퍼티 : 최소값 및 최대값, 증가치를 설정 할 수 있다. 7. EditMask Control : 전화번호나 화폐단위나 날짜 등등과 같은 정해진 형식으로 입력을 받아야 할 경우 사용되며, 해당 형식을 미리 지정해 놓으면 실행할 때, 정해진 포멧이 출력된다. - 프로퍼티 : 마스크 탭에서 지정할 수 있으며, 마스크데이터 타입을 먼저 정의하고 그 에 따라 Mask에 입력을 하면 된다. 에디트 마스크 컨트롤 오브젝트에서 나타낼 수 있는 또 하나의 중요한 속 성은 스핀 컨트롤이다. 스핀 컨트롤이란, 고정된 값의 범위 안에서 상하 화 살표에 의해 정해진 만큼 증가 또는 감소하는 것이다. 이런 스핀컨트롤을 표시하기 위해서는 Spin 속성을 체크하면 된다. 에디트 마스크 컨트롤의 Dropdown Calendar는 MaskDataType이 ‘datemask’나 ‘datetimemask’인 경우에만 사용이 가능하다. 또한, Calendar 속성에서, 달력의 색을 지정할 수 있다. 파워빌더 교육

49 8. Htrackbar, VTrackBar Control : 일정한 증가치에 의해 슬라이더를 움직일 수 있으며, 슬
라이더를 클릭하면 불연속적으로, 일정한 증가치에 의 해서 슬라이더를 움직 일 수 있다. - 프로퍼티 : SelectionRange함수를 통해서, 트랙바의 일정 범위의 값을 반전시키는 것도 가끔 사용된다. 8. RichTextEdit Control : Document탭의 각 프로퍼티를 체크함에 따라, 워드패드의 기능 을 지원할 수 있다.(Ruler bar, Toolbar등) 파워빌더 교육

50 파워빌더 교육 10. DropDownListBox Control : 드롭다운리스트 박스는 리스트박스와 싱글라인에디트의
기능을 합쳐놓은 것이다. 사용자는 정해진 목록 중에서 하나를 선택하여 사용할 수 있도록 한다. - 프로퍼티 : 만약 사용자가 아이템을 편집하도록 하려면, General탭의 AllowEdit를 체크하면 되며, Sorted속성을 체크를 하지 않 않으면, 정렬되지 않아서 실행 시 Items 탭에 작성한 순서 대로 나타나게 된다. DropDownPictureListBox Control : 드롭다운리스트 박스 컨트롤과 비슷하지만, 텍스트이외의 그림도 같이 할당 할 수 있다. 파워빌더 교육

51 파워빌더 교육 11. ListBox Control : 리스트 박스는 드롭다운 형태가 아닌, 리스트 형식으로 모든 Item들
을 보여준다. 프로퍼티의 General탭에서 MultiSelect를 선택하면 하나 이상의 값들을 선택할 수 있다. 11. ListView Control : 다양한 정렬 방법(ListviewLargeIcon!, Listviewlist!, ListviewReport!, ListviewsmallIcon!)으로 항목과 아이콘들을 나타낼 수 있다. 일반적으로 Addlitem 함수를 사용해서, 동적으로 리스트를 생성한다. 파워빌더 교육

52 파워빌더 교육 12. Tab Control : 여러 개의 탭 페이지로 구성될 수 있고, 각 탭 페이지마다 독립적인 작 업 공간으로 서로 다른 모습을 보일 수 있다. 탭 컨트롤은 전체를 선택하는 것이고, 탭 페이지를 선택하고자 한다면 탭 컨트롤 하단부 에 사각형을 선택하면 된다. 오른쪽 마우스를 누르면 활성화 되는 팝업 메뉴에서 Insert Tabpage를 선택 하는 것을 통해 텝 페이지를 추가 할 수 있다. Tabpage의 프로퍼티의 Tabpage의 Tab Text에 서 탭 페이지 상단부의 이름을 정의 할 수 있다. Tab Page의 머리말을 작성하는 화면이며, PictureName에서는 탭에 올려놓을 그림을 선택할 수 있다. 파워빌더 교육 (주)MNP

53 파워빌더 교육 13. Treeview Control : 주로 메뉴 오브젝트 대신에 많이 쓰이는 컨트롤 오브젝트로서, 계층도
를 나타낼 수 있으며, 가장 쉽게 접할 수 있는 것은 윈도우 탐색기 창 의 왼쪽 Frame부분이다. 트리뷰는 한 개 이상의 그림과 관련된 트리뷰 항목으로 구성된다. 트리뷰 컨트롤은 지금까지 알아본, 다른 윈도우 컨트롤과 다르게, 프로퍼티에 값을 설정하는 것 만으로는, 나타나지 않으며, 스크립트와 같이 사용해야 한다. 14. Grapt Control : 그래프 컨트롤은 다음과 같은 여러가지의 그래프 형태로 데이터를 표 시 할 수 있다. 그러나 데이터 윈도우의 Graph컨트롤이 많이 사용된다. 15. MonthCalender Control : 윈도우에 달력을 보여준다. 16. Date Picker : 에디트마스크컨트롤에서 날짜를 입력하 는 것 같은 형태이지만, 선택을 하면, 하 단부에 달력이 나와서 선택을 할 수 있 도록 제공해 준다. 파워빌더 교육

54 파워빌더 교육 17. Animation Control : 새롭게 추가된 윈도우 컨트롤 오브젝트로서, avi파일을 재생 할 수
있는 컨트롤이다. 이전 버전에서는 ole오브젝트를 이용해야 했지만, 프로퍼티의 AnimationName 부분에 avi위치를 할당하고 하단부의 AutoPlay를 선택하면, 자동으로 해당 avi파일이 재생된다. 다만, avi 파일이 소리를 포함하고 있으면 재생이 안되는 제약사항이 존재한 다. 18. OLE Control : 파워빌더 자체적으로 처리 할 수 없는 객체들을 윈도우에 할당하여 사용 하고자 할 때 사용되며, 외부 OCX나 DLL파일들을 레지스트리에 등록해서 사용 할 수 있다. OLE를 이용한 그림판을 윈도우에 할당 후 ole오브젝트 가 위치 할 곳을 선택하면 해당 프로그램이 실행되고, 파워빌더 외부에서 작성을 하게 된다. 작성을 마치면, 그림 판의 경우, 열려진 그림판을 닫으면, 파워빌더의 윈도우로 복귀된다. 또한, 실행 후에 OLE오브젝트를 사 용한 것을 더블 클릭하게 되면 다시 해당 프로그램이 파워빌더 안에서 로드된다. Browser를 통해 OLE들이 사용하는 이벤트와 함수를 볼 수 있다. 필요에 따라 이것을 이용하여 OLE들의 필요한 값을 가지고 올 수도 있다. 19. User Object Control : 유저오브젝트를 선택하면, 해당 PBL에 기존에 만들어진 유저 오브 젝트를 사용하기 위한 설정 창이 나타나게 되고, 사용 할 유저 오 브젝트를 선택하면 된다. 파워빌더 교육

55 파워빌더 교육 19. 윈도우 컨트롤의 배치 : 다수의 오브젝트들이 존재할 경우, 정렬 및 사이즈 등을 같게 지 정할 수 있다.
메뉴 Format>Align, Space, Size 또는 윈도우의 페인터 바에서 조 절할 수 있다. 하나의 오브젝트와 동일하게 다른 오브젝트의 높이를 조절하려면: 기준이 되는 객체를 선택 후 Ctrl키를 누른 상태에서 반영할 객체 를 선택하고 원하는 페인터 바의 아이콘을 선택하면 된다. 파워빌더 교육

56 메뉴의 이해 메뉴 오브젝트 및 구성 Item 분 류 설 명 가속키 (Accelerator Key)
메뉴는 메뉴 아이템이라고 불리는 오브젝트들의 집합체이다. 메뉴 아이템이란 메뉴 안에 존재하는 오브젝트들로, MDI어플리케이션에서 작업을 수행할 수 있는 명령을 내릴 수 있는 유일한 존재이다. 가속키 툴바 생략기호 Item 구분선 단축키 분 류 설 명 가속키 (Accelerator Key) 메뉴 아이템의 특정 문자에 밑줄이 그어져서 나타난다. 사용자가 ALT키와 밑줄이 그어져 있는 문자를 누르면, 그 메뉴 아이템을 클릭 한 것과 같은 효과를 발생 시킨다. 예를 들어 위의 그림에서 New에서의 N이 가속키를 나타낸다. 단축키 (Short-cut 메뉴 아이템의 오른쪽에 보이는 한 개 이상의 키 조합으로 나타낸 것이다. 생략 기호 생략 부호(...)를 누르면 좀 더 상세히 찾는 것을 돕기 위한, Browser창이 열린다. 분리 선 (Separate Line) 연관성 있는 일을 하는 메뉴 아이템들을 수평선으로 나누어서 그룹화한다. 툴 바 (Tool bar) - 메뉴의 구성 중에 메뉴 아이템 중에 많이 사용하는 것들을 아이콘화 해서 해당 메뉴 아이템을 표현하고, 실행이 가능하도록 한다. 파워빌더 교육

57 메뉴의 종류 DropDown : 일반적으로 소량의 메뉴를 만들 때, 사용되는 방식으로 수직적으로만 메뉴 아이템들이 추가된다. Cascading : 드롭다운 메뉴의 확장적인 개념으로 드롭다운 메뉴 아이템 중에 연관성 있는 필요한 데이터 아이템이 있을 경우 수평으로 확장해 나간다. Popup : 사용자가 요구할 때 오브젝트 상이나 화면의 영역에서 오른쪽 마우스를 클릭하면 클릭한 곳에 보여지는 메뉴이다. 오른쪽 마우스 버튼을 클릭하였을때, 마우스 포인터의 위치에 팝업 메뉴의 메뉴 아이템들이 보여진다. m_row lm_row lm_row = create m_row Message.PowerObjectParm = this lm_row.m_appendrow.visible = true lm_row.m_sort.visible = true lm_row.m_filter.visible = true lm_row.popmenu(parent.PointerX(), parent.PointerY()) 파워빌더 교육

58 메뉴의 작성 파워빌더 교육 메뉴 페인터 Preview 메뉴 아이템 추가 메뉴 아이템 프로퍼티 스크립트 작성 메뉴 페인터
메뉴 File > New 또는 파워바의 을 클릭하여 PB Object탭에서 Menu를 눌러서 메뉴를 생성할 수 있는 메뉴페인터를 연다. Preview 메뉴 아이템 추가 메뉴 아이템 프로퍼티 스크립트 작성 메뉴 페인터 메뉴 File > New 또는 파워바의 을 클릭하여 PB Object탭에서 Menu를 눌러서 메뉴를 생성할 수 있는 메뉴페인터를 연다. 메뉴 설명 Script 메뉴 아이템의 스크립트 창으로 이동 Cut 잘라내기 Paste 붙여넣기 Delete 삭제 Duplicate 같은 레벨에 메뉴아이템 복사 Edit Menu Item Text 메뉴아이템의 Text 수정 Insert Menu Item 선택학 메뉴아이템과 같은 레벨의 제일 끝부분에 메뉴 아이템 추가 Insert Menu Item At End 선택한 메뉴아이템과 같은 레벨의 제일 끝부분에 메뉴 아이템 추가 Insert Submenu Item 메뉴 아이템과 관계 있는 Cascading메뉴를 만들 때 사용 Properties Properties창을 활성화 한다. 파워빌더 교육 (주)MNP

59 메뉴아이템 이벤트와 함수 메뉴아이템 이벤트 메뉴아이템 함수 파워빌더 교육 이벤트 설명 Cliked
어플리케이션에서 드롭다운이나 캐스캐이딩 메뉴의 각각 아이템들은 클릭했을 때 동작할 스크립트를 가지고 있다. Help F1 키를 누르거나, 메뉴를 가지고 있는 윈도우의 타이틀바에 있는 헬프버튼을 클릭한다. Selected 거의 사용을 하지 않지만, 사용자가 메뉴를 따라서 스크롤 할 때 보여지는 MicroHelp를 변경하기 위해서 사용한다. 메뉴아이템 함수 함수 설명 Check Cacading 메뉴에 체크표시를 나타내고, 메뉴 아이템의 Checked()속성을 TRUE로 설정한다. Ex) menuname.Check() Disable 메뉴상의 아이템을 사용할 수 없도록 한다. 이때의 메뉴 아이템의 색이 흐릿해지고, 선택할 수 없다. Ex)menuname.Disable() Hide 메뉴를 보이지 않게 한다. Ex)Objectname.Hide() PopMenu 명시한 위치에 메뉴를 나타낸다. Ex)menuname.PopMenu(xlocation, ylocation) Show 메뉴를 보이게 한다. Ex) objectname.Show() TriggerEvent 주어진 object와 연관된 이벤트를 트리거하여 이벤트에 관한 스크립트를 즉시 실행 Ex)objectname.TriggerEvent(event{,word,long}) TypeOf Object 또는 control의 타입을 Object 열거형 데이터 타입의 값으로 나타낸다. Ex) objectname.TypeOf() [Return 값]Object 열거형 데이터 타입. Objectname의 타입을 리턴한다. UnCheck Cacading메뉴 아이템의 checkmark를 제거하고 다음아이템으로 진행하고 아이템의 Checked property를 FALSE로 설정한다. Ex) menuname.Uncheck() 파워빌더 교육

60 5. 객체의 이해 목표 목차 ▣ 파워빌더의 OOP지원 방법과 객체의 종류를 안다. ▶ OOP의 세가지 특성을 이해한다.
파워빌더 교육 5. 객체의 이해 목표 ▣ 파워빌더의 OOP지원 방법과 객체의 종류를 안다. ▶ OOP의 세가지 특성을 이해한다. ▶ 객체를 상속하여 사용할 수 있다. 목차 ▶ 파워빌더의 OOP ▶ 파워빌더의 객체 ▶ 상속 파워빌더 교육 (주)MNP

61 파워빌더의 객체지향(OOP) 지원 Object 파워빌더 교육
파워빌더는 OOP(Object Oriented Programming – 객체기반의 프로그래밍 방식)을 지원한다. 객체 지향 프로그램에서 객체란 데이터와 그 데이터를 다루는 매소드들로 이루어진 자체적으로 완전한 모듈이다. Property Object Event Method Function 객체는 독립적인 행동을 할 수 있는 하나의 사물로 Property와 Method로 구성된다. Object안에 Object가 들어간다. Visual Object : Window, Menu, Datawindow Notvisual Object : Transaction, DataStore, Application 파워빌더 교육

62 Property Method 파워빌더 교육 Property는 객체의 외향적인 모습을 정의한다.
예) Window : X, Y, Height, Width, Visible, Title, Resizable Application : MicroHelpDefault, DWMessageTitle Height = 150 Width = 200 Height = 200 Width = 150 Method 메소드는 Event와 Function으로 구성된다. 파워빌더에서 Event와 Function은 아규먼트와 리턴값을 가질 수 있고, PostTrigger로 호출할 수 있는 등의 공통점이 있으나 이벤트는 오브젝트에서만 정의 될 수 있고 상속에 있어서도 차이점을 갖고 있다. 이를 인지하여 선택 사용 한다. 파워빌더에서 Event의 예) - Clicked - Constructor - Open - RButtonDown - RetrieveStart Clicked Event Close(Window) 파워빌더 교육

63 Class와 instance OOP의 특성 파워빌더 교육 파워빌더에 미리 만들어져 있는 함수들 Open() Close()
Show() Hide() Retrieve() Update() Class와 instance Class : 객체가 만들어져 있는 상태 Instance : 객체가 실행되어 실제 프로그램으로 구동된 상태 하나의 Class가 여러 개의 instance로 구동이 된다. 예) w_main01 lw_main01_1, lw_main01_2 => w_main01은 Class OpenSheet(lw_mani01_1, w_mdi_main) =>lw_main01_1은 instance OpenSheet(lw_mani01_2, w_mdi_main) =>lw_main01_2은 instance OOP의 특성 OOP는 상속성, 다형성, 캡슐화 등 세가지 대표적 특성을 가지고 있다. 상속성(Inheritance) : 공통적인 특성을 가지고 있는 조상(Ancestor)을 만들어서, 조상에서 파생되는 자손(Child)들을 모두 동일한 형식을 가지게 하며, 조상이 바뀌게 되면 그 자손들도 자동으로 바뀌어지게 하는 것이 상속의 개념이다. 파워빌더에서 이러한 상속이 적용되는 객체는 다음과 같다. (Window, Menu, User Object) 파워빌더 교육

64 파워빌더 교육 다형성(Polymorphism) : 두개 이상의 오브젝트들이 다른 작업을 수행하지만 동일한 이름을 가
지는 함수를 가질 수 있다. 즉 하나의 함수를 가지고 다른 작업을 수행 할 수 있도록 허용하는 것 이다. 예) +연산자의 사용 캡슐화(Encapsulate) : 파워빌더에서는 주로 사용자 정의 함수를 만들 때 사용된다. 함수가 오브젝트안에서만 사용되도록 하기 위해 접근 권한을 Private나 Protected로 해야 하며, 이러한 방식으로 오브젝트의 외부에서 이 함수 가 부적절하게 다른 곳에서 호출되는 것을 막을 수 있다. 파워빌더 교육

65 파워빌더의 객체 응용프로그램의 구조 파워빌더에 있는 대표적인 객체 파워빌더 교육
파워빌더 응용프로그램의 시작은 Application객체를 통해야만 가능하다. 응용프로그램에서는 사용자에게 보여질 하나의 윈도우 객체가 반드시 있어야만 한다. 파 파워빌더에서 사용자와 인터페이스할 수 있는 객체는 윈도우밖에 없기 때문이다. 그리고 최초에 열리는 윈도우 객체는 Application객체에서 지정을 해야한다. 윈도우에는 필요한 다른 객체들이 Control로서 존재한다. 그리고 여기서 파워스크립트 언어로 작성되는 메소드에 의해서 다른 윈도우를 열 수도 있다. 모든 작업을 마치고 모든 윈도우를 닫으면 응용프로그램이 종료된다.응용프로그램이 종료될 때 Application객체가 마무리를 한다. 파워빌더에 있는 대표적인 객체 객체의 종류 설명 Application 응용프로그램을 구분하기 위해서 사용되는 객체로 각 응용프로그램미다 반드시 하나씩 존재해야하며 응용프로그램의 시작 및 종료점. 윈도우 다른 객체가 사용자에게 보여지기 위해서는 반드시 윈도우 객체를 통해야 함 데이터윈도우 데이터베이스의 자료를 보여주는 객체 메뉴 MDI에 필수적으로 사용되는 객체 User Object 자주 사용되는 기능의 Control이나 함수 등을 미리 이해서 재 사용성을 높여주는 객체 Structure 구조체로서 정해진 형태로 여러 변수가 사용될 때 변수들을 하나의 대표되는 이름으로 묶어서 사용. 파워빌더 교육

66 상속 상속의 방법 상속 확인 파워빌더 교육 윈도우를 생성하면 파워빌더의 윈도우 클래스에서 상속받은 윈도우라고 표시된다.
상속을 하고 싶은 오브젝트에서 오른쪽 마우스 클릭을 통한 팝업 메뉴에서 ‘Inherit’를 누르거나, 메뉴 File>Inherit를 통해서, 상속받을 objcect를 선택한다. 상속 확인 브라우져를 이용하거나 스크립트에서 상속관계를 확인할 수 있다. 먼저 메뉴 Tools>Browser 또는 파워바의 아이콘을 눌러 Browser창을 띄운다. 상속관계를 보고싶은 오브젝트(‘Menu’, ‘User Objects’,’Window’)에서 오른쪽 마우스 클릭하여 ‘Show Hierachy’를 선택하고, ‘Expend All’을 하면 상속관계를 트리 형태로 확인 할 수 있다. 시스템트리에서는 불가능하다.를 알 수 있다. 스크립트에서 찾는 법을 윈도우를 예제로 보면 아래그림과 같이 왼쪽에는 윈도우명, 중간에는 현재 이벤트나 함수명, 오른쪽에는 또 윈도우명이 나타난다. 여기서 제일 오른쪽의 윈도우를 드롭다운 해보면 상속 history 를 알 수 있다. 파워빌더 교육

67 상속 오버라이딩 이벤트에서 상위 오브젝트가 있을 때 Ancestor의 로직을 먼저 수행하고 현재의 로직을 수행한다. 상위의 로직을 수행하고 싶지 않을 때 메뉴>> Edit >> Extend Ancestor Script의 체크를 해제한다. 현재 로직 수행 후 상위로직을 수행하고 싶을 때는 Extend Ancestor Script의 체크를 해제한후 맨 아래줄에 SUPER : event EvendName() Super : FunctionName() 와 같이 기술한다. 상위로직의 리턴값을 현재 매써드에 사용하고 싶을 때 AncestorReturnValue라는 값을 사용한다. IF AncestorReturnValue = 1 THEN 조상에서 만들어진 함수에 스크립트를 기술하면 오버라이딩(overriding)되어 조상의 함수내용은 수행하지 않고 자손에 기술된 함수만 수행된다. 객체내에서 함수는 오버로딩(overloading)이 가능하며 아규먼트의 개수나 타입이 틀리면 같은 이름으로 여러 개의 함수를 만들 수 있다. 전역함수는 오버로딩 기능이 제공되지 않는다. 파워빌더 교육

68 6. 윈도우 주요이벤트, 함수, 윈도우 계층의 이해 목표 목차
파워빌더 교육 6. 윈도우 주요이벤트, 함수, 윈도우 계층의 이해 목표 ▣ 윈도우의 주요 이벤트, 함수, 계층을 이해하는데 목표가 있다. ▶ 윈도우 주요이벤트를 이해한다. ▶ 윈도우 주요함수를 이해한다. ▶ 윈도우 계층구조를 이해한다. 목차 ▶ 윈도우의 이벤트와 함수 ▶ 윈도우 주요이벤트 ▶ 주요함수 ▶ 윈도우의 계층구조 파워빌더 교육 (주)MNP

69 윈도우의 이벤트와 함수 윈도우의 이벤트와 함수 파워빌더 교육 파워빌더의 각 객체는 이벤트와 함수를 가지고 있다.
이벤트는 해당 객체가 가질 수 있는 상태 정보를 나타내고 있다. 따라서 각각의 오브젝트마다 이벤트리스트가 다르다. 다음은 윈도우 오브젝트에서 기본적으로 제공하는 event와 function리스트이며 각 탭에서 확인할 수 있다. 사용자 이벤트나 함수를 작성하면 리스트에 추가되며, 스크립트가 있는 이벤트나 함수에는 앞에 이미지로 리스트그림이 보여진다. 파워빌더 교육

70 윈도우의 주요이벤트 파워빌더 교육 Open 윈도우가 처음 열릴 때 발생하며 이벤트 종료 후에 실제 윈도우가 보인다.
윈도우가 열릴 때 이벤트 발생순서 : Open -> Activate -> Show -> Resize Activate 윈도우가 활성화 될 때 발생 다른 윈도우에서 포커스가 넘어올 때도 발생한다. Show 윈도우가 화면에 보여지기 직전에 발생한다. Resize 윈도우를 오픈하거나 크기를 조절할 때 발생 Clicked 윈도우의 영역 내에서 클릭하였을 때 발생되는 이벤트 Close 윈도우를 닫기 직전에 발생되는 이벤트 CloseQuery 윈도우가 닫히기 직전에 발생하여 리턴 값으로 윈도우가 닫히는 것을 조정할 수 있다. 작업 중 저장하지 않은 상태에서 close발생할 때 등 사용된다. 0 : 윈도우가 닫히는 것을 허용 1 : 윈도우가 닫히는 것을 취소 DragDrop Control상에서 Object를 드래그한 후 드롭 하였을 때 발생한다. RbuttonDown 윈도우의 영역 내에서 오른쪽 마우스 버튼을 클릭하였을 때 발생되는 이벤트.Popup메뉴를 띄우는 등에 사용한다. Timer Timer함수가 수행될 때 처음 timer 이벤트를 발생시킨다. Timer함수에 지정된 초마다 이벤트의 내용이 실행되며 일정한 시간 간격으로 동일한 일을 반복 수행하고 하는 경우에 사용할 수 있다. 사용자 이벤트 보통 윈도우를 열거나 닫을 때 사용자 이벤트를 많이 작성한다. 윈도우를 열기 전, 열고나서, 또는 닫기 전에 처리해주어야 할 일들을 class의 사용자이벤트에서 작성하여 모든 윈도우에 적용되도록 한다. 파워빌더 교육

71 주요 함수 파워빌더 교육 ChangeMenu
윈도우와 연관된 메뉴를 변경한다. 윈도우가 MDI프레임 윈도우일 경우, ChangeMenu함수는 Open Sheet리스트에 현재 활성화된 메뉴를 추가한다. Windowname.ChangeMenu(menuname{,position}) [Return 값]Integer 성공하면 1 실패하면 -1 CloseUserObject 사용자가 Object를 닫고 Destructor이벤트에 관한 스크립트를 실행한다. Windowname.CloseUserObject(userobjectname) GetParent 주어진 Object의 Parent를 구한다. Objectname.GetParent() [Return 값]Power Object GetToolbar 주어진 툴바 현재 값을 구한다. Window.GetToolbar(toolbarindex, visible {,alignment {, floatingtitle}}) Move Parent 윈도우 또는 어떤 윈도우 object의 상대적인 다른 위치로 이동 Objectname.Move(x, y) ParentWindow 윈도우의 Parent윈도우를 구한다. Windowname.ParentWindow() SetFocus 주어진 Object나 Control에 Focus를 설정한다. Objectname.SetFocus() Print 인쇄작업에 Visual Object와 윈도우를 포함하여 Print Open함수와 함께 실행된다. Objectname.Print(printobnumber, x, y {,width, height}) Resize Width와 Height property를 설정하여 object나 control의 크기를 변경하고 다시 보여준다. Objectname.Resize(width, height) SetRedraw Property가 변경될 때 마다 object나 control을 자동으로 다시 그릴 것 인지 제어한다. Objectname.SetRedraw(boolean) Show Object또는 control을 보이게한다. Object가 보여지는 상태이면, Show함수는 그 object를 제일 위로 가져온다. Objectname.Show() TriggerEvent 주어진 object와 연관된 이벤트를 트리거하여 스크립트를 실행한다. Objectname.TriggerEvent(event{,worl, long}) 예전에 사용하던 방식으로 현재는 event가 함수와 동일하게 사용되므로 거의 사용되지 않는다. cb_1.TriggerEvent(“clicked”) cb_2.event Clicked(…) 파워빌더 교육

72 윈도우 계층구조 윈도우와 컨트롤 Control[] 파워빌더 교육
윈도우는 많은 컨트롤(객체)로 구성되어 있으며 각 컨트롤들은 속성과 이벤트들을 포함하고 있다. 컨트롤들은 Control[]속성으로 윈도우에 속한다. w_dw_html.cb_command.text = ‘바꾸고 싶은 단어’ Tabpage는 윈도우에 바로 속하지 않고 tab control에 속한다. w_dw_html.tab_tabpage_1.text=‘tabpage title’ Tabpage내의 컨트롤들은 tabpage를 통해서 통제할 수 있다. w_dw_html.tab_tab.tabpage_1.cbx_in_tabpage.checked=false 메뉴객체는 컨트롤로 윈도우에 속하지 않고 별도의 속성(menuname)으로 연결되고 그 값은 가변적으로 변경할 수 있다. w_dw_html.menuname = ‘메뉴이름’ w_dw_html.Changemenu(바꿀메뉴이름) 메뉴에서 메뉴를 포함한 윈도우를 연결할 때는 ParentWindow대명사를 사용한다. Control[] 윈도우에 속한 컨트롤들은 Control[]속성으로 알 수 있다. 컨트롤들의 내용을 파악하기 위해서는 ClassName, TypeOf등의 함수를 이용한다. String = ClassName() Object = Typeof() Object는 enumerated type으로 Brower에서 그 내용을 확인한다. 파워빌더 교육

73 MDI윈도우 파워빌더 교육 다음은 윈도우에 속한 컨트롤의 목록을 MultiLineEdit컨트롤에 보여주는 스크립트이다.
컨트롤에서 윈도우를 지칭할 때는 Parent를 이용할 수 있다. 물론 그 윈도우 객체의 이름을 직접 기술하여야 된다. MDI윈도우 MDI윈도우는 보통 별도의 컨트롤을 포함하지 않지만 별도의 컨트롤을 위치시켜야 한다면 mdi_1에 대해서 알아야 한다. 파워빌더 교육

74 7. 파워스크립트 상세설명 목표 목차 ▣ 파워스크립트의 개요와 함수의 사용법을 이해한다. ▶ 파워스크립트를 이해한다.
파워빌더 교육 7. 파워스크립트 상세설명 목표 ▣ 파워스크립트의 개요와 함수의 사용법을 이해한다. ▶ 파워스크립트를 이해한다. ▶ 파워스크립트 Naming Rule을 살펴본다. ▶ 파워스크립트의 함수를 이해한다. ▶ Null과 Empty Stiring의 차이를 이해한다. 목차 ▶ 파워스크립트 개요 ▶ Naming Rule ▶ 이벤트와 함수 ▶ Date 관련 함수 ▶ 숫자 관련 함수 ▶ File 관련 함수 ▶ ini파일 관련 함수 ▶ Registry 관련 함수 ▶ Null과 EmptyString의 차이 파워빌더 교육 (주)MNP

75 파워스크립트 개요 스크립트 페인터 스크립트 페인터 툴바 파워빌더 교육
파워빌더에서 작성되는 코드인 파워스크립트를 작성하기 위해서는 각 객체나 컨트롤을 더블클릭하거나, 메뉴의 View > Script를 선택하거나, Short-Cut Key로는 <Ctrl + K>를 이용하여 스크립트 페인터를 펼친다. 스크립트 페인터 툴바 스크립트 화면에서의 Popup menu, 메뉴 Edit, 스크립트 페인터바의 툴바는 동일. Popup 메뉴의 주요기능 분류 설명 Paste Special Case문이나, 함수, 이벤트 등등을 붙일 수 있다. Paste Special팝업 메뉴의 기능은 다음과 같다. 분류 설명 Function Built in(파워빌더 내부 함수), User-defined(사용자가 함수), External(Global External Function) 선택에 따라 각 함수리스트들이 나타난다. SQL SQL문 참조하게 도와줌. Tatement 분기문 참조하게 도와줌. Global 선언해 놓은 Global변수 리스트를 보여준다. Shared 선언해 놓은 Shared변수 리스트를 보여준다. Instance 선언해 놓은 Instance 변수 리스트를 보여줌. Window Library Search Path에 걸린 PBL들이 가지고 있는 Object리스트를 보여준다. Object Argument 해당 함수가 가지고 있는 Argment 리스트를 보여준다. From File 파일로부터 읽어올 수 있으며, 일반적으로 .fun(함수를 Export 한 파일)을 읽어온다. 파워빌더 교육

76 분류 설명 Find 스크립트 창에서 원하는 글자를 찾을 수 있다. Ctrl + F를 통해서도 명령을 실행할 수 있다. Go to 가고자 원하는 Event, Function등으로 선택에 의해 한번에 갈 수 있다. Comment Selection 스크립트에 작성된 스크립트를 마우스나 키보드로 반전시킨 것들을 모두 주석처리 한다. Uncomment Selection 스크립트 창에 작성된 스크립트를 마우스나 키보드로 반전시킨것들을 모두 주석해제 처리한다. Compile 스크립트를 컴파일 한다. Ctrl + L Extended Ancestor Script 체크를 하지 않으면, 조상에서 작성한 스크립트를 상속하지 않는다. Activate AutoScript AutoScript기능을 활성화 한다. Insert BreakPoint 디버그를 위한 Breakpoint를 설정한다. 변수의 사용 변수는 저장되는 위치에 따라 4가지 영역으로 나누어진다. 파워스크립트언어에서 제공하는 네 가지의 영역은 각각의 범위가 존재하는데 변수를 제외하고는 Global, Shared, Instance변수를 줄 수 있는 공간이 따로 있다. Global Instance Instance Local Local Local : 해당 스크립트 안에서만 참조 Instance : 오브젝트에 포함되어 있는 변수 메모리에 할당되는 시점부터 메모리가 풀리는 시점까지 사용 할 수 있다. Shared : 한 클래스에서 오브젝트의 인스턴스 간에 존재하는 변수 항상 Private속성으로 그 오브젝트 안에서만 참조가 가능하다. Global : 해당 파워빌더 라이브러이 안에 어떠한 객체에도 언제나 호출해서 사용할 수 있다. 파워빌더 교육

77 Naming rule Naming rule(Data Type) Naming rule(Class) 파워빌더 교육
파워빌더의 범위, Data Type에 따라 Prefix를 사용하여 Naming을 한다. - 범위 ◇ Global : g gnv_security, gtr_orderentry ◇ Instance : I inv_cst_login ◇ Local : l ll_row - 데이터타입 ◇ nonvisual object : nv ◇ long : l ◇ transaction object : tr Naming rule(Class) 클래스 Prefix Naming Example CheckBox cbx cbx_ec Command Button cb cb_close Datastore Ds Ds_stockreport Datawindow Control Dw Dw_ec Datawindow Object D D_store Drop Down List Box Ddlb Ddlb_states Edit Mask Em Em_phone Error Err Err_ec Function F F_cal Graph Gr Gr_sales List Box Lb Lb_ic Menu M M_ec Message Msg Msg_ina Multi Line Edit Mle Mle_note Picture P P_ec Radio Button Rb Rb_male Single Line Edit Sle Sle_auto Static Text St St_blink Structure S S_tall Tab Tab_folder Transaction Tr Tr_ec Tree View Tv Tv_directory Window w W_ic 파워빌더 교육

78 이벤트와 함수 이벤트와 함수의 호출 사용자 정의 이벤트 작성 파워빌더 교육
스크립트에서 일반적인 함수 및 이벤트 호출 문법은 다음과 같다. Object name.(static) (trigger) (function) Function name Dynamic post event Event name Static Vs Dynamic : 기본은 Static이며 Static일 경우는 컴파일 할 때, 오브젝트의 이벤트 리스트 중에 이벤트 또는 Function이 있는 지 조사한다. Dynamin으로 작성 할 경우 실제 해당 이벤트가 없더라도 스크립트 창에서는 에러가 발생되지 않고, 나중에 실행 할 때 검사한다. Trigger Vs Post : Trigger는 즉시 발생하며 Post는 Event의 행위나 함수의 로직이 모두 수행된후 발생시킨다. 사용자 정의 이벤트 작성 파워빌더에서는 User-Event라 불리우는 사용자 정의 이벤트를 만들수 있다. 오브젝트의 Event List에서 오른쪽 마우스를 클릭하면 나타나는 메뉴에서 Add를 누르거나 이벤트 리스트의 제일 상단 부분을 보면 New Event를 클릭한다. Access : 접근 권한을 지정할 수 있으며, Event에서는 Public타입만 사용이 된다. Return Type : Return변수의 Type을 지정. 리턴해 주는 값이 없다면 맨 밑에 있는 ‘None’을 선택 Event Name : 사용자 정의 이벤트의 이름을 주는 공간으로, 40개의 문자까지 이름으로 줄 수 있다. User-Event의 약자인 ue_로 시작하는 의미있는 변수 명을 주는 것이 나중에 관리하기 편하다. 파워빌더 교육

79 함수 생성 파워빌더 교육 Pass By : 값을 받아 올 때 어떠한 형식으로 받아 올 것 인가를 정하는 부분이다. 값 설명
Value 이벤트 안에서는 값을 변경할 수 있지만, 원래의 넘겨준 쪽의 아규먼트의 값은 변하지 않음 Reference 넘겨 받은 아규먼트에 대한 접근권한을 가지며, 이것을 직접 변경 가능. Read only Value와 Reference의 혼합 개념으로, 상대방에게 넘겨 받은 값은 사용할 수 있으나, 상수로 취급되며, value처럼 복사본을 만들지는 않음. Event ID : 사용자 정의 이벤트로 이벤트를 만들 때, Windows에서 받을 수 있는 Event값들을 가지고 사용 할 수 있는 공간이다. 윈도우의 메시지는 각각 파워빌더 이벤트 ID에 맵핑되어져 있다. 예를 들어 wm_Keydown은 pdm_keydown으로 맴핑되어 있다. Event id를 선택하면, Return Type 및 Argument값들이 미리 지정되어 있는 것으로 바뀐다. 함수 생성 메뉴 File > New를 선택하여 Object 탭에서 Function을 선택하면 전역함수를 생성할 수 있다. External 함수의 사용 (Global, Local) 외부에서 만들어 놓은 함수를 이용하는 경우이며 문법은 다음과 같다. {access} FUNCTION returndatatype name ({{REF} datatype1 arg1, …, {REF} datatypen argn}) LIBRARY “libname” ALIAS FOR “extname” 사용자 정의 함수 작성법은 사용자 정의 이벤트와 비슷하다. 파워빌더 교육

80 사용자 정의 이벤트 작성 파워빌더 교육 Day 날짜 값에서 해당월의 일수를 구한다. Day(date)
[Return 값] integer : 해당월의 일수에 해당하는 정수 DayName 날짜 값의 요일을 결정하고 그 이름을 리턴한다. DayName(date) [Return 값]String : Date의 날짜에 해당하는 요일(Sunday, Monday등)을 문자열로 Return DayNumber 날짜 값의 요일을 결정하고, 요일에 해당하는 번호를 리턴한다. DayNumber(date) [Return 값] Integer : Date의 요일에 해당하는 정수(일요일 1, 월요일 2..등) DaysAfter 한 날짜 이후 다른 날짜까지 일수를 결정한다. DaysAfter(date1, date2) [Return 값] Long : Date1 이후 Date2까지의 일수를 Return Hour/Minute/Second Time값에서 시간/분/초를 구한다. 시간은 24시 기준으로 한다. Hour(time)/Minute(time) [Return 값] Integer : 시간 영역의 값(00-23)/분의 값(00-59)을 Return Month 날짜 값의 달을 구한다. Month(date) [Return 값] Integer : 날짜의 해당하는 월(1-12)을 Return Now 현재 시간을 구한다. Now() [Return 값] Integer : 현재시간 Return RelativeDate Date의 이전 또는 이후의 날짜를 구한. RelativeDate(date, n) [Return 값] Date : n이 0보다 크면, n일 이후의 날짜를 Return. N이 0보다 작으면, n일 이전의 날짜를 Return. RelativeTime Time의 이전 또는 이후의 시간을 구한다. RelativeTime(date, n) N : 초(second) [Return 값] Time : n이 0보다 크면, n초 이후의 시간을 Return. N이 0보다 작으면, n초 이전의 시간을 Return. Today 현재 날짜를 구한다. Today() [Return 값] Date : 현재 날짜를 Return 파워빌더 교육

81 숫자 관련 함수 파워빌더 교육 Abs 절대값을 계산한다. Ads(n) [Return 값] n 데이터타입 Ceiling
지정한 숫자보다 크거나 같은 값 중에서 가장 작은 수를 결정(올림) Ceiling(n) [Return 값] n의 데이터타입 Exp 지수승의 e(지수)를 계산한다. Exp(n) -> N : 지수 e( )를 계산하기 위한 승수 [Return 값] Double Fact 주어진 수의 Factorial을 구한다. Fact(n) [Return 값]Double Int 수치를 Integer형태로 변환 Int(n) [Return 값] Integer Int의 결과값이 integer의 범위값(-32768~32768)을 벗어나면 0리턴 Log 자연대수를 구한다. Log(n) Log함수의 역은 Exp 함수이다 Max/Min X, y중 큰 값 또는 작은 값을 구한다. Max(x,y) [Return 값] x 또는 y데이터 타입의 값 Min X, y중 작은 값을 구한다. [Return 값] x 또는 y 데이터 타입의 값 Mod 나눗셈의 나머지를 구한다. Mod(x,y) [Return 값]x 또는 y 데이터 타입의 값 Rand 1부터 주어진 수 중 임의의 수를 구한다. Rand(n) 파워빌더 교육

82 숫자 관련 함수 File 관련 함수 파워빌더 교육 Randomize 난수 발생기의 시작값을 지정한다. Randomize(n)
[Return 값] Integer Round 주어진 수의 소수 값을 반올림한다. Round(x,n) -> X:반올림 하려는 수 N:를 반올림하기 위한 소수 자리수(0~18) [Return 값] Decimal Sign 주어진 수의 음수, 0, 양수 여부를 나타낸다. Sign(n) Sin/Cos/Tan 각의 sine, Cos, Tan을 계산한다. Sin(n) -> n:sine/cosine/tangent을 계산하려는 각 [Return 값] Double Truncate 주어진 소수 자리 수 이후를 잘라낸다.(버림) Truncate(x, n) -> X:잘라내려는 수 N: 잘라내려는 수의 소수자리 수(0~18) File 관련 함수 FileClose 명시한 파일번호와 연관된 파일을 닫는다. 파일번호는 FileOpen함수에 의하여 파일에 할당된다. FileDelete 명시한 파일을 삭제한다. FileExists 명시한 파일의 존재여부를 나타낸다. FileLength 파일의 길이를 바이트로 나타낸다. Fileopen 읽거나 기록하기 위하여 명시한 파일을 오픈하고 고유한 integer파일 번호를 할당한다. 이 정수는 파일을 읽고, 기록하거나 닫을 때 그 파일을 확인하기 위하여 사용한다. 옵션 argument ilemode, fileaccess, filelock, writemode등은 파일이 오픈될 때의 모드를 결정한다. 파일이 존재하지 않을 경우에는, 새 파일이 생성된다. FileRead 명시한 파일번호(FileOpen 함수에 의하여 할당된다)와 연관된 파일로부터 데이터를 읽는다. FileSeek 파일포인터를 파일의 명시한 위치로 이동한다. 파일 포인터는 파일의 다음읽기 또는 쓰기가 시작될 곳이다. FileWrite 명시한 파일 번호와 연관된 파일에 데이터를 기록한다. 파일 번호는 FileOpen에 의하여 파일에 할당된다. 파워빌더 교육

83 ini 관련 함수 Registry 관련 함수 파워빌더 교육 ProfileSting
ProfileString() : INI 파일에서 값을 가져온다. ProfileString(filename, section, key, default) [Return 값] String : Filename의 section 내의 key 값을 리턴한다. SetProfileString INI파일 정보를 수정한다. SetProfileString(filename, section, key, value) [Return 값]integer Registry 관련 함수 RegistryDelete Window 시스템 레지스트리에서 키 또는 키의 값을 삭제한다. RegistryDelete(key, valuename) [Return 값] integer RegistryGet Windows 시스템 레지스트리에서 값을 구한다. RegistryGet(key, valuename, valuebariable) RegistryKeys Windows시스템 레지스트리에서 child 아이템(하위 키)의 리스트를 구한다. Registry(key, subkeys[]) RegistrySet 시스템 레지스트리에 키와 이름을 설정한다. 존재하지 않을 경우, RegistrySet함수는 새로운 키 또는 이름을 생성하고 그 값을 설정한다. RegistrySet(key, valuename, valuetype, value) RegistryValues 키와 관련되어 이름이 부여된 값들의 리스트를 구한다 RegistryValuse(key, valuenamep[]) 파워빌더 교육

84 Null과 EmptyString Null과 EmptyString의 차이 변수 초기값
EmptyString은 빈 문자열(“”)을 뜻하지만, Null은 정해지지 않았거나 알 수 없는 값을 의미한다. Null과 EmptyString은 파워빌더에서는 전혀 다른 값으로 취급되지만 데이터베이스에 따라 구분되지 않기도 한다. 전형적으로 null값은 데이터베이스 값에 관해서만 작동한다. 변수 초기값 Null은 비어있는 string이나 0, 날짜 값의 과는 다르다. 파워빌더가 모든 변수타입에 대해서 Null을 지원하지만 초기값이 Null로 되지는 않는다. 데이터베이스가 Null을 지원하고 insert나 update구문에서 null을 보낼 수 있다면 select에서 변수에 null을 담을 수 있다. 관련함수 (IsNull(), SetNull()) -IsNull() : 변수나 표현식이 Null값인지 아닌지를 체크한다. -SetNull() : 명시적으로 변수에 스크립트 상으로 Null값을 부여할 때 사용한다. String ls_test //ls_test는 Empty String SetNull(ls_test) //ls_test는 Null값 부여 파워빌더 교육

85 8. User Object의 이해/사용 목표 목차 ▣ User Object의 종류와 사용방법을 이해한다.
파워빌더 교육 8. User Object의 이해/사용 목표 ▣ User Object의 종류와 사용방법을 이해한다. ▶ User Object에 대해 이해한다. ▶ Non Visual Object와 Visual Object의 사용법을 이해한다. ▶ 조상 인스턴스의 변수의 속성 적용방법을 이해한다. 목차 ▶ User Object ▶ Non Visual Object ▶ Visaul Object ▶ User Object의 상속 파워빌더 교육 (주)MNP

86 User object User object 란? User object 란? 파워빌더 교육
파워빌더에서는 제공하는 오브젝트 이외에 사용자 오브젝트를 만들어서 사용할 수 있다. 동일한 기능을 반복해서 사용하는 경우, 공통적인 사용자 오브젝트를 정의하는 것이 관리하고 사용하기에 편리하다. User object 란? 메뉴 File>New또는 파워바의 를 클릭하고 PB object탭으로 가면 상단에 사용자 오브젝트로 만들 수 있는 5개의 오브젝트를 볼 수 있다. 사용자 오브젝트는 크게 보이지 않는 NVO(Non-Visual Object)와 보이는 SVUO(Standard Visual Object)로 나뉜다. 파워빌더 교육

87 Non Visual Object Custom Class Standard Class 파워빌더 교육
사용자에게는 보이지 않는 프로퍼티와 함수를 가지고 있으며, 아주 기본적인 함수 및 이벤트만 가지고 있으므로 필요한 함수 및 이벤트는 사용자가 직접 정의해서 사용해야 한다. 이 오브젝트 안의 함수 및 이벤트를 다른곳에서 사용하기 위해서는 인스턴스화를 거쳐야 한다. 인스턴스화 하는 방법 1. Instance 변수를 선언 2. Create문 사용 활성화 CREATE에 의해서 만들어진 Non Visual객체가 필요 없어지면 반드시 Destroy문을 이용해서 제거해 주어야 한다. Standard Class 에러 오브젝트 및 트랙잭션 오브젝트와 같이 사용자에게는 보이지 않지만, 파워빌더 내부에서 제공하고 있는 오브젝트에서 상속을 받는 것이다. 추가하려면 다음과 같이 제공하고 있는 것 중에 하나를 선택한다. 가장 많이 사용되는 것은 DataStore객체이며 다음과 가팅 생성된다. 파워빌더 교육

88 Visual Object Custom Visual Standard Visual External Visual 파워빌더 교육
NVO와는 달리 사용자 눈에 보이는 부분인 Layout 창을 가지고 있는 것이 특징이다. 여기서 사용가능한 오브젝트는 윈도우 컨트롤 오브젝트들을 두 개 이상으로 넣고 사용이 가능하다. 위의 그림과 같이 나열된 버튼들이 항상 필요한 컨트롤이라면 하나의 Layout에 작성이 가능한 것이다. 버튼에 대한 스크립트 작성도 가능하다. Standard Visual 사용자 눈에 보이는 Visual한 속성을 가지고 있는 것으로 다음과 같이 파워빌더에서 제공하는 윈도우 컨트롤오브젝트 중에 하나만을 선택해서 사용할 수 있다. Commandbutton을 선택한 예 External Visual 사용자 눈에 보이는 것으로 파워빌더가 아닌 다른 개발 환경에서 생성된 오브젝트의 컨트롤 또한 사용할 수 있다. 파워빌더 디자인의 한계를 넘어서기 위해 만들어 졌다. 파워빌더 교육

89 9.데이터윈도우의 이해 목표 목차 ▣ 데이터 윈도우를 이해한다. ▶ 데이터윈도우 객체와 데이터윈도우 컨트롤의 차이
파워빌더 교육 9.데이터윈도우의 이해 목표 ▣ 데이터 윈도우를 이해한다. ▶ 데이터윈도우 객체와 데이터윈도우 컨트롤의 차이 ▶ 용도에 맞는 Presentation style을 사용하여 데이터윈도우를 생성한다. ▶ DDDw와 데이터스토어를 사용할 수 있다. 목차 ▶ 데이터윈도우 개요 ▶ 데이터윈도우 객체와 데이터윈도우 컨트롤의 구분 – Object 할당 ▶ Presentation Style ▶ Data Source ▶ 주요이벤트 ▶ DDDW(drop Down Data Window) ▶ DD데이터윈도우의 활용_getChild() ▶ 데이터 스토어란? ▶ 데이터윈도우컨트롤 ▶ 데이터윈도우오브젝트만들기 ▶ 데이터스토어와 데이터공유 ▶ 데이터베이스 업데이트하기 ▶ 데이터에 접근하기 ▶ 데이터윈도우 속성에 접근하기 ▶ 데이터유효성 검증 파워빌더 교육 (주)MNP

90 데이터윈도우 개요 데이터 윈도우 개념 데이터 윈도우의 구조 Datawindow object의 생성 파워빌더 교육
데이터 윈도우는 파워빌더만이 가지고 있는 고유한 오브젝트로서, 데이터베이스와 연관된 작업을 할 때, 쉽게 결과를 나타내 줄 수 있고, 레포팅 기능까지 가지고 있는 오브젝트이다. 예를 들어 dw 오브젝트는 데이터베이스에서 실행되는 sql문을 string 속성으로 저장하고 있는데, 이 속성값을 추출하는 메소드(getsqlselect()) 와 실제 이 속성값을 이용해서 데이터 조회(retrieve()), 저장(update()) 등의 기능을 수행하는 메소드들을 모두 dw 컨트롤이 제공한다 데이터 윈도우의 구조 datawindow 데이터베이스에 있는 각 테이블이나 컬럼들 중 선택한 데이터를 가죠오고, 보여주고 조작 할 수 있도록 만들어진 객체인 Data Object와는 Datawindow Control로 이루어져 있다. Data Object는 Datawindodw Control의 버퍼를 통해서 테이블에서 데이터를 가지고 와서 버퍼에 그 정보를 담아 놓고, 사용자에게 보여주게 된다. Design (Report) Data Object Data Source (SQL) DataWindow Datawindow Control primaryBuffer FilterBuffer DeleteBuffer OriginalBuffer Datawindow object의 생성 Datawindow object의 생성과정 : 표현양식 선택(DataWindow Presentation Style) -> Data가 있는 곳 선택(Data Source) -> Table 및 Column선택 -> 디자인 선택(컬럼의 색, 폰트색 등등) -> 아규먼트 설정 파워빌더 교육

91 DW객체와 DW 컨트롤의 구분 – Object할당
데이터윈도우 컨트롤이란? 데이터윈도우 컨트롤은 SQL문 처리 및 디자인을 처리하는 데이터 오브젝트를 사용자 화면에 나타내 주기 위한 객체이다. 데이터 오브젝트에서는 값을 조회하고, 가공하는 역할을 하지만, 데이터윈도우 컨트롤에서는 실제 그 변경된 값들을 화면에 표시하기 위한 데이터윈도우 버퍼가 존재하고, 데이터베이스에 변경된 값을 Update하거나, 새로운 값을 Insert하는명령을 내리는 Flag값이 존재한다. IDE를 통해서 컨트롤에 객체 할당 데이터윈도우 컨트롤의 DataObject Property에서 데이터윈도우 오브젝트를 할당한다. 스크립트를 통해서 컨트롤에 객체 할당 스크립트에서 컨트롤에 객체를 할당할 수도 있다. Dw_products.DataObject = “d_products” 파워빌더 교육

92 Presentation Style Presentation Style 선택 Composite Style
DataWindow Object를 새로 작성하려면, Presentation Style, 즉 표현양식의 선택을 먼저 해야한다. 메뉴바의 File > New를 선택하고, DataWindow Tab으로 이동한다. Composite Style 이미 생성되어 있는 데이터 오브젝트를 선택하면 같은 형식이 아니더라도 2가지 이상의 데이터 오브젝트를 하나의 화면에 나타낼 수 있다. Crosstab Style Crosstab Style은 매트릭스 형태로 데이터를 조회하고자 할 때 사용된다. 파워빌더 교육

93 FreeForm Style Graph Style Grid Style Group Style Label Style
입력 할 때 가장 많이 사용되는 형태 중 하나로써, 여러 줄을 처리할 때 사용된다. 정형화 된 형식이 아니므로, 개발자가 마음대로 형식을 정의해서 사용할 수 있으며, 대부분 많은 양의 자료 입력이 필요할 때 사용한다. Graph Style 데이터를 다양한 형태의 그래프로 보여줄 수 있으며, 17가지의 그래프 형태가 지원된다. 그래프를 사용하기 위해서는 프로퍼티의 Series, Categories, Value에 어떠한 값을 설정해야 하는지 알아야한다. Series 서로 연관된 데이터 포인트들의 각 세트들의 집합 Categories 그래프의 가로 축인 데이터의 구분 Value 그래프의 세로 축인 데이터 값 할당 Grid Style 스프레드 시트와 같이 Row와 칼럼이 격자로 구분되며 사용자가 칼럼의 폭(width)를 조절하거나 위치를 조절할 수 있다. Grid Style은 Tabluar Style과 거의 비슷하지만 행과 열에 선이 구분되어 있다는 것이 차이점이다. 선이 셀의 구조로 고정되기 때문에 원하는 형태로 디자인할 수 없다. Group Style 자료를 그룹화하여 그것에 대한 자료를 계산해서 표현할 수 있으며, 기본 몇가지(현재일자/페이지 등)의 Compute칼럼이 자동으로 생성된다. Label Style Label Style은 데이터를 Label형태로 보여주며, 라벨지에 주소, 명함, 이름표등을 만드는 데 사용한다ㅏ. 출력하고자 하는 라벨지의 종류를 선택할 수 잇으며, 가장자리 테두리는 Print Preview화면이라는 것을 의미한다. N –Up Style 한 Row에 여러 레코드를 처리할 경우에 사용한다. 워드나 한글프로그램에서 다단형식을 지원하는 것과 같이 N-Up Style은 다단을 지원한다. 파워빌더 교육

94 OLE 2.0 Style Rich Text Style Tabular Style TreeView Style 파워빌더 교육
OLE 2.0 Style은 데이터 윈도우 오브젝트에 파워빌더에서 자체적으로 지원하지 않는 OLE오브젝트를 연결하고 내장할 수 있게 하고, 해당 데이터 윈도우를 더블 클릭하면 그 오브젝트에 해당하는 프로그램으로 연결된다. Rich Text Style 데이터베이스 컬럼을 나타내는 입력 필드의 포맷을 갖춘 텍스트로 나타낼 수 있도록 해준다. ‘{}’로 묶여 있는 것 이외에는 모든 사람에게 동일하게 갈 문장이므로, ‘?’부분만 상황에 따라 바꿔주면 되는 것이다. Tabular Style 가장 많이 사용되는 조회용 레포트 형식이다. 데이터윈도우 오브젝트에 한번에 나타낼 수 있는 행을 최대로 출력한다. TreeView Style 파워빌더 10.5버전으로 새롭게 만들어진 Style로 그룹형태와 비슷하지만 다음과 같이 TreeView형태로 확장 및 축소가 가능하다. 파워빌더 교육

95 Data Source Data Source선택 Data Source종류 파워빌더 교육
이 화면에서는 전에 어떤 표현양식을 선택했는지 또한 나타내 준다. Data Source종류 종류 형식 Quick Select 간단한 Select문 작성 시 사용 SQL select SQL문의 모든 기능을 사용(가장 많이 사용) Query 데이터가 쿼리 오브젝트(SQL문으로 저장 됨)로 정의되어 있을 때 사용된다. 주로, 동일한 컬럼을 선택하고, 여러 표현양식의 데이터 오브젝트를 만들 때 사용한다. External 데이터가 데이터베이스에 존재 하지 않는 경우 즉 스크립트를 이용해 데이터를 가져올 경누나, 데이터가 외부파일로부터 Import될 경우 (txt,DBF)에 사용된다. Stored Procedure 데이터가 stored procedure에 정의되어 있을 때 사용된다. Web services 파워빌더 11에서 새롭게 생긴 것으로 WSDL주소를 작성하면, 마법사를 통해서 Proxy를 자동으로 생성해주고, WSDL을 통해 받아 온 값들을 Datawindow에 보여줄때 사용된다. 파워빌더 교육

96 SQL Select Column 파워빌더 교육
칼럼들의 리스트가 보여지는 영역과 중간 부분에 테이블과 선택된 칼럼이 보이고 각 테이블간의 조인 관계를 보여주는 영역과 마지막으로 아래 부분에 Sort, Group, Where등의 기타 기능을 처리하는 영역으로 나뉘어 진다. Column 선택된 칼럼은 순서대로 디자인 화면에서 칼럼의 ID가 되기 때문에 순서가 중요하며 디자인 화면에서의 위치는 칼럼 ID와는 전혀 무관하다. 메뉴 Design > Convert to Syntax를 하면 그래픽 화면이 아닌 SQL문을 작성 할 수 있는 창이 나타난다. 파워빌더 교육

97 Table 필요한 테이블은 페인터바에서 아이콘을 선택하면 된다. 테이블의 리스트가 나오고 필요한 테이블을 선택하면 된다. 연관이 있는 테이블을 선택했다면 이름이 같은 항목을 찾아서 아래의 그림자처럼 자동으로 조인을 맺어 준다. 위의 화면과 같이 연관 이쓴ㄴ 컬럼들은 조인을 맺어서 보여주거, 두칼럼이 어떤 조인이 걸렸는지는 가운데 조그마한 그림 을 클릭하여 아래의 그림처럼 조인의 상태를 알 수 있다. Where 종류 형식 Sort -Order By절 Where - Where절 Group -Group by절 Having - Having절 Compute - Select에 칼럼으로 들어간다. Syntax - 전체 작성된 Syntax 파워빌더 교육

98 Sort Where 파워빌더 교육 왼쪽 영역에 선택된 칼럼을 마우스로 드래그를 해서 오른쪽 화면으로 칼럼을 이동시키면 된다.
Column영역을 선택하면 열려 있는 테이블들의 모든 칼럼들이 DropDownListBox로 나타난다. 그 중에서 필요한 칼럼을 선택하거나 바로 Ediit해도 된다. Column영역을 선택하게 되면 기본적으로 Operator영역에슨 ‘=‘이 나온다. 여기서 필요한 내용을 선택하면 된다. Value에 값을 넣을 때 바로 Edit하거나 마우스의 오른쪽버튼을 클릭하면, 다음과 같은 Where 조건을 주는 PopUp메뉴가 나타난다. 파워빌더 교육

99 Group Having 파워빌더 교육 종류 형식 Column - 선택된 테이블 중에서 필요한 컬럼을 선택할 수 있다
Functions - 연결되어 있는 DBMS에서 사용하는 모든 함수를 선택할 수 있다. Arguments - Retrieval Argument에 기술한 내용중에서 선택할 수 있다. Value - Columns에서 선택된 칼럼의 실제 데이터가 보여지고 선택할 수 있다. Elect - Sub Query를 작성 할 수 있다. Retrieval Argument를 설정하는 방법으로 Where절을 처리하기 위해서는 먼저, 조회 값을 받을 변수 명인 Retrieval Argument를 만들고, 원하는 컬럼에 조건식을 작성해야한다. Retrieval Argument는 메뉴 Design > Retrieval Argument를 선택하면 다음과 같은 화면이 나타나게 된다. Group Group탭을 선택하면 왼쪽리스트박스에 칼럼들의 리스트가 나타나고 아래의그림과 같이, Group으로 잡고 싶은 컬럼을 왼쪽에 오른쪽으로 끌어서 놓으면 된다. Having Group By에 의해 지정된 그룹안에서 값을 조회 할 때, 어떠한 특정 값을 기준으로 조회 조건을 줄 때 사용된다. Having탭의 사용법은 Where탭과 동일하다. 파워빌더 교육

100 Computed Syntax Union 파워빌더 교육 마우스의 오른쪽 버튼을 이용해서 칼럼이나 함수등을 가지고 올수 있다.
Syntax탭은 이 전에 설정한 것들에 대해서 내부적으로 생성될 SQL문을 보여주는 곳이며, 마우스로 선택하고 Ctrl + C를 이용해서 복사 할 수 있다. Union Union은 Select문의 합집합이다. 보여주고자 하는 데이터가 여러 테이블에 다양한 조건에 의해서 데이터를 가져온다면 하나의 Select문으로 구성하기가 힘들다. 이런 경우 여러 개의 Select문을 만들어서 한번에 보여줄 수 있는데 이러한 경우 Union을 사용한다. Union에는 제약사항이 있는데 각 Select문에서 Select되는 칼럼의 개수와 데이터 형식이 같아야한다. Union을 사용하기 위해서는 메뉴 Design > Unions을 선택하면 다음과 같은 창이 나타난다. 파워빌더 교육

101 Distinct External Data Source 파워빌더 교육
Distinct는 중복되어서 Select되는 행을 하나의 행으로 만들어 준다. 메뉴 Design > Distinct을 선택하면 Syntax부분에 자동으로 지정된다. External Data Source External을 선택하게 되면 작업하고자 하는 칼럼을 직접 정의히면 된다. External Data Source는 데이터베이스와 관련이 있는 것이 아니므로 필요한 내용을 직접 정의해서 사용하는 것이다. 데이터베이스와는 관련이 없는 어떤 파일에서 자료를 읽어서 그 정보를 화면에 보여주고 편집을 한 후에 그 결과를 다른 파일로 만드는 작업을 한다고 할 때 external Data Source를 이용하고 데이터윈도우의 import와 Export등의 유용한 기능을 사용한다면 쉽게 작업을 할 수 있을 것이다. 파워빌더 교육

102 DDDW(Drop Down Data Window)
데이커윈도우내에 존재하는 또다른 데이터윈도우객체로 다른 테이블에 저장되어 있는 공통코드값을 선택하거나 보여줄 때 사용한다. DDDW생성은 다음과 같다. Tabular datawindow 생성 DropDownDW를 사용할 컬럼의 Edit Style을 지정 만들어진 데이터윈도우 객체를 DDDW로 사용할 데이터윈도우로 할당 Display column 선택 Data column선택 관련된 옵션을 지정(Line, Width) Dropdown DataWindow에 접근하기 Dropdown DataWindow는 child DataWindow이다. 데이터윈도우가 처음 Retrieve()나 InsertRow(0)할 때 dddw는 같이 retrieve(AutoRetrieve옵션이 켜져 있으면 – defalt GetChild()를 이용하여 Child Datawindow를 변수로 담을 수 있다. Dw안에 dw를 정의 할때…(dddw 또는 composite) DataWindowChild mgr_id dw_1.GetChild ("dept_head_id", mgr_id) mgr_id.SetTransObject (SQLCA) mgr_id.Retrieve ( ) 파워빌더 교육

103 DDDW의 활용 – GetChild() GetChild() DDDW의 활용 파워빌더 교육
Child DataWindow나 Composite DataWindow내의 Report를 참조하도록 함으로써, DataWindow나 Report를 다루기 위하여 사용할 수 있게 한다. DDDW의 활용 Child DataWindow는 데이터윈도우 객체 내에 존재하는 또 다른 데이터윈도우 객체를 의미한다. 보통의 경우는 이 Child 데이터윈도우를 제어할 필욕ㅏ없지만, 특수한 경우, Child데이터윈도우를 정렬하거나 자체적으로 Retrieval Argument가 있을 경우에는 직접 제어를 해야한다. 파워빌더 교육

104 데이터스토어 데이터스토어란? 데이터스토어를 사용하는 이유 데이터스토어의 설정 데이터스토어의 인스턴스화 파워빌더 교육
보이지 않는 데이터윈도우 컨트롤 데이터 윈도우 오브젝트를 할당 받는다 데이터 윈도우 컨트롤과 같은 이벤트 및 함수를 지닌다(Nonvisual) 데이터스토어에서 반드시 트랜잭션 오브젝트를 셋팅해야 한다. 데이터의 조회 방법은 데이터 윈도우 컨트롤과 같다. 데이터스토어를 사용하는 이유 Data Caching 인쇄는 되지만 보이지는 않는 레포트 Nonvisual계층으로부터 사용자 인터페이스와 데이터를 공유할 때 데이터스토어의 설정 인스턴스화 데이터윈도우 오브젝트의 할당(디자인 시에 할당되지 않았다면) 트랜잭션 오브젝트의 설정 데이터스토어의 매소드 호출 데이터스토어의 인스턴스화 Create문장 //Declare a variable Datastore ids_1 //if not already instantiated, create the datastore IF NOT IsValid(ids_1) Then Ids_1 = CREATE datastore END IF 파워빌더 교육

105 데이터스토어와 데이터 공유 데이터스토어 사용하기 시스템 클래스로 정의해서 사용하기 DataStore lds_1
IF Not IsValid( lds_1 ) THEN lds_1 = CREATE Datastore 유저오브젝트로 정의해서 사용하기 - u_ds lds_1 IF Not IsValid( lds_1 ) THEN lds_1 = CREATE u_ds 데이터스토어를 유저 오브젝트로 정의해서 사용하면 데이터베이스와 관련된 오류의 원인들은 “DBError” 이벤트에서 찾을 수 있고, 데이터스토어 관련 문법 오류들은 “Error” 이벤트에서 찾을 수 있다. 각각의 이벤트에 작성되는 스크립트는 데이터윈도우 컨트롤에 작성되는 스크립트와 동일하다.

106 데이터스토어의 메소드 사용하기 ShareData() 함수의 사용 파워빌더 교육 트랜잭션 오브젝트의 세팅과 데이터의 조회
//Set transaction object Ds_1.Settransobject(gtr_orderentry) //Retrieve data Ds_1.Retrieve() ShareData() 함수의 사용 Result set의 데이터 타입은 정확히 매치되어햐 한다 - 필요할 때마다 데이터소스로서 쿼리를 사용하도록 한다. 데이터를 공유할 오브젝트에게 데이터를 넘겨주기 위하여 ShareData()함수를 호출한다. //Share data with interface Ds_1.ShareData(dw_1) 파워빌더 교육

107 이벤트 아규먼트들 ItemError 이벤트 - 반환값 0 : 사용자 입력값을 무시하고 디폴트 시스템 오류 메시지를 보여준다.
- 반환값 0 : 사용자 입력값을 무시하고 디폴트 시스템 오류 메시지를 보여준다. 1 : 사용자 입력값을 무시하고 디폴트 시스템 오류메시지도 생략한다. 2 : 잘못된 입력값이라도 일단 메모리(Buffer)에 기록한다. 그러나 long 타입 칼럼에 abc와 같은 문자열값이 입력되면 같은 엉뚱한 값으로 기록된다. 3 : 사용자 입력값을 무시하고 새로 선택된 필드로 포커스를 이동한다. 예제 : Messagebox( “데이터 유효성 검증오류!” , & “잘못된 데이터가 입력되었습니다. 다시 입력해 주십시오!~r~n~r~n”+ & “<오류 정보> ~r~n” + & “* 오류가 발생한 라인 : ” + String( row ) + “~r~n” + & “* 오류가 발생한 컬럼 : ” + String( dwo.name ) + “~r~n” + & “* 오류가 발생시킨 입력값 : ” + String( data ) + “~r~n” + & “* 오류가 발생시킨 이전값 : ” + String( dwo.primary [row] ) ) RETURN 1 위 예제 스크립트처럼 스크립트 마지막에 Return 1 을 설정하면 ItemError 이벤트가 발생했을 때 사용자 정의 메시지 박스만 샐행되고, 디퐅트 시스템 오류 메시지는 생략된다. 이벤트 아규먼트들 아큐먼트명 데이터 타입 설명 row Long 유효성 검증을 통과하지 못해서 발생한 Row의 번호를 반환한다. dwo DWObject (column) 오류가 발생한 칼럼 오브젝트에 대한 레퍼런스 변수로써 오류가 발생한 칼럼명 : dwo.name 오류발생 이전의 원본 데이터값 : dwo.Primary[Row] data String Edit 컨트롤에 저장되어 있는 사용자 입력값을 반환한다.

108 DBError 이벤트 이벤트 아규먼트들 1 : 디폴트 시스템 오류 메시지를 생략한다. 예제 :
- 반환값 0 : ( Default ) 디폴트 시스템 오류 메시지를 보여준다. 1 : 디폴트 시스템 오류 메시지를 생략한다. 예제 : Messagebox( “저장실패!” , & “데이터베이스 저장에 실패했습니다.! ~r~n~r~n” + & “<오류 정보> ~r~n” + & “* SQLDBCode : ” + String( sqldbcode ) + “~r~n” + & “* SQLErrorText : ” + String( sqlerrtext ) + “~r~n” + & “* 오류가 발생한 라인 : ” + String( row ) ) RETURN 1 위 예제 스크립트처럼 스크립트 마지막에 Return 1 을 설정하면 DBError 이벤트가 발생했을 때 사용자 정의 메시지 박스만 샐행되고, 디퐅트 시스템 오류 메시지는 생략된다. Retrieve 작업 실패시에도 발생하므로 실제 개발중인 어플리케이션에 코딩할 때는 두 경우를 구분해서 메시지 박스를 뛰우도록 한다. 이벤트 아규먼트들 아큐먼트명 데이터 타입 설명 sqldbcode Long 데이터베이스 고유의 오류코드(데이터베이스 종류에 따라 다르다.)를 반환한다. sqlerrtext String 데이터베이스 고유의 오류메시지(데이터베이스 종류에 따라 다르다.)를 반환한다. sqlsyna tax 데이터베이스에서 오류를 발생시킨 SQL 문을 반환한다. buffer DWBuffer 오류가 발생한 데이터윈도우 컨트롤의 버퍼명을 반환한다. 이 때 버퍼명은 열거형 데이터 타입으로 반환되며, 다음 중 한가지 변수가 반환된다. Primary!, Filter!, Delete! row 오류가 발생한 row

109 데이터 조회 및 저장에 관련된 함수들 함수명 설명 AcceptText()
편집 컨트롤상에 임시 저장되어 있는 사용자 입력값을 해당 칼럼에 강제로 적용시킨다. 이때 검증작업을 통과한 사용자 입력값 해당 칼럼에 적용되며, 만일 검증작업을 통과하지 못하면 “ItemError()” 이벤트가 발생한다. DeleteRow() InsertRow() ReSelectRow() 특정 Row의 데이터만 재조회한다. 보통 “DBError()” 이벤트나 “ItemError()” 이벤트에서 오류가 발생한 Row의 원본 데이터를 재 조회할 때 사용한다. Retrieve() SetTransObject() 데이터윈도우 컨트롤 또는 데이터스토어에 타겟 데이터베이스에 대한 정보를 설정한다. Update() 이 함수는 2개의 Boolean 아큐먼트를 포함하고 있는데 하나는 AcceptText() 함수를 호출하고, 다른 하나는 ResetUpdate() 함수를 호출한다. 이 두개의 아규먼트는 디폴트로 True값이 설정되어 있다.

110 데이터 조회 및 저장에 관련된 함수들 함수명 설명 SetFilter()
dw_main.SetFilter("#1="+ String( min_qty) + " and #2=" + String(max_qty)) Filter() dw_main.Filter() ScrollNextPage() 다음페이지 ScrollNextRow() 다음줄 ScrollPriorPage() 이전페이지 ScrollPriorRow() ScrollToRow() 이전 Row SelectRow() 특정 Row를 반전시키거나 반전을 해제 한다. 그러나 선택된 Row를 현재 Row로 만들지는 않는다. SetRow() 특정 Row를 현재 Row로 만든다. 지정된 Row로 스크롤하지는 않는다. SetRowFocuslndicator() 현재 Row를 비주얼한 지시자로 표시해준다. 손 모양 ( Hand! ) 표시나 사용자가 지정한 그림 파일을 사용할 수 있다. SetSort() dw_emp.SetSort("emp_status A, emp_salary D") Sort() dw_emp.Sort( ) 내부적으로 데이터베이스에 전달되는 쿼리 정보와 조회된 데이터에 대한 프리젠테이션 정보로 구성되어 있으며, 이는 데이터윈도우 엔진 (pbdwe100.dll 파워빌더 10의 경우)에 의해 해석되고 데이터 윈도우 컨트롤에 의해 사용된다.

111 데이터스토어와 데이터 공유 데이터베이스 업데이트하기
데이터 공유하기 데이터 공유 하기 IF NOT isvalid (ids_data) THEN ids_data = CREATE u_ds ids_data.SetTransObject( SQLCA ) ids_data.Retrieve() ids_data.ShareData ( dw_products ) 데이터공유 끊기 ids_data.ShareDataOff() * Crosstab 데이터 윈도우와는 데이터를 공유할 수 없다. 데이터베이스 업데이트하기 메뉴 : Row>Update Properties... Where Clause for Update/Delete Key Column 변경전 키 칼럼값을 데이터베이스 내에 있는 동일 Row의 키 칼럼값과 비교하는 SQL Key and Updatable Column key 칼럼값과 저장 가능(updateable)한 칼럼값들의 변경전 칼럼값들 Key and Modified Column key 칼럼값과 변경된 칼럼들의 변경 전 칼럼값들을 데이터베이스 내에 있는 동일 Row의 칼럼 값 Key Modification Use Delete then Insert Row 전체가 삭제되고 새 Row가 새 키 칼럼값과 함께 “Insert”된다. Use Update 변경된 키 칼럼만 갱신한다. 몇몇 데이터베이스는 이러한 방식의 키 칼럼 변경을 지원하지 않으므로 “Use Updaet” 옵션을 사용하려면 먼저 사용중인 데이터베이스가 이방식을 지원하는지 알아 보아야 한다.

112 Insert Update Delete Original Primary Filter Delete dw_1.Update( )
Primary Buffer 조회된 데이터 “InsertRow()” 함수에 의해 새로 추가된 데이터들을 포함 DW컨트롤을 통해 보고 있는 데이터들... Filter Buffer 필터 조건에 의해 걸려진 데이터들을 포함하는 버퍼 보여지지는 않는다. Delete Buffer “DeleteRow()” 함수에 의해 “primary” 버퍼에서 삭제된 데이터들 Primary 버퍼가 변경되기 직전에 처음 조회한 테이터들을 “Original”버퍼에 저장해 둔다. Update() 엔진 (pbdwe100.dll)이 “Priamry”, “Filter”, “Delete” 버퍼에 저장되어 있는 Row의 플래그를 참조해서 SQL “Update”, “Insert”, “Delete” 문을 생성한다. 하나의 변경된 Row에 하나의 SQL 문이 생성된다. DW의 데이터 저장 기능을 제거하면 “Delete” 버퍼를 유지 하지 않는다. Insert Update Delete Original Primary Filter Delete dw_1.Update( ) New Row Modified Row 파워빌더 교육

113 Row / Column의 상태 플래그 Status Applies to
============================================= New! Rows NewModified! Rows NotModified! Rows and columns DataModified! Rows and columns 처음 조회된 Row / Column의 상태 플래그 Row : NotModified! Column : NotModified! 변경된 데이터가 있을 때 Row / Column의 상태 플래그 Row : NotModified!  DataModified! Column : NotModified!  DataModified! 새로 추가된 Row / Column의 상태 플래그 Row : New! Row : New!  NewModefied! Row / Column의 상태 플래그

114 SQL문 생성 Insert와 Update 문 생성
“Update()” 함수 호출하면 “Primary”와 “Filter”버퍼에 포함되어 있는 Row의 상태 플래그를 참조하여 데이터 윈도우 엔진이 “Insert”, “Update” 문을 생성한다. Delete 문 생성 “Delete” 버퍼로 이동된 Row들에 대해 생성된다. 실행순서 Delete  Insert  Update SQL문에 포함되는 칼럼들 데이터윈도우 오브젝트의 “Updateable Column” 리스트에 포함되어 있는 칼럼 “DataModified!” 상태의 칼럼 SQL문 생성 변경된 Row의 위치 알아내기 ll_row = dw_1.GetNextModified( 0, Primary ) Primary!, Delete!, Filter! 버퍼에서 사용가능하다. 0줄부터 시작하여 첫번째로 검색되는 Row의 번호를 반환한다. 칼럼의 상태 플래그 알아내기 l_status = dw_1.GetItemStatus( 5, “emp_name”, Primary! ) “Primary” 버퍼 5번째줄 “emp_name”의 상태 플래그를 읽어온다. Row의 상태 플래그 알아내기 칼럼자리에 “0”을 입력한다. 변경된 전체 Row의 개수 알아내기 ModifiedCount() DeleteCount()

115 분산환경에서의 데이터 동기화 하기 클라이언트 : 데이터 프리젠테이션과 관련된 부분이 실행 (DW)
어플리케이션서버 : 실제 데이터베이스와 통신하며 조회 및 저장수행(DS) 데이터 동기화 하기 변경된 데이터 외에 상태 플래그 정보도 함께 어플리케이션 서버에 전달 갱신된 최종 데이터를 클라이언트에 전달하거나 또는 저장 성공을 알리는 메시지를 클라이언트에 전다. 클라이언트단 데이터윈도우 컨트롤의 상태 플래그를 초기화 한다. 데이터 동기화 함수들 ids_1.GetFullState( lblb_data ) dw_cust.SetFullState( lblb_data ) ids_1.GetChanges( lblb_data ) dw_cust.SetChanges( lblb_data ) 함수명 설명 GetFullState ( ) DW 컨트롤또는 DS의 모든 정보를 Blob 변수에 저장한다. SetFullState ( ) Blob 변수에 저장된 모든 DW 정보를 다른 DW 컨트롤 또는 DS에 적용한다. GetChanges ( ) DW 컨트롤또는 DS의 변경된 정보를 Blob 변수에 저장한다. SetChanges ( ) Blob 변수에 저장되어 있는 변경된 DW 정보를 다른 DW 컨트롤 또는 DS에 적용한다.

116 데이터베이스 오류 처리하기 내장 SQL문 실행 시 발생한 오류 처리하기
트랜젝션 오브젝트의 속성값(SQLCode, SQLDBcode, SQLErrText)을 체크 SQLCode 속성체크 하기 0 : 성공 -1 : 오류발생 100 : 데이터가 존재하지 않음 데이터윈도우 함수 실행시 오류 처리하기 “DBError” 이벤트를 통해서 오류의 원인을 찾을 수 있다. 데이터윈도우 함수의 반환값 체크하기( Update(). Retrieve(). ReselectRow() ) Update() 함수의 반환값 1 : 성공 : 실패 Retrieve() 함수의 반환값 >= 1 : 조회 성공, 조회된 Row의 개수 -1 : 조회 실패 0 : 조회된 Row없음, “DBError” 이벤트는 발생하지 않는다. ReSelectRow() 함수의 반환값 1 : 조회성공, “Updateable Column”이 성공적으로 갱신됨 -1 : 조회실패, 재조회하려는 Row가 이미 다른 사용자에 의해 삭제된 경우 DBError 이벤트 활용하기 아큐먼트 목록 sqldbcode : 데이터베이스 고유 오류코드 sqlerrtext : 데이터베이스 고유의 오류메시지 sqlsyntax : 데이터베이스에서 오류를 발생시킨 SQL문 Buffer : 오류가 발생한 데이터윈도우 버퍼 Row : 오류가 발생한 Row의 번호 데이터베이스 오류 처리하기

117 Multiple-Row 업데이트시 오류처리하기
Primary 버퍼에서 오류가 발생한 경우 해당 Row로 스크롤해서 사용자가 오류를 수정할 수 있도록 처리한다. “DBError” 이벤트에 작성되는 스크립트 Rollback Using SQLCA IF buffer = Primary! THEN Messagebox(“Database error in row “ + String(row), + & “Code : “ + String(sqldbcode) + “.” + String(sqlerrtext)) This.ScrollToRow(Row) Return 1 END IF Filter 버퍼에서 오류가 발생한 경우 “Update()”함수를 호출하기 전에 먼저 “Filter” 버퍼를 “SetFilter(“”)” 초기화 한다. 그 다음 “Primary”버퍼와 동일하다. “Filter” 버퍼를 초기화 시키고 싶지 않다면 “RowsMove( )” 함수를 사용해서 “Primary” 버퍼로 이동시킨다. Delete 버퍼에서 오류가 발생한 경우 이 경우는 삭제하려는 시점에서 이미 다른 사용자가 동일한 데이터를 변경했거나 삭제했을 때 이다. “RowsDiscard()” 함수로 오류가 발생한 Row만 버퍼에서 삭제한 후, 다음 작업이 진행되도록 한다. Multiple-Row 업데이트시 오류처리하기

118 동시에 n개의 테이블 저장하기 IF dw_dept.Update() = 1 THEN
IF dw_emp.Update() = 1 THEN Commit Using SQLCA; ELSE RollBack Using SQLCA: END IF RollBack Using SQLCA; dw_dept가 업데이트 성공했다면 Row들의 상태 플래그가 모두 초기화 되었을 것이므로 두 번째 저장 버튼을 클릭할때는 dw_dept의 플래그는 모드 초기화되어 저장되지 않는다. 그러므로 아래처럼 스크립트 해야한다. IF dw_dept.Update(True, Flase) = 1 THEN IF dw_emp.Update(True, Flase) = 1 THEN dw_dept.ResetUpdate() dw_emp.ResetUpdate()

119 하나의 데이터윈도우로 동시에 n 개의 테이블 저장하기
/* multiupdate1 테이블 저장 */ li_rowcount = dw_1.RowCount() FOR i = 1 TO li_rowcount IF dw_1.GetItemStatus(i, 0, Primary!) = NewModified! OR & dw_1.GetItemStatus(i, "multiupdate1_id", Primary!) = DataModified! THEN dw_1.SetItem(i, "multiupdate2_id", dw_1.GetItemString(i, "multiupdate1_id")) END IF NEXT li_rc = dw_1.Update(true, false) IF li_rc = 1 THEN dw_1.Modify("multiupdate1_id.key= No") dw_1.Modify("multiupdate1_id.Update= No ") /* multiupdate2 테이블 저장 */ ls_ret = dw_1.Modify("Datawindow.Table.UpdateTable = 'multiupdate2'") dw_1.Modify("multiupdate2_id.key= Yes") dw_1.Modify("multiupdate2_id.Update= Yes") li_rc = dw_1.Update() COMMIT USing SQLCA; MessageBox("알림!", "저장성공!") ELSE Rollback Using SQLCA; //초기화 dw_1.Modify("Datawindow.Table.UpdateTable = 'multiupdate1'") dw_1.Modify("multiupdate1_id.key= Yes") dw_1.Modify("multiupdate1_id.Update= Yes") dw_1.Modify("multiupdate2_id.key= No") dw_1.Modify("multiupdate2_id.Update= No")

120 데이터에 접근하는 방법 단일 칼럼 함수를 사용한다. 다중 Row 데이터 표현식으로 접근한다.
데이터 표현식으로 접근할 수 있는 데이터 단일 칼럼 또는 계산필드(Computed field) 다중 칼럼(Multiple columns) 특정 범위의 데이터 블록 반전된 데이터(Selected data) 기본문법 DWc.Object dwc.Object.columname{.buffer}{,source}{[row]} .Data Selected [row, row] [row, col] [row,col, row,col] 굵은글씨 : 계산필드나 컬럼의 이름을 사용하는 경우 데이터에 접근하는 방법

121 100 영업부 200 마케팅부 300 연구소 100 영업부 200 마케팅부 300 연구소 단일 칼럼의 데이터에 접근하기
함수를 사용해서 접근하기 SetItem() GetItemDate() GetItemDateTime() GetItemTime GetItemDecimal() GetItemNumber() GetItemString() 데이터 표현식을 사용해서 접근하기 ls_name = dw_1.object.dept_nm[1] = dw_1.object.dept_nm.primary.current[1] ls_name = dw_1.object.Data[1,2] = dw_1.object.Data.primary.current [1,2] 필터버퍼에서 읽어오기 ls_name = dw_1.object.dept_nm.Filter[1] = dw_1.object.dept_nm.Filter.Current[1] 함수 사용의 이점 데이터를 칼럼 번호가 아니 칼럼명으로 접근할 때는 데이터 표현식보다 함수로 접근하는 것이 더 유리하다. 함수를 사용하게 되면 칼럼명을 스트링 변수로 처리해서 동적으로 설정할 수 있기 때문이다. li_data = dw_1.GetItemNumber( li_row, ls_colname ) 함수의 실행 속도가 데이터 표현식보다 약간 빠른다. 단일 칼럼의 데이터에 접근하기 100 영업부 200 마케팅부 300 연구소 변수 다중칼럼의 데이터들을 한줄의 표현식으로 저장할때... 참조한 칼럼과 동일한 데이터 타입의 변수 Any 데이터 타입 유저 오브젝트 구조체 배열 1차원 배열의 경우 고정배열과 가변배열로 선언할 수 있다. 다차원배열의 경우 고정 배열로 선언해서 사용해야 한다. Integer lia_dept[] lia_dept = dw_1.Object.deptid.Current 구조체의 경우 s_deptment lstr_deptment[] lstr_deptment[1].name = “Information System” 100 영업부 200 마케팅부 300 연구소

122 함수를 사용해서 다중 Row의 데이터에 접근하기
설명 Reset() DW의 모든 버퍼에 있는 Row들을 삭제한다. 이 때 데이터베이스에는 영향을 미치지 않는다. RowMove() 특정 버퍼에 있는 Row들을 다른 버퍼로 이동시킨다. RowsCopy() 특정 버퍼에 있는 Row들을 다른 버퍼로 복사한다. RowDiscard() 특정 범위에 있는 Row들을 버퍼에서 삭제한다. 이 때 데이터베이스에는 영향을 미치지 않는다. RowCount() “Primary” 버퍼에 있는 Row 개수를 반환한다. ModifiedCount() “Primary”와 “Filter” 버퍼에 있는 Row들 중 변경된 Row의 개수를 반환한다. FilteredCount() “Filter” 버퍼에 있는 Row 개수를 반환한다. DeletedCount() “Delete” 버퍼에 있는 Row 개수를 반환한다. 함수를 사용해서 다중 Row의 데이터에 접근하기

123 100 영업부 200 마케팅부 300 연구소 100 영업부 200 마케팅부 300 연구소 2,1 4,2
다중 Row에 접근하는 표현식 lstr_dept = dw_1.Object.Data[2] “Primary” 버퍼에 있는 전체 데이터를 “Any”타입 변수에 저장하는 예 la_any = dw_1.Object.Data 데이터 윈도우 복사하기 dw_2.Object.Data = dw_1.Object.Data 선택된 Row들만 복사하기 dw_2.Object.Data = dw_1.Object.Data.Selected 특정범위에 접근하기 다음은 2번째 Row, 1번째 칼럼 ~~~ 4번째 Row, 2번째 칼럼 lstr_array = dw_1.Object.Data[ 2,1,4,2 ] 100 영업부 200 마케팅부 300 연구소 데이터 표현식으로 다중 Row의 데이터에 접근 100 영업부 200 마케팅부 300 연구소 2,1 4,2 Browser : 속성 표현식을 보다 쉽게 작상할 수 있다. DW Syntax : 속성 표현식을 보다 쉽게 작상할 수 있다. Describe() Modify() Evaluate() 참고 : 데이터윈도우 오브젝트의 소스 코드 Processing = 0 : Tabular, N-up, Group, FreeForm, External Processing = 1 : Grid Processing = 2 : Label Processing = 3 : Graph Processing = 4 : Crosstab Processing = 5 : Composite Processing = 6 : Ole2 Processing = 7 : RichText

124 Browser 데이터윈도우 오브젝트가 포함하고 있는 컨트롤 리스트 및 각 컨트롤의 속성에 접근하는 문법도 얻을 수 있다.
이들 속성에 접근하는 문법을 클립보드에 복사해서 스크립트 코딩시 활용가능 Browser “Describe()” 함수를 사용해서 특정 속성값을 읽어오는 문법과 “Dot Notation”으로 읽어오는 문법 “Modify()” 함수를 사용해서 특정 속성값을 변경하는 문법과 “Dot Notation” 을 사용해서 변경하는 문법을 얻을 수 있다. 타 오브젝트의 속석과 다르게 조건문을 설정할 수 있다. isRowNew() : 현재 Row가 새로 입력된 Row인지를 “True/False” 로 알려줌 isRowModified() : 현재 Row가 변경된 Row인지를 “True/False” 로 알려줌 isSelected() : 현재 Row가 선택된 Row인지를 “True/False” 로 알려줌

125 속성 표현식 데이터 표현식과 유사한 점이 많다. <DWControl>.Object
“Dot Notation”의 경우 위 문법 다음에 “Data” 키워드나 칼럼명이 이어지는데 속성표현식은 “DataWindow” 키워드나 칼럼명, 계산필드(Computed field) 또는 데이터윈도우 오브젝트가 포함하는 각종 컨트롤 명이 이어진다. 예제 1> 데이터윈도우 오브젝트의 “ReadOnly” 속성을 “True”로 변경하는 예 <dwobject>.Object.DataWindow.ReadOnly = “Yes” 예제 2>”Header” 밴드에 위치하고 있는 product_id 텍스트를 “제품번호”로 변경 <dwobject>.Object.product_id_t.text = “제품번호” 속성값 설정하기 dw_1.Object.cust_id.Border = ‘0’ 동일 dw_1.Object.cust_id.Border = 0 dw_1.Object.DataWindow.ReadOnly = “Yes” 동일 dw_1.Object.DataWindow.ReadOnly = True 속성값 읽어오기 속성값을 설정할 때, 어떤 데이터 타입으로 설정하던 모두 스트링 타입으로 저장된다. ls_strvar = dw_1.Object.DataWindow.ReadOnly Child DataWindow의 속성값 읽어오기 칼럼명이나 레프트명 뒤에 “Object” 키워드를 한번더 붙여준어야 한다. ls_sql = dw_1.Object.picture_name.Object.datawindow.table.SQLselect ls_dept_name = dw_1.Object.dept_id.Object.dept_name[2] //dddw 의 두번째 Row의 값을 읽어온다. 속성 표현식

126 속성 표현식에 대한 동적 인터페이스 – Describe( ) 와 Modify( )
장점 전체 표현식을 동적 으로 구성하는 것이 가능하다. Describe() 함수를 사용해서 속성값을 읽어오기 dwcontrol.Describe(<Propertylist>) 반화값 : ? : 속성값이 설정되어 있지 않은 경우 ! : 아규먼트로 입력된 속성 표현식에 오류가 있는 경우 예제 1> dw오브젝트의 “Picture”컨트롤(star_pic)의 X좌표 값을 읽어오기 ls_star = dw_1.Describe(‘star_pic.X’) 예제 2> 데이터윈도우가 포함하고 있는 모든 컨트롤 리스트를 반환하는 예 ls_collist = dw_1.Describe(‘Datawindow.Objects’) 예제 3> 데이터윈도우 오브젝트의 바탕색을 읽어 들이는 예 ls_color = dw_1.Describe(‘DataWindow.Color’) Modify() 함수를 이용해서 속성값 변경하기 dwc.Modify(ModString) 예제 1> 오브젝트의 바탕색을 빨간색으로 변경하는 예 ls_mod = “Datawindow.color = 255” dw_1.Modify(ls_mod) 동일 dw_1.Modify(“DataWindow.Color = 255”) 예제 2> 칼럼의 바탕색 바꾸기 dw_1.Modify(“emp_id.Backround.Mode=‘0’”) mode = 0 : 불투명 1 : 투명 “cust_nm” 칼럼의 “Italic” 속성을 변경한다고 가정하자. dw_1.modify(“cust_nm.Font.Italic=1”) “Modify()” 함수가 실패 했을 때 오류 메시지 처리 ls_return = dw_1.Modify(“emp_id.Border = 0”) IF ls_return <> “”THEN Messagebox( “Problem”,ls_return ) END IF 속성 표현식에 대한 동적 인터페이스 – Describe( ) 와 Modify( ) 데이터윈도우 속성에 설정된 조건문을 동적으로 변경하기 다음과 같은 표현식을 “Modify()” 함수의 아규먼트로 입력하면 동적으로 변경된다. 0~tDataWindowPainterExpression 조건문을 칼럼속에 저장하면 매 Row마다 조건문이 적용된다. 예제> 급여가 60,000 이상일 때 “Salary” 칼럼의 텍스트를 빨간색으로 변경하고 그 미만일 경우에는 녹색으로 변경하는 예 dw_1.Modify( “Salary.Backround.Mode=0” ) // 바탕색 모드를 불투명하게 한다. dw_1.Modify( “Salary.Background.Color=” + & “’0~tIF(salary>60000, RGB(255,0,0), RGB(255,255,255))’” ) 조건문이 ‘ ’로 감싸여 있는것에 주목하고, “0~t” 와 이하 조건문은 반드시 붙여주어야 한다,

127 데이터윈도우의 매 페이지 첫번째 Row번호와 마지막 Row 번호를 얻어야 한다면, 이는 데이터윈도우 오브젝트의 속성에 접근해서 얻을 수 있다.
ls_first = dw_1.Onject.DataWindow.FirstRowOnpage ls_last = dw_1.Onject.DataWindow.LastRowOnpage dw_1.Title = “Rows ” + ls_first + “to ” + ls_last 윈도우 오브젝트 위에 데이터윈도우의 페이지 정보를 보여주고 싶다고 가정하자. 이 때 데이터윈도우의 페이지 정보는 데이터윈도우 컨트롤 함수를 통해서도 얻을 수 없고, 데이터윈도우 컨트롤 함수를 통해서도 얻을 수 없다. 바로 이러한 경우에 데이터윈도우 페인터 함수를 사용하면 원하는 정보를 얻을 수 있다. 데이터윈도우 페이터 함수 사용하기 Evaluate() 함수 사용하기 이 함수는 데이터윈도우 페인터 함수를 파워스크립트 내에서 사용할 수 있도록 해주는 함수로써 그 결과 값은 “Describe()” 함수를 통해서 반환 된다. Evaluate(‘Expression’, Rownumber) : Expression : 데이터 윈도우 페이터 함수를 입력하고 Rownumber : 함수의 샐행 조건이 되는 Row 예제1> Current Row가 위치하고 있는 페이지의 페이지 번호를 반환하는 예 ls_row = String(dw_1.GetRow()) ls_mod = “Evaluate( ‘page()’,”+ ls_row +” )” Parent.Title = “현재 페이지 : ” + dw_1.Describe( ls_mod ) 참고 : 데이터윈도우 오브젝트를 “Print Preview” 상태로 변경시키고 위 예제를 실행하면 프린트 시의 페이지 번호를 얻을 수 있다. 그러나 “Print Preview” 상태가 아니라면 데이터윈도우 컨트롤 사이즈를 기준으로 계산된 페이지 번호가 반환된다. 예제2> 드롭다운 데이터 윈도우의 “Display Column” 값을 보여주는 예이다. ls_val = dw_1.Describe(“Evaluate(‘LookUpDisplay(dept_id)’,”+ ls_row +” )”)

128 Error 이벤트 칼럼명과 속성명은 실행시 검사된다. 컴파일러가 검사하는부분
속성 표현식이나 데이터 표현식을 사용해서 데이터윈도우에 접근할 때, 파워빌더 컴파일러는 “Object” 키워드까지만 검사하고 그 이후 표현식은 프로그램 실행시에 검사된다. 이 때 “Object” 이후의 표현식이 존재하지 않는 오브젝트를 참조하거나 또는 속성 명이 잘못 설정되어 있을 경우에는 데이터윈도우 컨트롤의 “Error” 인벤트가 발생한다. dw_1.Object.emp_id.Visible=‘0’ 참고 : 데이터윈도우의 Error 이벤트는 자동으로 발생하지 않는다. 이 이벤트를 발생시키려면 이벤트 내에 스크립트가 작성되어 있어야 한다. 스크립트가 작성되지 않다면, 표현식에 오류가 있을 때, Error 이벤트 대신 어플리케이션 오브젝트의 SystemError 이벤트가 발생한다. 칼럼명과 속성명은 실행시 검사된다. 컴파일러가 검사하는부분 아규먼트 데이터 타입 설명 ErrorNumber Unsigned Integer 오류번호 ErrorText String 오류 메시지 ErrorWindowMenu 오류가 발생한 윈도우명 ErrorObject 오류가 발생한 컨트롤명 ErrorScript 오류가 발생한 이벤트명 ErrorLine 오류가 발생한 라인 번호 Ref(Action) ExceptionAction Ref(Return value) Any

129 database 데이터 입력 과정 Error 이벤트 참고 :
“systemError” 이벤트는 오류 메시지를 보여주고 어플리케이션을 강제 종료 시킨다. 그러나 이 이벤트에 주석 한 줄 이라도 추가되면(즉, 스크립트가 작성되면) “SystemError” 이벤트는 디폴트 오류 메시지를 무시하고 어플리케이션도 강제 종료시키지 않는다. Error 오브젝트의 속성을 이용해서 만든 사용자 정의 오류 메시지의 예 Messagebox( "오류발생!", & "오류 번호 : " + String( Error.Number) "~r~n" + & "오류 메시지 : " + Error.Text "~r~n" + & "오류가 발생한 윈도우명 : " + Error.WindowMenu "~r~n" + & "오류가 발생한 컨트롤명 : " + Error.Object "~r~n" + & "오류가 발생한 이벤트명 : " + Error.ObjectEvent "~r~n" + & "오류가 발생한 라인번호 : " + String(Error.Line)) Error 이벤트 DataWindow Buffer(Memory) 데이터윈도우 컨트롤은 데이터윈도우 오브젝트를 사용해서 데이터베이스 정보를 조회, 입력, 삭제, 저장할 수 있도록 해부는 파워빌더 컨트롤이다. database DataWindow Buffer(Memory) DataWindow Presentation Edit Control 데이터 입력 과정

130 1234 5555 5555 데이터유효성 컨트롤의 기본기능 Edit 컨트롤
사용자의 값을 받아들이고 임시 보관해 두는 역할을 한다. 입력 값은 유효성 검증과정이 끝날 때까지 에디트 컨트롤에 보관된다. 모든 데이터윈도우 컨트롤은 단 하나의 에디트 컨트롤을 갖는다. Item 데이터윈도우 버퍼 내에 존재한다. 데이터 유효성 검증 에디트 컨트롤에 있는 데이터가 “Primary”버퍼의 아이템으로 이동할 때 유효성 검사를 시작한다. “Enter” 키를 누를때 데이터윈도우 컨트롤 내에 있는 다른 필드로 포커스를 이동 시킬 때 스크립트에서 “AcceptText()” 함수나 “Update()” 함수를 호출할 때 에디트 컨트롤에 입력된 새 데이터는 “ESC” 키를 누르면 입력 값이 취소되고 원래 데이터로 복원된다. 단 에디트컨트롤에 사용자 입력값이 남아 있는 동안에만 가능하다. Item 갱신하기 데이터 유효성 검증이 시작되기 전이나 진행중인 동안에는 아이템에 있는 데이터와 에디트 컨트롤에 있는 데이터가 서로 다를 수 있다. 에디트 컨트롤은 사용자 입력 값을 유효성 검증이 끝날 때까지 보관하며, 아이템은 에디트 컨트롤에 있는 새데이터가 모든 유효성 검증을 통과해서 칸달될때 까지 이전 데이터를 보관하기 때문이다. (뒤 그림) 데이터유효성 컨트롤의 기본기능 DataWindow Buffer(Memory) DataWindow Presentation 1234 5555 Edit Control 5555

131 데이터유효성 검증단계 데이터 유효성 검증 통과하기 기본 오류 메시지 기본 오류 메시지를 데이터 타입이 맞는가? 보여줄 것인가?
ItemError 이벤트 사용자 정의 메시지 기본 오류 메시지 데이터 검증룰을 통과했는가? 기본 오류 메시지를 보여줄 것인가? ItemError 이벤트 사용자 정의 메시지 데이터 값이 변경되었는가? 검증단계가 중지됨 Item Changed 이벤트? ItemError 이벤트 저장(버퍼)

132 “ItemError” 이벤트에서 오류 처리하는 스크립트를 작성하다 보면 에디트 컨트롤에 본관중이 사용자 입력값을 알아낼 필요가 있다. 이 때 사용자 입력값은 “ItemError” 이벤트가 제공하는 “data” 아규먼트에서 얻을 수 있다. Item의 값을 읽어올 때는 “dwo” 아규면트를 활용한다. dwo.Primary[Row] 오류 처리하기 DataWindow Buffer(Memory) DataWindow Presentation 1234 5555 Data dwo.primary[Row]

133 데이터윈도우 이벤트의 동작을 조절하기 “Return”문을 사용하여 데이터윈도우 이벤트의 동작을 조절할 수 있다.
ItemChanged : 0 : 입력값을 버퍼에 기록한다. 1 : 입력값을 버퍼에 기록하지 않고 “ItemError” 이벤트를 발생시킨다. 2 : 입력값을 버퍼에 기록하지 않고, 다른 필드로 포커스를 이동시키니다. ItemError 0 : 입력값을 취소하고 오류메시지를 보여준다. 1 : 입력값을 취소하고 오류메시지를 안 보여준다. 2 : 잘못된 값이라도 버퍼에 기록한다. 3 : 입력값을 취소하고 다른 필드로 포커스를 이동 시킨다. 데이터윈도우 이벤트의 동작을 조절하기 데이터윈도우의 내용을 변경한 후 윈도우를 종료시키려 할 수 있다. 이때 윈도우 오브젝트의 “CloseQuery” 이벤트를 활용한다. 윈도우가 종료되기 직전에 발생한다. 예제> Long ll_rv /* AcceptText() 함수를 호출하여 데이터 유효성 검사를 실시한다. */ IF dw_detail.AcceptText() = -1 THEN /* 사용자 입력값에 오류가 있으므로 잘못된 데이터를 바로 잡을 것인지 아니면 입력값을 무시할지를 묻는 메시지 창을 보여준다.*/ Close(This) END IF /* 변경되었거나 삭제된 데이터가 있다면 이들 데이터를 데이터베이스에 - 저장할 것인지 - 변경사항을 취소하고 화면을 닫을 것인지 - 윈도우 종료를 취소할 것인지 를 묻는 화면을 뛰워서 사용자의 선택에 따라 "Choose Case"문으로 적적한 작업을 수행한다.*/ IF (dw_detail.ModifiedCount() + dw_detail.DeletedCount () ) > 0 THEN ll_rv = Messagebox("확인", "변경된 데이터가 존재 합니다. 저장하시겠습니까 ?", Question!, YesNoCancel!, 1) CHOOSE CASE ll_rv CASE 1 /* 변경된 데이터를 저장 */ CASE 2 /* 변경사항을 취소하고 화면을 닫는다. */ CASE 3 /* 윈도우 종료를 취소한다. */ RETURN 1 END CHOOSE END IF

134 클라이언트 VS 서버의 데이터 유효성 검증 검증룰 정의 사용자에게 보여줄 오류 메시지
사용자 입력값에 대한 유효성 검증을 클라이언트단에서 수행하면 데이터베이스에서 수행하는 것보다 데이터 검증 및 오류 처리 시간을 단축시킬 수 있다. 중요한 검증룰까지 모두 클라이언트단에서 실행시키는 것은 바람직하지 않다. DB서버에서의 데이터 유효성 검증 참조 무결성(Referential integrity) 제약조건(Check constraints) 저장 프로시저(Stored Procedures) 장점 : 검증룰에 대한 관리가 편하다. 클라이언트 VS 서버의 데이터 유효성 검증 코드 테이블을 이용하는 방법 데이터윈도우 칼럼에 코드 테이블을 정의해 두면 사용자 입력값을 제한할 수 있다. 사용자의 입력값은 코드 테이블에 정의되어 있는 데이터들과 비교되어 리스트에 없는 데이터가 입력되면 유효한 데이터가 아닌 것으로 간주되어 “ItemError” 이벤트가 발생한다. 검증룰을 이용하는 방법 검증룰 실행시키기 “Enter” 키를 누르거나 또는 “Tab” 키나 화살표 키 아니면 마우스 클릭 등으로 다른 칼럼으로 포커스를 이동시킬 때 스크립트에서 “Update()” 나 “AcceptText()” 함수를 호출할 때 검증룰 정의 사용자에게 보여줄 오류 메시지

135 여기에서 정의하고 여기에서 적용한다. 데이터 유효성 검증룰 정의하기 데이터윈도우 페인터에서 정의하기
예제 > 스트링 타입의 우편번호 칼럼이 있는데 이 칼럼에 “0”보다 크고 “9999”보다 작은 값이 입력되어야 한다 Number ( GetText() ) > 0 AND Number( GetText() ) <= 9999 위 예제에서 사용된 “GetText()” 함수는 에디트 컨트롤에 저장되어 있는 사용자 입력값을 읽어들이는 데이터윈도우 페인터 함수이다. 에디트 컨트롤에 저장되어 있는 사용자 입력값은 모두 스트링 형태로 저장되어 있기 때문에 “GetText()” 함수의 반환값 또한 스트링 타입이다. 따라서 숫자간 비교를 위해서 “Number()” 또는 “Real()” 함수로 형 변환 시켜준다. 오류메시지 정의 “Validation Message” 항목을 더블 클릭해서 “Modify Expression”창을 오픈시킨다. “우편번호는 ‘0’ 보다 크고 ‘9999’ 보다 작은 값이 입력되어야 합니다.” 다른 칼럼과 비교 Date( GetText() ) > start_date 여기에서 정의하고 여기에서 적용한다.

136 데이터 유효성 검증룰 정의하기 두가지 정의 방식의 차이점
데이터베이스 페인트에서 만들어진 검증룰을 테이블에 설정해 두면 해당 테이블을 바탕으로 만들어지는 모든 데이터윈도우 오브젝트에 설정된 검증룰이 자동으로 포함된다. 저장위치가 다르다 데이터윈도우 페인터 : 해당 데이터 윈도우 오브젝트 내에 저장된다. 데이터베이스 페인터 : 데이터베이스내에 저장된다. Powersoft catalog table에 저장된다. Powersoft catalog table 목록 pbcatcol : 테이블의 칼럼정보들을 저장 pbcatedt : Edit Style pbcatfmt : Display format pbcattbl : 테이블의 정보 pbcatvld : Validation Rules GetValidate() 함수 ls_rule = dw_1.GetValidate(“salay”) SetValidate() 함수 영문 대문자 “A~Z” 사이에 값만 받아들이는 검증룰을 적용하는 예이다. ls_new = “Match ( Left( GetText(), 1 ), ‘[A~Z]’)” ls_old = dw_1.GetValidate(“status_code”) dw_1.SetValidate(“status_code”, ls_new) /* 새로운 검증룰로 입력값을 검증 */ . /* 원본 검증룰을 재적용 */ dw_1.SetValidate(“status_code”, ls_old)

137 코드 테이블 데이터윈도우 칼럼의 “Edit”속성창에서 정의하며, 다음과 같은 에디트 스타일들이 코드 테이블을 포함하게 된다.
Checkbox Edit DropDown Datawindow DropDown ListBox Radio button Edit Mask 코드테이블에 정의되어 있는 “display value” 값은 “Lookupdisplay()” 함수를 사용해서 읽어올 수 있다. 검증 작업이 실행되면 파워빌더는 코드 테이블에 정의되어 있는 데이터들만 받아들이고 그 이외의 입력값들에 대해서는 “ItemError” 이벤트를 발생시킨다. 글로벌 함수 사용하기 gf_retirment_(age, hire_date) > 1000 예>사용자가 사원테이블에 새로운 Row를 추가한 후 사원 번호를 입력할 때, 입력한 사원 번호가 유일한 번호인지 아닌지를 확인할 수 있는 방법은 데이터베이스에서 찾아보는 방법 밖에 없다. 이러한 경우 글로벌 함수를 사용한다.

138 10. DW페인터의 구성 목표 목차 ▣ 데이터 윈도우 페인터의 구성과 사용법을 익힌다.
파워빌더 교육 10. DW페인터의 구성 목표 ▣ 데이터 윈도우 페인터의 구성과 사용법을 익힌다. ▶ Design Painter의 구조에 대해 이해한다. ▶ Design Painter에서 Band의 역할을 이해한다. ▶ 데이터윈도우 컨트롤의 사용법을 이해한다. 목차 ▶ DW Painter의 구조 ▶ DW Painter 상세 ▶ DW Painter 컨트롤 ▶ Data Object의 메뉴 파워빌더 교육 (주)MNP

139 DW Painter의 구조 Design 창 Properties창 Preview 창 DW Painter의 구조 파워빌더 교육
Design 창, Preview 창, Properties 창을 사용하고, 추가적으로 아래의 XML(Extend Makrable Language), XHTML(Extend Hyper Text Markable Language), Column Specification, Data, Control List 공간 이 있다. Design 창 Properties창 Preview 창 파워빌더 교육

140 ㅍㅊ ㅍㅊ ㅍㅊ DW Painter의 상세 디자인창 파워빌더 교육
디자인 창에서는 레포팅으로 밖으로 나타낼 크기 및 형식을 지정하는 일을 할 수 있다. 디자인창은 4가지 Band (Header, Detail, Summary, Footer)로 이루어져 있다. 사원정보를 만든다고 했을 때 각 Band는 다음과 같다. Header 사원번호 사원이름 입사일 1 SCOTT 2 CLACK 3 TOM 전체 사원수 : 108명 ½ 페이지 ㅍㅊ Detail Summary ㅍㅊ Footer ㅍㅊ Header 출력되는 모든 페이지의 상단 부분에 항상 찍히게 되는 내용이다. Footer 출력되는 모든 페이지의 하단 부분에 항상 찍히게 되는 내용이다. Detail 실제 테이블에서 각 컬럼에 맞는 데이터 값들을 가져오게 되는 곳이다. Summary Detail 밴드에서 맨 마지막 것이 조회된 이후, 그 다음에 딱 한번 출력되는 것이다. Footer 밴드는 모든 페이지의 마지막 부분마다 나타나는 것이고, Summary 밴드는 맨 마지막에 딱 한번 출력 된다는 것이다. 물론 마지막 페이지의 Footer 밴드 바로 위에 출력된다. 파워빌더 교육

141 디자인창의 기타 옵션 파워빌더 교육 밴드 높이 : 출력할 값을 고려하여 각 밴드 사이의 간격을 잘 조절해야 한다.
TabOrder : 페인터바의 를 클릭하여 Tab Order를 생성 할 수 있다. 메뉴 Design > Options 에서 디자인을 할 때, 편리한 기능을 설정할 수 있다. Show Grid : Design 창에 눈금들이 표시 Show Ruler : Design 창에 눈금자가 나타나서, 정확한 레포트를 나타낼 수 있다. 파워빌더 교육

142 Column Spcification/Data/Control List
Preview창 디자인 창에서 작성을 한 결과를 나타내는 것으로 이 창에 보이는 것이 사용자에게 보여주는 결과 값이다. Properties 창 데이터 오브젝트 전체에 대한 속성을 제어하거나, 선택한 컬럼에 대한 속성을 제어할 수 있다. Column Spcification/Data/Control List Column Specification은 각 컬럼의 Properties창에서 제어하지 못하는 Initial Value, Validation Expression등을 제어할 수 있다. Data는 해당 데이터 오브젝트의 각 컬럼의 값들을 나타낼 수 있다. Data창을 클릭을 통해 활성화한 이후 조회를 하고, 저장을 하면, 데이터 오브젝트는 해당 데이터값들을 가진 상태로 저장 되어진다. 다시 데이터 값들을 지우고자 한다면, Data창에서 해당 데이터 들을 Delete All을 통해 지우고 저장하면, 다시 예전의 데이터를 가지지 않은 상태의 데이터 오브젝트가 된다. Control List는 해당 데이터 오브젝트의 Design창에서 사용되는 모든 컨트롤의 리스트가 보여지며, 클릭하면, 디자인 창에서 해당 컨트롤이 선택되어지고, Visible이 False로 되어서 숨겨진 오브젝트를 찾을 때 사용된다. 파워빌더 교육

143 DW 페인터의 컨트롤 디자인 화면에 추가 가능한 오브젝트 파워빌더 교육
데이터윈도우 디자인 상태의 메뉴 insert > Control 메뉴나, 페인터 바에서 데이터오브젝트에 추가할 수 있는 컨트롤을 볼 수 있다. Drawing Object : 선을 그리는 line, 원을 그리는 oval, 사각형을 그리는 Rectangel, 타원을 그리는 RoundRectangle 이렇게 4가지를 말한다. 이벤트를 가지지 않고 있으며, 그림만을 그리는 객체이다. Place a Column : DW 오브젝트의 원하는 위치를 클릭하면, Select Column이라고 불리는 윈도우가 뜨게 되고, 여기에서 원하는 컬럼을 선택하면 된다. Computed Field : DW 오브젝트의 원하는 위치를 클릭하면, Modify Expression 윈도우가 로딩되고, 이곳에 원하는 것을 작성하면 된다. Graph : DW 오브젝트의 원하는 위치를 클릭하면, 그래프형 데이터 윈도우를 설정하는 윈도우가 뜨게 되고, 이곳에서 Value 및 Category, Type등을 설정하면, 해당 데이터 윈도우에 대한 그래프가 뜨게 된다. Report : DW 오브젝트의 원하는 위치를 클릭하면, Report를 선택하는 윈도우가 떠서 ‘Nested’ 형식(데이터 윈도우 안에 데이터 윈도우가 또 존재하는 것)의 DW 오브젝트가 된다. OLE : 추가 하고자 하는 OLE를 선택하면 된다. Tablet PC에서 사용하는 것으로 그림을 가져와서 보여준다. OLE Database Blob : 사용하는 데이터 베이스에서 Blob(Binary Large-Object)데이터를 지원해야 하며, 각 데이터베이스마다, Blob을 지원하는 데이터 타입명이 다르다. Group Box : DW 오브젝트의 원하는 위치에 클릭하면, 해당위치에 그룹 박스를 나타낼 수 있다. DW 오브젝트의 원하는 위치에 클릭하면, 버튼이 생성된다. 자주 사용되는 Computed Field가 구현되어 있는 것 평균, 카운트, 페이지 번호, 컬럼의 숫자를 더하는 연산, 오늘의 날짜 등 파워빌더 교육

144 DW Object의 메뉴 DW Object의 메뉴 Edit 파워빌더 교육
데이터윈도우 디자인 상태의 메뉴 insert > Control 메뉴나, 페인터 바에서 데이터오브젝트에 추가할 수 있는 컨트롤을 볼 수 있다. Edit, View, Insert, Format, Design, Rows가 데이터 오브젝트를 열었을 때, 나타나는 메뉴이다. 물론, 해당 메뉴에서 많이 사용되어지는 기능들은, 보여지는 것과 같이 대부분 툴바 아이콘으로 제공된다. Edit Edit 메뉴는 Preview Tab에 나타난 데이터에 대한 처리와 Design창에서 작성한 것에 대한 Undo, Redo기능을 지원하고 있다. 메뉴명 설명 Cannot Undo 잘못 작성을 했을 때, 이전의 상태로 돌린다. Cannot Redo Undo로 돌린 작업을 다시 수정 이후의 상태로 돌린다. Cut 선택한 것을 화면에는 없애고, 버퍼에 저장한다. Copy 선택한 것을 화면에도 두고, 버퍼에 저장한다. Paste 버퍼에 저장된 것을, 지정된 공간에 나타나게 한다. Delete 선택한 것을 지운다. Delete Row Preview화면에 나타난 선택한 Row를 지운다 Delete All Row Preview화면에 나타난 모든 Row를 지운다. Duplicate Copy와 Paste가 합쳐진 것으로, 선택한 것을 복사하고, 붙여놓아서, 한번의 동작으로 해당 오브젝트이 Copy본이 화면에 보여진다. Select 7개의(All, Above, Below, Left, Right, Columns, Text)서브메뉴로 구성되고, Design창에서 오브젝트를 선택할 때 사용된다. 마우스로 선택할 수 있기에 많이 사용되지는 않는다. Find 새로운 다이얼로그 창이 나타나며, Preview창에서 원하는 Data를 찾을 때 사용된다. 파워빌더 교육

145 View 파워빌더 교육 메뉴명 설명 Find Next
Find Previous Find로 찾은 값이 여러 개인 경우, 검색되어진 이전의 행부터 다시 검색할 경우 사용된다. Replace 검색해서 나온 결과를 원하는 값으로 바꾸고자 할 때 사용도니다. Go To 4개의 (First, Prior, Next, Last Page) 서브메뉴로 구성되고, Preview탭의 결과값이 몇 장으로 나타날 때, 원하는 장으로 넘어가서 볼 때 사용된다. View View 메뉴는 데이터 오브젝트 창에서, 표현할 화면들을 나타내고, 윈도우 오브젝트와 같이 데이터 오브젝트의 Layout에 대한 설정을 할 수 있다. 메뉴명 설명 Design Design 창을 나타나게 한다. Control List Design 창에 나타난 Control을 List로 볼 수 있는 창을 나타나게한다. Column Specifications Column Specifications 창을 나타나게 한다. Data Data 창을 나타나게 한다. Export/import Template 데이터 윈도우를 XML로 export나 import 할 때, DTD를 나타내는 Template를 지정하는 창을 나타나게 한다. XML로 데이터를 저장하는 방법에 대하여 알아볼 때, 자세히 언급하겠다. Preview Preview 창을 나타나게 한다. Properies Properies 창을 나타나게 한다. Layout 데이터오브젝트 창 전체의 Layout 을 설정할 수 있다. 윈도우오브젝트이 Layout설정과 같다. 파워빌더 교육

146 Insert Insert 메뉴는 Design창에 Control들을 추가 하거나, Preview 창에서 값을 추가 할 수 있다. 메뉴명 설명 Control Design 창에 오브젝트들을 추가할 수 있다 Row Preview나 Data 창에, 새로운 Row를 추가한다. File File을 추가 할 수 있지만, Data Object에서는 사용되지 않는다. 파워빌더 교육

147 Format 파워빌더 교육 Format 메뉴는 각 컬럼에 대한 설정들을 할 수 있다. 메뉴명 설명 Bring To Front
선택한 오브젝트가 겹쳐 있는 경우, 앞으로 나타나게 한다. Bring To Back 선택한 오브젝트가 겹쳐 있는 경우, 뒤로 나타나게 한다. Currency 선택한 컬럼의 데이터 타입이 숫자형인 경우(int, long등등), Format을 Currency로 설정한다. (문자형인 경우 설정안됨) Percent 선택한 컬럼의 데이터 타입이 숫자형인 경우(int, long등등), format을 Percent로 설정한다.(문자형인 경우 설정안됨) Expression Expression 창을 나타낸다. Modify Report 데이터윈도우 안에, DDDW나 DDLB가 있는 경우 해당 데이터오브젝트의 안에 들어갈 때 사용한다. Autosize Height 선택한 컬럼의 Autosize Height를 설정한다. No slide Above 선택한 컬럼이나 컨트롤의 Slide옵션을 먹지 않게 할 때 사용된다. Slide Direct Above 선택한 컬럼이나 컨트롤의 Slide옵션을 설정한다. Slide Left 선택한 컬럼이나 컨트롤의 Slide left옵션을 설정한다. Newspaper column 선택한 컬럼을 Newspaper Column으로 설정해서, n-up과 비슷한 형태의 다단으로 보여지게 한다.(N-up 스타일과는 데이터가 나타나는 순서가 틀리다.) Border 선택한 컬럼을 7가지 형태의 (No Border, Underline, Box, ShadowBox, Resize, 3D Raised, 3D Lowered)보더를 설정한다. Align 선택한 컬럼들의 정렬을 설정한다. Space 선택한 컬럼들의 간격을 설정한다. Size 선택한 컬럼들의 크기를 설정한다. Tab Order 데이터 오브젝트의 모든 컬럼의 Tab Order를 설정한다. 파워빌더 교육

148 Design Design 메뉴는 데이터 오브젝트 전체의 옵션과 데이터 소스로 창을 변환하는 등의 일을 할 수 있다. 메뉴명 설명 Data Source SQL문을 입력할 수 있는 Data Source 창으로 전환된다. Zoom 많은 컬럼을 디자인할 때, 디자인 창에 대한 Zoom in/out을 해서 볼 수 있다. 실제론 거의 사용되지 않는다. CrossTab Presentation Style이 CrossTab인 경우, CrossTab의 설정 정보를 수정 할 수 있다. Custom Colors 파워빌더에서 기본적으로 정한 색 이외에 사용자 지정색을 설정해서 사용할 수 있다. Options 데이터 오브젝트의 옵션을 설정할 수 있다. 데이터 오브젝트이 옵션을 설정할 수 있다. HTML Preview HTML DataWindow를 만들었을 경우, 나타나는 화면을 웹브라우저에서 미리 보기로 표현한다. 파워빌더 교육

149 Rows 파워빌더 교육 Rows 메뉴는 조회되는 데이터에 대한 조작을 할 수 있다. 메뉴명 설명 Described
Priview 창에 나타난 Row의 각 버퍼별 개수를 나타낸다. Sort 각 컬럼에 대한 Sort조건을 줄 수 있다. Filter 각 컬럼에 대한 조회, Filter조건을 줄 수 있다. Import Preview 창에 Data값들이 들어있는 파일을 Import한다. Retrieve Preview 창에 데이터오브젝트를 조회했을 때, 화면에 나타날 값을 조회해 본다. Update Preview 창에서 수정한 값을 저장한다. Retrieve Options Rows As Needed, Rows To Disk 두개의 옵션을 가지고 있으며, 기본옵션은 Rows To Disk이다. Suppress Repeating Values 반복되어서 조회되는 컬럼의 값은 설정을 통해서, 하나만 출력되고자 할 때 사용된다. Update Properties 데이터윈도우의 저장되는 사용되는 옵션들이다. 중요한 것이니, 다음 절에서 자세히 살펴볼 것이다. Stored Procedure Update 처음에 설정한 Stored Procedure에서 변경이 있는경우, 변경 사항을 적용할 수 있다. Web Services Update 처음에 설정한 Web Services에서 변경이 있는 경우, 변경 사항을 적용할 수 있다. Create Group Group Presentation 이 아닌 경우, 원하는 컬럼을 기준으로 Group 형식으로 나타낼 수 있다. Delete Group 설정한 그룹을 삭제한다. Edit Group 설정한 그룹의 정보를 수정 할 수 있다. 파워빌더 교육

150 11. DW 객체 주요속성의 이해 목표 목차 ▣ 데이터윈도우 객체의 주요속성을 이해한다.
파워빌더 교육 11. DW 객체 주요속성의 이해 목표 ▣ 데이터윈도우 객체의 주요속성을 이해한다. ▶ 데이터 윈도우 객체의 주요속성을 이해한다. ▶ 데이터 윈도우 각 탭의 사용법을 이해한다. 목차 ▶ DW 페인터의 속성창 ▶ Data Object Column의 속성설정 ▶ Edit Style ▶ Format Style ▶ Font ▶ Column Specification ▶ Data ▶ Control List ▶ 주요창 파워빌더 교육 (주)MNP

151 DW Painter의 속성창 General 파워빌더 교육 데이터 오브젝트 전체에 대한 속성을 제어한다.
어떠한 컬럼도 선택하지 않고, 데이터 오브젝트 바탕에서 프로퍼티 창을 보면 아래와 같은 옵션을 가지고 있게 된다. 종류 형식 Units 데이터 오브젝트에서 사용되는 측정단위 파워빌더의 내부 단위로 나타내는 PowerBuilder(0) 디스플레이 장치의 단위인 픽셀 단위로 나타내는 Pixel(1), 인치 단위로 나타내는 1/1000 inch(3) 센치미터 단위로 나타내는 1/10000 Centimeter(4) Timer Inerval 데이터 오브젝트 안의 시간 필드를 갱신 하는 주기를 나타내며, 단위는 밀리세컨즈 단위이며, 디폴트 값로 60,000밀리세컨즈로, 즉 1분이다. Color 데이터 윈도우의 전체의 바탕 색을 정의 Show BackColor on XP 버튼의 선택한 이후에 데이터오브젝트위에 올라가 있는 버튼의 바탕색을 지정 할 수 있다. PixelsToUnits(pixels, type) : Type : XPixelsToUnits!/YpixelsToUnits! UnitsToPixels(pixels, type) Type : XUnitsToPixels!/YUnitsToPixels! 파워빌더 교육

152 Print Specifications 파워빌더 교육 종류 형식 Paper Orientation 출력 용지 방향을 설정
프린터의 디폴트 설정의 용지 방향 Default(0), 종이의 가로 방향으로 출력 하는 Portrait(1) 종이의 세로 방향으로 출력하는 Landscape(2) Paper Size 종이의 사이즈지정 Default(0)는 프린터의 디폴트 설정의 종이크기 Prompt Before Printing 사용자가 인쇄를 하고자 할 때, 표준 Print Setup 다이얼로그창이 뜨게 되어서 사용자에게 프린터 종류를 선택 하도록 한다. 파워빌더 교육

153 DW Object Column의 속성설정 General Computed Expression 파워빌더 교육
데이터 오브젝트의 각 컬럼을 선택했을 때의 프로퍼티 창 종류 형식 Name 해당 컬럼의 파워빌더 내부적으로 참조 할 수 있는 이름. Default값 그대로 두는 것이 좋다 Alignment 해당 컬럼 안에 출력되는 데이터 값들의 정렬 속성 제어. Border 해당 컬럼의 보더선택. Noborder, ShadowBox, Box, ResizeBorder, UnderLine, Lowered, Raised Display As Picture 해당 컬럼을 그림으로 보여지게 하는 것 Computed Expression 을 클릭하면, 해당 옵션에 대한 Expression을 줄 수 있는 다이얼로그가 뜬다. 파워빌더 교육

154 Protect Empty String is Null 파워빌더 교육
1개의 컬럼의 설정을 보호하고, 결과 값은 0또는 1로 나타난다. 0 – False, 컬럼의 설정을 보호하지 않는다. 1 – True, 컬럼의 설정을 보호한다. Empty String is Null 컬럼의 값이 Empty String일 경우 Null값으로 처리해 준다.(기본은 ‘N’) Yes – 빈 문자열을 Null값으로 처리 N0 – 빈 문자열을 Null값으로 처리하지 않는다. 칼럼이 숫자타입인 경우는 반드시 체크해줘야 한다. 체크되지 않으면 Empty String으로 인식하고, 이 경우 문자 타입이므로 타입 오류가 난다. 파워빌더 교육

155 Edit Style Edit Style 정의 Edit 속성 파워빌더 교육
Edit 탭에서 하는 가장 핵심적인 일은 Edit Style을 정의하는 것이다. Edit Styles는 윈도우 컨트롤 오브젝트의 Edit Mask 컨트롤 오브젝트와 똑같다. 다만 컬럼에 적용해서 사용할 수 있다는 것과 여러 형태를 가지고 있다는 것이 차이점이다. 따라서, Edit Style은 입력된 값을 검증할 수 있는 정해진 포맷을 가진 컨트롤로 데이터의 디스플레이 형태를 조정한다. Edit 속성 Style Name : 데이터 윈도우 페인터에서 Extended Attributes에 정의한 내용의 이름이 Edit Styles에 나타나게 된다. 해당하는 내용을 선택할 경우, Style Type 또한 할당된다. Style Type : 3장 Attribute 확인 파워빌더 교육

156 Format Style Format Tab 파워빌더 교육
Format 탭에서는 Display Format을 정의 하거나, Extended Attributes의 Display Formats에서 정의한 내용을 사용할 수 있다. 정의 할 때는 Format에 원하는 형태로 작성하게 문자를 표현하며 #은 숫자를 표현하게 된다. Ex) ##-####-#### 전화번호를 표현하고자 할 때, 위와 같은 형태로 표현할 수 있다. 파워빌더 교육

157 Font Font Tab Font 탭에서는 다음과 같이 해당 컬럼의 폰트, 글자색등 폰트에 대한 설정을 할 수 있다. 파워빌더 교육

158 Column Specification Column Specification 파워빌더 교육 Name 데이터 오브젝트의 컬럼 이름
Type 해당 컬럼의 데이터 타입을 나타낸다 Prompt Retrieve Criteria를 활성화 시킬 컬럼을 선택하는 체크 박스로, 메뉴바 Rows>Retrieve를 누르거나, 페인터 바에서 버튼을 누르면, 아래의 그림과 같은 화면이 나타나게 된다. 아래쪽으로 작성하면 OR 조건이 되고, 동일한 영역에 작성을 하게되면 AND 조건이 된다. 실제 실행을 할 때, 사용자에게 아래의 그림과 같은 다이얼 로그 박스가 로딩되기때문에, 자주 사용되지는 않는다. Initial(DE default 값과 차이) DE default 값은 파워빌더 프로그램 상에서 이미 정해져 있는 기본값이며, Initial값은 사용자가 Default값을 설정해 주는 것이다. Validation Expression 데이터윈도우 페인터의 Extended Attributes의 Validation Rule 설정과 같다. 다만, 여기에서는 각 컬럼 별로 바로 정의 뿐만 아니라 할당된다. DB.Name 실제 어떤 테이블에서 어떤 컬럼들에서 값을 가져오는지 볼 수 있다. 파워빌더 교육

159 Data Data Tab 파워빌더 교육 해당 데이터 오브젝트의 각 컬럼의 값들을 나타낼 수 있다.
값이 바뀌지는 않지만, 조회의 빈도가 높은 데이터오브젝트에 사용하면, 유용하다. 다시 데이터 값들을 지우고자 한다면, Data창에서 해당 데이터 들을 Delete All을 통해 지우고 저장하면, 다시 예전의 데이터를 가지지 않은 상태의 데이터 오브젝트가 된다. 파워빌더 교육

160 Control List Control List 파워빌더 교육
해당 데이터 오브젝트의 Design 창에서 사용되는 모든 컨트롤의 리스트가 보여지며, 클릭하면, 디자인 창에서 해당 컨트롤이 선택되어지며, Visible이 False로 숨겨진 오브젝트를 찾을 때 사용된다. Data 탭을 클릭한 후 메뉴바 Rows>Retrieve를 누르거나, 페인터 바에서 버튼을 누르면, Data탭에 실제 데이터 베이스에서 조회된 데이터들이 들어오게 도니다. 이 상태에서 저장하면, 데이터 자체를 데이터 오브젝트가 가지고 있으므로, 실제 데이터베이스에 연결이 되지 않아도, 데이터 조회가 된다. 다량의 데이터에서 조회만을 할 때 종종 사용되며, 물론 데이터들을 가지고 있으므로, 데이터 오브젝트의 사이즈는 커지게 된다. 파워빌더 교육

161 주요 창 Filter Sort Update Properties 파워빌더 교육
메뉴의 Rows > Filter메뉴를 통해 각 컬럼에 대한 조회 시, Filter조건을 줄 수 있다. Sort 메뉴의 Rows > Sort 메뉴를 통해 Source Data에 나영된 컬럼들을 오른쪽 Columns메뉴로 이동하여 Sort할 수 있다. Update Properties 9장 참조 파워빌더 교육

162 12. DW 객체의 주요함수 목표 목차 ▣ 데이터윈도우 객체의 주요함수를 이해한다.
파워빌더 교육 12. DW 객체의 주요함수 목표 ▣ 데이터윈도우 객체의 주요함수를 이해한다. ▶ 데이터윈도우 객체의 주요함수 사용법을 이해한다. 목차 ▶ 주요함수 파워빌더 교육 (주)MNP

163 데이터윈도우 객체에서 함수 사용 데이터윈도우 객체에서 함수사용 Expression 작성하는 법 Syntax 파워빌더 교육
위의 그림에서 사용할 Funtion을 선택한 후 사용할 컬럼을 선택할 수도 있고, 입력할 수도 있으며, 입력한 문장이 올바른지 Verify버튼을 통해 ‘Exprission is OK’라는 메시지를 통해 알 수 있다. Syntax X Column For range All 열에 있는 모든 값 Group n Group n에 있는 값 Page Page의 열의 값 Crosstab 크로스탭의 모든 열의 값 Graph Graph의 행 옵션에 대해 지정된 범위의 열의 값 Object OLE개체의 행 옵션에 대해 지정된 범위의 열의 값 파워빌더 교육

164 주요함수 파워빌더 교육 CurrentRow 현재 포커스가 위치한 레포트 내의 Row의 번호를 리턴한다.
IF(currentRow() = GetRow(), ‘Current’, ‘NoCurrent’) GetRow 각 Row의 번호를 리턴한다. If(GetRow() = 0, “No Data”, String(GetRow())) RowCount 현재 조회된 Row의 수 If(RowCount() = 0, “No Data”, String(RowCount())) Sum 지정된 열(칼럼)의 값들의 합계 Sum(#x for all) Avg 열 값의 평균값 계산 Avg(#x for all) Count 지정된 열의 row의 수 Count(#x for all) Page 현재 페이지수를 가져온다. Page() Today 클라이언트 PC의 날짜 및 시간을 구한다. Today() Now 클라이언트의 현재시간을 구한다 Now() Case Case(x when a then b when c then d…else e) X의 값이 a이면 b를 , c이면 d를, when에 맞는 것이 없으면 e를 리턴한다. If If(b, t, f) B의 결과가 true이면 t를, false이면 f를 리턴한다. Integer Integer(s) String값을 , integer로 변환한다. s – String Date, day, dayname, Daynumber, Daysafter Date(s) : s(string)값을 date타입으로 바꾼다. (YYYY-MM-DD) Day(d) : d(d(in_dddddate)값에서 일자를 구한다. Dayname(d) : d(date)값에서 요일의 명칭을 구한다.(Sunday, Monday…) Daynumber(d) : d(date)값에서 요일값을 구한다.(1 Sunday, 2 Monday…) Daysafter(d, d) : d(앞0과 d(뒤)의 차이 일자를 구한다. 뒤 – 앞 isDate isDate(s) S(string)의 값이 Date값인지 확인한다. 예) if(isDate(in_date), Day(in_date), 0 파워빌더 교육

165 파워빌더 교육 isNull 컬럼의 값이 Null인지 확인한다. isNull(x) isNumber isNumber(s)
S(string)값이 Number인지 확인한다. isRowNew 현해 행이 새로운 행인지 여부를 확인한다. Len(s) Len, LenA S(string)의 문자의 길이를 구한다. Len(s), 잘 이어주라 Lookupdisplay 지정된 컬럼의 값을 연관된 코드 테이블에 표시 값을 구한다. DDDW의 경우 코드값 말고 display값을 가져온다. Mid, Mida S(string)값을 시작위치부터 필요한 길이만큼 잘라낸다. Start – 시작하는 자리값 Len - 문자길이 Mid(s, start, len) 파워빌더 교육

166 13. DW컨트롤의 주요함수 목표 목차 ▣ 데이터윈도우 컨트롤의 함수를 이해한다.
파워빌더 교육 13. DW컨트롤의 주요함수 목표 ▣ 데이터윈도우 컨트롤의 함수를 이해한다. ▶ 데이터윈도우 오브젝트와 데이트 윈도우 컨트롤의 차이를 이해한다. 데이터윈도우 컨트롤의 주요함수에 대해 이해한다. 데이터윈도우 컨트롤의 주요이벤트에 대해 이해한다. 목차 ▶ 데이터윈도우 컨트롤 ▶ DW컨트롤의 주요이벤트 파워빌더 교육 (주)MNP

167 데이터윈도우 컨트롤 데이터윈도우 오브젝트와 데이터윈도우 컨트롤 데이터윈도우 컨트롤의 생성 데이터윈도우 컨트롤의 주요 함수
데이터윈도우 오브젝트는 데이터소스를 정의하고 데이터를 표현하는 방법을 정의해놓은 것이며 데이터윈도우 컨트롤은 데이터윈도우 오브젝트를 보여주고 제어하기 위한 컨테이너이다. 이 컨테이너의 이벤트에 데이터윈도우 오브젝트를 제어하는 Script를 작성한다. 데이터윈도우 오브젝트의 이름은 ‘d_’로 붙이고 데이터윈도우 컨트롤의 이름은 “dw_’로 붙인다. 데이터윈도우 컨트롤의 생성 윈도우의 툴바나 메뉴의 Insert >> Control >> Datawindow에서 윈도우 위에 추가한다. 또는 데이터윈도우 오브젝트를 Window창에 드래그 시킨다. 데이터윈도우 컨트롤의 주요 함수 9장 참조 파워빌더 교육

168 데이터윈도우 컨트롤의 주요 이벤트 데이터윈도우 컨트롤의 이벤트 리스트 파워빌더 교육 Itemchanged()
DataWindow Control의 필드가 수정된 후에 Focus가 바뀔때 발생한다. 동일한 값은 변경으로 보지 않는다. AppertText()함수를 기술하면 안된다. AcceptText()나 Update()함수가 호출되었을 때도 발생한다. Return값을 사용하여 유효성 check 로직을 사용할 수 있다. [Return] 0 – 정상 1 – Data 변동없고 포커스 변동되지 않는다. 2 – Data 변동없고 포커스 이동이 가능하다. Rowfocuschanged() DataWindow의 현재 행이 변경될 때 발생한다. 여러 개의 row가 있는 데이터윈도우를 마우스로 클릭하면 클릭된 row가 currentrow로 인식되는데 그때마다 발생되는 이벤트이다. 0 – 처리를 계속한다. Rowfocuschanging() Rowfocuschanged()직전에 발생하는 이벤트로 DataWindow내에 행이 변경이 발생되었을 때 이벤트가 발생된다. 1 – 현재 행이 변경되지 않도록 한다. Itemfocuschanged() 값의 변경과 상관없이 아이템의 포커스가 변경되었을 때 발생하는 이벤트이다. 파워빌더 교육

169 14. Edit Control/데이터윈도우 Buffer
파워빌더 교육 14. Edit Control/데이터윈도우 Buffer 목표 ▣ Edit Control과 데이터윈도우 Buffer를 이해한다. 목차 ▶ Edit Control의 이해 ▶ 데이터윈도우 Buffer 파워빌더 교육 (주)MNP

170 ItemFocusChanged triggered
Edit 컨트롤의 이해 Edit 컨트롤이란? 사용자가 데이터윈도우 컨트롤 주위를 움직이면서, 데이터윈도우가 현재 셀 위에 Edit Control을 배치한다. Text Edit control 처리방법 데이터윈도우에 있는 열의 데이터가 변경되었을 때 포커스를 잃으면 다음과 같이 이벤트가 발생한다. 데이터윈도우 컨트롤이 칼럼을 위한 올바른 데이터형식으로 텍스트를 변환한다. 데이터가 올바른 형식으로 성공적으로 변환하며, 데이터윈도우 컨트롤은 컬럼에서 사용하는 모든 유효성 검사 규칙을 적용한다. 데이터 유효성 검사에 실패하면 ItemError이벤트가 트리거된다. 데이터 유효성 검사를 통과하면 다음 ItemChanged이벤트가 트리거됩니다. 예를 들어 ItemChanged이벤트에서Action/Return 코드를 1로 설정하면, 데이터윈도우 컨트롤의