넥사크로플랫폼의 메인화면을 구성하는 Frame Object의 종류와 이것을 이용한 SDI, MDI 형태의 애플리케이션을 구성해 봅니다.
Frame Object
ChildFrame
ChildFrame은 Form을 실행 할 수 있는 기본 프레임 입니다. formurl 속성에 Form경로를 링크하여 실행합니다. 상단 titlebar와 하단 statusbar로 구성됩니다.
01_화면예
FrameSet, HFrameSet, VFrameSet
애플리케이션 화면 배열을 위한 프레임 입니다. MainFrame을 제외한 모든 프레임을 반복적으로 가질 수 있습니다. FrmaSet은 하위 프레임을 자유롭게 배열 할 수 있는 프레임 입니다. VFrameSet은 하위 프레임을 수직 방향으로 배열 할 수 있는 프레임 입니다. HFrameSet은 하위 프레임을 수평 방향으로 배열 할 수 있는 프레임 입니다.
01_화면예
01_화면예
01_화면예
MainFrame
애플리케이션을 구성하는 최상위 프레임 입니다. MainFrame 하위에는 FrameSet, VFrameSet, HFrameSet, ChildFrame 중 하나의 프레임만 위치할 수 있습니다.
01_화면예
Frame Template
01_화면예
01_화면예
01_화면예
01_화면예
애플리케이션 구성
기본작업
데이터 생성
메뉴를 표현하기 위한 샘플 데이터를 구성 합니다. Project Explorer의 App Information > AppVariables에 전역 Dataset을 추가하고 id속성을 gds_menu로 변경 합니다.
02_컴포넌트
메뉴를 표현할때 필요한 최소 데이터는 다음과 같습니다.
컬럼ID | 컬럼명 | 설명 |
---|---|---|
MENU_ID | 메뉴 Key | |
MENU_NAME | 메뉴명 | |
MENU_LEVEL | 메뉴 레벨 | 0부터 시작하는 메뉴 레벨값 |
FORM_URL | 화면경로 | 메뉴 선택시 오픈 할 화면의 경로 |
메뉴에 필요한 컬럼과 데이터를 직접 입력하거나 아래의 샘플 데이터를 이용합니다.
02_컴포넌트
<ColumnInfo> <Column id="MENU_ID" type="STRING" size="256"/> <Column id="MENU_NAME" type="STRING" size="256"/> <Column id="MENU_LEVEL" type="STRING" size="256"/> <Column id="FORM_URL" type="STRING" size="256"/> </ColumnInfo> <Rows> <Row> <Col id="MENU_NAME">Main Menu1</Col> <Col id="MENU_LEVEL">0</Col> <Col id="MENU_ID">1</Col> </Row> <Row> <Col id="MENU_NAME">Sub Menu1</Col> <Col id="MENU_LEVEL">1</Col> <Col id="MENU_ID">2</Col> </Row> <Row> <Col id="MENU_NAME">Form Hello</Col> <Col id="MENU_LEVEL">2</Col> <Col id="MENU_ID">3</Col> <Col id="FORM_URL">Base::Hello.xfdl</Col> </Row> <Row> <Col id="MENU_NAME">Form Emp</Col> <Col id="MENU_LEVEL">2</Col> <Col id="MENU_ID">4</Col> <Col id="FORM_URL">Form::Form_Emp.xfdl</Col> </Row> <Row> <Col id="MENU_NAME">Sub Menu2</Col> <Col id="MENU_LEVEL">1</Col> <Col id="MENU_ID">5</Col> </Row> <Row> <Col id="MENU_NAME">Form 1</Col> <Col id="MENU_LEVEL">2</Col> <Col id="MENU_ID">6</Col> </Row> <Row> <Col id="MENU_NAME">Main Menu2</Col> <Col id="MENU_LEVEL">0</Col> <Col id="MENU_ID">7</Col> </Row> <Row> <Col id="MENU_NAME">Sub Menu1</Col> <Col id="MENU_LEVEL">1</Col> <Col id="MENU_ID">8</Col> </Row> <Row> <Col id="MENU_NAME">Form 1</Col> <Col id="MENU_LEVEL">2</Col> <Col id="MENU_ID">9</Col> </Row> <Row> <Col id="MENU_NAME">Form 2</Col> <Col id="MENU_LEVEL">2</Col> <Col id="MENU_ID">10</Col> </Row> </Rows>
메뉴 화면 구성
메인화면의 상단과 좌측에 위치할 화면을 구성합니다. 최초 프로젝트를 만들때 자동으로 생성된 폼을 이용합니다.
소스참고 nexacro17_Education_Materials\Sample\EduProject\FrameBase\Form_Left.xfdl nexacro17_Education_Materials\Sample\EduProject\FrameBase\Form_Top.xfdl
좌측 메뉴 구성
좌측 영역에 표현할 화면을 트리 형식으로 메뉴를 구성 합니다. FrameBase>Form_Left 폼에 적용합 니다. 트리 형태로 표현하기 위해 그리드 컴포넌트를 생성하고 gds_menu 데이터셋을 드래그앤드롭하여 바인드 합니다.
02_컴포넌트
Grid를 더블 클릭하여 컬럼을 편집합니다. 메뉴명을 표현하는 컬럼을 제외한 나머지 컬럼과 헤더영역를 삭제합니다.
02_컴포넌트
트리 형태로 표현하기 위해 셀의 속성을 수정합니다.
02_컴포넌트
컴포넌트 | 설명 | 속성 | 속성값 |
---|---|---|---|
| 셀에 표시되는 형식 | displaytype | treeitemcontrol |
셀의 편집 형식 | edittype | tree | |
메뉴 레벨 컬럼 바인드 | treelevel | bind:MENU_LEVEL |
Grid의 속성도 다음과 같이 설정합니다.
02_컴포넌트
컴포넌트 | 설명 | 속성 | 속성값 |
---|---|---|---|
| 트리의 상태 | treeinitstatus | expand,all |
체크박스 사용여부 | treeusecheckbox | false |
상단 메뉴 구성
상단 영역에 표현할 화면을 풀다운 메뉴 형태로 구성 합니다. FrameBase>Form_Top 폼에 적용합니다.
02_컴포넌트
컴포넌트 | 설명 | 속성 | 속성값 |
---|---|---|---|
1 | image | theme://images/img_WF_Nexacro.png | |
2 | 메뉴로 표현할 데이터셋 | levelcolumn | gds_menu |
메뉴명 컬럼 | captioncolumn | MENU_NAME | |
메뉴아이디 컬럼 | idcolumn | MENU_ID | |
메뉴레벨 컬럼 | levelcolumn | MENU_LEVEL |
SDI 애플리케이션
SDI는 Single Document Interface의 약어로 애플리케이션 형태가 Single Frame 형태를 의미합니다. 하나의 애플리케이션에 하나의 화면이 표현되는 형태입니다.
소스참고 nexacro17_Education_Materials\Sample\EduProject\App_Desktop_SDI.xadl
01_화면예
프레임 구조
Project Explorer > App Infomation > Apps > App_Desktop 항목을 더블클릭하여 프레임 편집창을 오픈합니다.
최초 "sampleProject"를 프로젝트 생성할때 프레임 템플릿 유형을 선택하고 만든 경우 자동으로 프레임이 구성 됩니다. 그리고 그 안에 포함되는 화면까지도 자동으로 생성됩니다.
02_컴포넌트
02_컴포넌트
1 상단 메뉴화면이 들어가는 영역입니다. 2 좌측 트리 형태의 메뉴화면이 들어가는 영역입니다. 3 메뉴에 대한 업무화면이 들어가는 영역입니다.
프레임 템플릿 유형에 따라 프레임 속성이 아래와 같이 자동 지정 됩니다.
프레임 | 설명 | 속성 | 속성값 |
---|---|---|---|
mainframe | 애플리케이션의 너비 | width | 1024 |
애플리케이션의 높이 | height | 768 | |
VFrameSet00 | 자식 프레임의 높이 | separatesize | 50,* (상단 50px 나머지 전체영역) |
HFrameSet00 | 자식 프레임의 너비 | separatesize | 200,* (좌측 200px 나머지 전체영역) |
TopFrame | 해당영역에 위치할 화면의 경로 | formurl | FrameBase::Form_Top.xfdl |
LeftFrame | 해당영역에 위치할 화면의 경로 | formurl | FrameBase::Form_Left.xfdl |
WorkFrame | 해당영역에 위치할 화면의 경로 | formurl | FrameBase::Form_Work.xfdl |
프로젝트 생성시 프레임 구조 선택하지 않았거나, 수정이 필요한 경우
프레임 편집창의 마우스 우클릭 메뉴 또는 상단의아이콘을 이용하여 직접 편집합니다. 상단, 좌측 영역에 포함 할 화면도 직접 생성하여 설정 합니다.
1
mainframe 선택 > 마우스 우클릭 > Add Frame > VFrameSet
02_컴포넌트
2
VFrameSet00 선택 > 마우스 우클릭 > Add Frame > ChildFrame
02_컴포넌트
3
다시 VFrameSet00 선택 > 마우스 우클릭 > Add Frame > HFrameSet
02_컴포넌트
4
HFrameSet00 선택 > 마우스 우클릭 > Add Frame > ChildFrame
02_컴포넌트
5
다시 HFrameSet00 선택 > 마우스 우클릭 > Add Frame > ChildFrame
02_컴포넌트
6
3개의 ChildFrame을 각각 선택하여 id 속성값을 변경
VFrameSet00 > ChildFrame00의 id 속성 TopFrame HFrameSet00 > ChildFrame00의 id 속성 LeftFrame HFrameSet00 > ChildFrame01의 id 속성 WorkFrame
02_컴포넌트
스크립트 작성
화면을 오픈하는 스크립트를 작성합니다. 좌측 영역 화면의 Grid 컴포넌트 oncelldblclick(셀 더블클릭) 이벤트에 적용 합니다.
this.Grid00_oncelldblclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo) { var objApp = nexacro.getApplication(); var strID = objApp.gds_menu.getColumn(e.row, "MENU_ID"); var strURL = objApp.gds_menu.getColumn(e.row, "FORM_URL"); this.fn_openForm(objApp, strID, strURL); }; this.fn_openForm = function(pObj, pID, pURL) { if(pID.length <= 0) return; pObj.mainframe.VFrameSet00.HFrameSet00.WorkFrame.set_formurl(pURL); };
상단 영역 화면의 Menu 컴포넌트 onmenuclick 이벤트에 적용 합니다. 좌측 영역 화면에서 선언한 "fn_openForm" 함수를 호출 하는 방식으로 작성합니다.
this.Menu00_onmenuclick = function(obj:nexacro.Menu,e:nexacro.MenuClickEventInfo) { var objApp = nexacro.getApplication(); var strID = e.id; var strURL = objApp.gds_menu.lookup("MENU_ID", strID, "FORM_URL"); objApp.mainframe.VFrameSet0.HFrameSet0.LeftFrame.form.fn_openForm(objApp, strID, strURL); };
결과 확인
전체 애플리케이션을 실행하는 Launch 아이콘을 이용하여 결과를 확인합니다.
02_컴포넌트
02_컴포넌트
MDI 애플리케이션
MDI는 Multiple Document Interface의 약어로 애플리케이션 형태가 Multi Frame 형태를 의미합니다. 하나의 애플리케이션에 여러개의 화면이 표현되는 형태입니다.
소스참고 nexacro17_Education_Materials\Sample\EduProject\App_Desktop_MDI.xadl
01_화면예
애플리케이션 생성
MDI 형태의 애플리케이션을 신규로 생성합니다. 상단의 메뉴 또는 Project Explorer 의 Apps 항목 우클릭 메뉴를 이용 합니다.
[Menu] File > New > Application
02_컴포넌트
desktop 애플리케이션을 추가로 생성합니다. 애플리케이션 크기와 Screen ID, App ID를 지정 합니다.
02_컴포넌트
Frameset Template 에서 SDI 애플리케이션과 동일한 형태인 TopLeft 프레임으로 구성합니다.
02_컴포넌트
하나의 프로젝트에 여러개의 스크린과 애플리케이션이 생성됩니다.
02_컴포넌트
App_Desktop_MDI 항목을 더블 클릭하여 프레임 편집기 창을 오픈 합니다. 화면이 오픈되는 영역(WorkFrame)의 프레임 ChildFrame형태 입니다. 이 영역에 여러개의 화면화면을 오픈할 수 있도록 구성 합니다. ChildFrame형태인 WorkFrame영역을 삭제 하고, 여러개의 화면을 띄울 수 있는 FrameSet형태를 추가 합니다.
02_컴포넌트
HFrameSet00 항목을 선택하고 마우스 우클릭 메뉴를 이용하여 FrameSet 오브젝트를 추가하고, WorkFrame 항목은 삭제 합니다.
02_컴포넌트
아래와 같이 FrameSet형태로 프레임을 구성 합니다.
02_컴포넌트
스크립트 작성
화면을 오픈하는 스크립트를 작성합니다. 좌측 영역 화면의 Grid 컴포넌트 oncelldblclick(셀 더블클릭) 이벤트에 적용 합니다.
this.Grid00_oncelldblclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo) { var objApp = nexacro.getApplication(); var strID = objApp.gds_menu.getColumn(e.row, "MENU_ID"); var strURL = objApp.gds_menu.getColumn(e.row, "FORM_URL"); this.fn_openForm(objApp, strID, strURL); }; this.fn_openForm = function(pObj, pID, pURL) { if(pID.length <= 0) return; var arrObj = pObj.mainframe.VFrameSet00.HFrameSet00.FrameSet00.all; for(var i=0; i<arrObj.length; i++) { if(arrObj[i].name == pID){ arrObj[i].setFocus(); return; } } var objChildFrame = new ChildFrame(pID, 0, 0, 800, 600); objChildFrame.set_formurl(pURL); objChildFrame.set_resizable(true); objChildFrame.set_openstatus("normal"); objChildFrame.set_border("1px solid #5d6468"); pObj.mainframe.VFrameSet00.HFrameSet00.FrameSet00.addChild(pID, objChildFrame); objChildFrame.show(); };
상단 영역 화면의 Menu 컴포넌트 onmenuclick 이벤트에 적용 합니다. 좌측 영역 화면에서 선언한 "fn_openForm" 함수를 호출 하는 방식으로 작성합니다.
this.Menu00_onmenuclick = function(obj:nexacro.Menu,e:nexacro.MenuClickEventInfo) { var objApp = nexacro.getApplication(); var strID = e.id; var strURL = objApp.gds_menu.lookup("MENU_ID", strID, "FORM_URL"); objApp.mainframe.VFrameSet0.HFrameSet0.LeftFrame.form.fn_openForm(objApp, strID, strURL); };
결과 확인
상단 툴바에서 실행 할 스크린을 먼저 선택한 후 전체 애플리케이션을 실행하는 Launch 아이콘을 이용하여 결과를 확인 합니다.
02_컴포넌트
02_컴포넌트
좌측 영역에 위치한 트리 형태의 화면을 SDI, MDI 애플리케이션에서 동시에 사용할 경우 "fn_openForm" 함수를 아래와 같이 적용하면 공통으로 사용 할 수 있습니다.
this.fn_openForm = function(pObj, pID, pURL) { if(pID.length <= 0) return; if(pObj.id == "App_Desktop"){ pObj.mainframe.VFrameSet00.HFrameSet00.WorkFrame.set_formurl(pURL); } else if(pObj.id == "App_Desktop_MDI"){ var arrObj = pObj.mainframe.VFrameSet00.HFrameSet00.FrameSet00.all; for(var i=0; i<arrObj.length; i++) { if(arrObj[i].name == pID){ arrObj[i].setFocus(); return; } } var objChildFrame = new ChildFrame(pID, 0, 0, 800, 600); objChildFrame.set_formurl(pURL); objChildFrame.set_resizable(true); objChildFrame.set_openstatus("normal"); objChildFrame.set_border("1px solid #5d6468"); pObj.mainframe.VFrameSet00.HFrameSet00.FrameSet00.addChild(pID, objChildFrame); objChildFrame.show(); } };