QuickCode 상세 스펙 및 참고

Action 오브젝트 속성, 메소드, 이벤트

속성

속성명

설명

targetview

Action을 수행할 View 컴포넌트를 설정하는 속성입니다.

메소드

메소드명

설명

getContents

Action 실행 시 전달되는 contents 오브젝트 또는 key에 해당하는 value 오브젝트를 반환합니다.

Action.getContents([strKey])

- strKey 매개변수를 설정하지 않으면 contents 오브젝트를 반환합니다.

- strKey 매개변수는 "model", "extra" 중 하나를 설정할 수 있습니다.

getTargetView

targetview 속성값에 해당하는 View 컴포넌트를 반환합니다.

Action.getTargetView()

run

Action 을 수행합니다.

Action.run()

이벤트

이벤트명

설명

onsuccess

run 메소드 실행이 성공했을 때 Trigger callback 처리를 위한 event 입니다.

onsuccess(obj:nexacro.Action,e:nexacro.ActionEventInfo);

onerror

run 메소드 실행이 실패했을 때 Trigger callback 처리를 위한 event 입니다.

onerror(obj:nexacro.Action,e:nexacro.ActionEventInfo);

Trigger type에 사용할 수 있는 항목 정보

예제에서는 Button 클릭 시 trigger가 동작하도록 컨텍스트 메뉴에서 "click" 항목을 선택했습니다. "click" 항목을 선택하는 것은 Button 컴포넌트의 onclick 이벤트 함수를 작성하는 것과 비슷합니다. 아래 목록은 사용할 수 있는 trigger type을 보여줍니다.

type

event

설명

Click

onclick

대상 오브젝트(컴포넌트) 마우스 클릭 동작 시 발생합니다.

Row Change

onrowposchanged

대상 View 컴포넌트의 viewdataset 오브젝트의 rowposition 변경 시 발생합니다.

View 컴포넌트 선택 시 Object 항목은 자동 선택되며 변경할 수 없습니다.

Value Change

oncolumnchanged

대상 View 컴포넌트의 viewdataset 오브젝트의 컬럼값 변경 시 발생합니다.

View 컴포넌트 선택 시 Object 항목은 자동 선택되며 변경할 수 없습니다.

Action Success

onsuccess

선택한 Action 오브젝트 실행이 성공했을 때 발생합니다.

View 항목은 Form 오브젝트를 선택하며 Object 항목은 Action 오브젝트를 선택합니다.

Action Fail

onerror

선택한 Action 오브젝트 실행이 실패했을 때 발생합니다.

View 항목은 Form 오브젝트를 선택하며 Object 항목은 Action 오브젝트를 선택합니다.

Model Load Success

onmodelloadsuccess

대상 View 컴포넌트의 viewdataset 오브젝트의 데이터 로딩 시 발생합니다.

View 컴포넌트 선택 시 Object 항목은 자동 선택되며 변경할 수 없습니다.

Model Load Fail

onmodelloadfail

대상 View 컴포넌트의 viewdataset 오브젝트의 데이터 로딩 실패 시 발생합니다 (데이터가 없는 경우도 발생합니다).

View 컴포넌트 선택 시 Object 항목은 자동 선택되며 변경할 수 없습니다.

Form init

onload

Form 오브젝트 로딩 시 발생합니다.

External Input

onextendedcommand

DeviceAdaptors 에 정의된 디바이스에서 이벤트가 전달되었을 때 발생합니다.

Action 오브젝트를 컴포넌트/오브젝트 위에 끌어다 놓을 때 표시되는 컨텍스트 메뉴는 아래와 같습니다.

컴포넌트/오브젝트

컨텍스트 메뉴

컴포넌트

(View 컴포넌트 제외)

(none)

Click

External Input

View 컴포넌트

(none)

Click (Component)

Model Load Success

Model Load Fail

External Input

Action

(none)

Action Success

Action Fail

External Input

viewdataset

(none)

Row Change (dataset)

Value Change (dataset)

Model Load Success (View-viewdataset)

Model Load Fail (View-viewdataset)

External Input

Form

(none)

Form Init

External Input

Trigger condition 예약어 및 샘플

Action 연결 시 Trigger 발생 조건을 설정할 수 있습니다. 사용할 수 있는 예약어는 아래와 같습니다.

예약어

설명

triggerview

Action 설정 시 Trigger 항목의 triggerview로 설정한 오브젝트입니다.

triggerobj

Action 설정 시 Trigger 항목의 triggerobj로 설정한 오브젝트입니다.

form

Trigger가 포함된 상위 Form 오브젝트입니다.

아래와 같은 식으로 적용할 수 있습니다.

triggerview.name=='view_search' && triggerobj.name == 'btn_Trigger00_00' && form.name == 'sample_MasterDetail_V'

triggerobj의 특정 속성을 조건으로 적용할 수 있습니다. 예를 들어 Type이 "Action Success"인 경우에는 triggerobj가 Action입니다. 해당 Action이 처리될 때 속성값에 따라 다음 Action 처리 여부를 판단할 수 있습니다.

triggerobj.alerttype == 'true'

fn_GetViewGenerationResult 반환값 JSON 형식

fn_GetViewGenerationResult 함수 호출 시 전달되는 contents 매개변수나 함수 호출 후 반환되는 값은 아래와 같은 JSON 형식으로 처리됩니다. contents 매개변수는 현재 화면의 XML 코드를 JSON으로 변환해서 전달하고 함수 호출 후 반환되는 JSON 코드는 넥사크로 스튜디오에서 XML 코드로 변환해 화면에 반영됩니다.

contents 매개변수는 넥사크로 스튜디오 내부에서 변환하지만 반환할 JSON 코드는 fn_GetViewGenerationResult 함수 내에서 형식에 따라 작성해야 합니다.

기본 형식

반환되는 JSON 코드는 View 컴포넌트 내 화면을 구성하고 Dataset 오브젝트나 바인딩 아이템 정보, 스크립트 등을 설정합니다. 기본 형식은 아래와 같습니다.

XML

JSON

<View>
    <Layouts>
        <Layout/>
    </Layouts>
    <InitValue/>
    <Objects/>
    <Bind/>
    <Script/>
</View>

{
    "View": {
        "Model": [
            {
                "fieldid": "",
                "Components": [
                    {}
                ]
            }
        ],
        "InitValue": [
            {}
        ],
        "Objects": [
            {}
        ],
        "Bind": [
            {}
        ],
        "Script": {
        }
    }
}

사용하지 않는 항목은 제외할 수 있습니다. 예를 들어 Dataset 오브젝트 하나만 가지는 구조라면 JSON 코드는 아래와 같이 처리할 수 있습니다.

{
	"View": {
		"Objects":[
			{}
		]
	}
}

View Template은 Default 레이아웃만 지원합니다.

레이아웃을 추가한 Form에서 View Template을 사용하는 경우에는 fn_GetViewGenerationResult 함수에서 정보를 처리하지 못할 수도 있습니다.

fn_GetViewGenerationResult 함수 호출 후 생성되는 XML 파일 내에는 ModelInfo나 ViewTemplateInfo 같은 태그가 추가로 생성됩니다. 해당 영역은 연결된 Model, View Template 관련 정보를 관리하는 코드이며 임의로 수정 시에는 Model과 View 템플릿으로 화면 UI 생성 시 이전 설정 정보를 가져오지 못할 수 있습니다.

변환 규칙

fn_GetViewGenerationResult 반환값 JSON 코드가 만들어야 하는 것은 넥사크로 스튜디오에서 사용할 XML 태그입니다. 아래와 같은 규칙에 따라 각 태그와 연결되는 JSON 코드를 작성합니다.

최상위 View 컴포넌트에 배치되는 컴포넌트 Model 속성 아래 구성합니다.

View 컴포넌트에 배치되는 컴포넌트는 연결된 fieldid 정보를 같이 가지고 있습니다. 그래서 Model 속성 아래에 fieldid 속성과 Components 속성을 가지고 실제 컴포넌트는 Components 속성 아래에 구성합니다.

컴포넌트와 연결된 fieldid가 없다면 Model 속성은 하나의 JSON 오브젝트만 가지고 Components 속성 아래에 컴포넌트를 나열합니다. 연결된 fieldid가 2개 이상이라면 아래와 같이 fieldid 개수만큼 JSON 오브젝트를 가지고 XML 생성 시 ModelInfo 아래에 관련 정보를 생성합니다.

XML

JSON

<View>
    <Layouts>
        <Layout>
            <Button id="Btn01"/>
            <Button id="Btn02"/>
    </Layouts>
    <ModelInfo>
        <Components>
            <Component id="Btn01" fieldid="ID"/>
            <Component id="Btn02" fieldid="DATA"/>
        </Components>
    </ModelInfo>
</View>

{
    "View": {
        "Model": [
            {
                "fieldid": "ID",
                "Components": [
                    {
                        "tag": "Button",
                        "attribute": {
                            "id": "Btn01"
                        }
                    }
                ]
            },
            {
                "fieldid": "DATA",
                "Components": [

                    {
                        "tag": "Button",
                        "attribute": {
                            "id": "Btn02"
                        }

                    }                ]
            }        ]
    }
}

하나의 태그는 하나의 JSON 오브젝트로 구성합니다.

태그명은 JSON 오브젝트의 tag 속성으로 태그 속성은 attribute 속성으로 처리합니다.

<태그명 속성1="속성1 값" 속성2="속성2 값" 속성3="속성3 값"/>
{
  "tag": "태그명",
  "attribute": {
    "속성1": "속성1 값",
    "속성2": "속성2 값",
    "속성3": "속성3 값"
  }
}

아래와 같이 컴포넌트나 오브젝트와 상관없이 하나의 태그는 하나의 JSON 오브젝트로 처리합니다.

XML

JSON

<Dataset id="Dataset00"/>


{
    "tag":"Dataset",
    "attribute":{
        "id":"Dataset00"
    }
}
<Button id="Button00" 
    taborder="0"
    text="Button00" 
    left="209" 
    top="12" 
    width="90" 
    height="30" 
    onclick="View00_Button00_onclick"/>
{
    "tag": "Button",
    "attribute": {
        "id": "Button00",
        "taborder": "0",
        "text": "Button00",
        "left": "209",
        "top": "12",
        "width": "90",
        "height": "30",
        "onclick": "View00_Button00_onclick"
    }
}
<BindItem id="item0" 
    compid="Button00" 
    propid="text" 
    datasetid="Dataset00" 
    columnid="Column0"/>
{
    "tag": "BindItem",
    "attribute": {
        "id": "item0",
        "compid": "Button00",
        "propid": "text",
        "datasetid": "Dataset00",
        "columnid": "Column0"
    }
}

하위 태그는 상위 태그의 Tag 명과 같은 JSON 배열로 구성합니다.

하위 컴포넌트를 포함하는 컨테이너 컴포넌트 같은 경우에는 tag, attribute 속성과 같은 수준에 컴포넌트 이름과 같은 이름의 속성을 가지며 속성값은 JSON 배열로 처리합니다.

컨테이너 컴포넌트가 아니더라도 Grid 컴포넌트처럼 하위 태그 구조로 된 경우에 같은 방식으로 처리합니다.

<상위 태그명>
	<하위 태그명 속성1="속성1 값" 속성2="속성2 값" 속성3="속성3 값"/>
</상위 태그명>
{
	"tag": "상위 태그명",
	"attribute": {
	},
	"상위 태그명": [
		{
			"tag": "하위 태그명",
			"attribute": {
				"속성1": "속성1 값",
				"속성2": "속성2 값",
				"속성3": "속성3 값"
			}
		}
}

아래 예시 코드에서는 이해를 돕기 위해 컴포넌트의 일부 속성은 제외했습니다.

XML

JSON

<Div id="Div00" text="Div00">
    <Layouts>
        <Layout>
            <Button id="Button00" text="Button00"/>
        </Layout>
    </Layouts>
</Div>
{
    "tag": "Div",
    "attribute": {
        "id": "Div00"
    },
    "Div": [
        {
            "Components": [
                {
                    "tag": "Button",
                    "attribute": {
                        "id": "Button00",
                        "text": "Button00"
                    }
                }
            ]
        }
    ]
}
<Bind>
    <BindItem id="item0" compid="Button00" propid="text" datasetid="Dataset00" columnid="Column0"/>
    <BindItem id="item1" compid="Button01" propid="text" datasetid="Dataset00" columnid="Column0"/>
</Bind>
{
    "tag": "Bind",
    "Bind": [
        {
            "tag": "BindItem",
            "attribute": {
                "id": "item0",
                "compid": "Button00",
                "propid": "text",
                "datasetid": "Dataset00",
                "columnid": "Column0"
            }
        },
        {
            "tag": "BindItem",
            "attribute": {
                "id": "item1",
                "compid": "Button01",
                "propid": "text",
                "datasetid": "Dataset00",
                "columnid": "Column0"
            }
        }
    ]
}
<Dataset id="Dataset00">
    <ColumnInfo>
        <Column id="Column0" type="STRING" size="256"/>
    </ColumnInfo>
    <Rows>
        <Row/>
    </Rows>
</Dataset>
{
    "tag": "Dataset",
    "attribute": {
        "id": "Dataset00"
    },
    "Dataset": [
        {
            "tag": "ColumnInfo",
            "ColumnInfo": [
                {
                    "tag": "Column",
                    "attribute": {
                        "id": "Column0",
                        "type": "STRING",
                        "size": "256"
                    }
                }
            ]
        },
        {
            "tag": "Rows",
            "Rows": [
                {
                    "tag": "Row"
                }
            ]
        }
    ]
}

Grid 컴포넌트 같은 경우에는 화면에 표시하는 형식을 지정하기 위해 몇 단계의 하위 태그를 포함하고 있습니다.

XML

JSON

<Grid id="Grid00" binddataset="Dataset00">
    <Formats>
        <Format id="default">
            <Columns>
                <Column size="80"/>
            </Columns>
            <Rows>
                <Row size="24" band="head"/>
                <Row size="24"/>
            </Rows>
            <Band id="head">
                <Cell text="Column0"/>
            </Band>
            <Band id="body">
                <Cell text="bind:Column0"/>
            </Band>
        </Format>
    </Formats>
</Grid>
{
    "tag": "Grid",
    "attribute": {
        "id": "Grid00",
        "binddataset": "Dataset01"
    },
    "Grid": [
        {
            "tag": "Formats",
            "Formats": [
                {
                    "tag": "Format",
                    "attribute": {
                        "id": "default"
                    },
                    "Format": [
                        {
                            "tag": "Columns",
                            "Columns": [
                                {
                                    "tag": "Column",
                                    "attribute": {
                                        "size": "80"
                                    }
                                }
                            ]
                        },
                        {
                            "tag": "Rows",
                            "Rows": [
                                {
                                    "tag": "Row",
                                    "attribute": {
                                        "size": "24",
                                        "band": "head"
                                    }
                                },
                                {
                                    "tag": "Row",
                                    "attribute": {
                                        "size": "24"
                                    }
                                }
                            ]
                        },
                        {
                            "tag": "Band",
                            "attribute": {
                                "id": "head"
                            },
                            "Band": [
                                {
                                    "tag": "Cell",
                                    "attribute": {
                                        "text": "Column0"
                                    }
                                }
                            ]
                        },
                        {
                            "tag": "Band",
                            "attribute": {
                                "id": "body"
                            },
                            "Band": [
                                {
                                    "tag": "Cell",
                                    "attribute": {
                                        "text": "bind:Column0"
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

Grid 컴포넌트는 하위 태그가 여러 단계로 들어가 있어서 JSON 코드가 복잡해 보일 수 있지만, 변환 규칙은 같습니다. 위의 표에 있는 Grid 컴포넌트를 태그별로 분리해보면 아래와 같습니다.

XML

JSON

<Grid id="Grid00" binddataset="Dataset00">
    <Formats>
    </Formats>
</Grid>
{
    "tag": "Grid",
    "attribute": {
        "id": "Grid00",
        "binddataset": "Dataset01"
    },
    "Grid": [
        {
            "tag": "Formats"
        }
    ]
}
<Formats>
    <Format id="default">
    </Format>
</Formats>
{
    "tag": "Formats",
    "Formats": [
        {
            "tag": "Format"
        }
    ]
}
<Format id="default">
    <Columns>
    </Columns>
    <Rows>
    </Rows>
    <Band id="head">
    </Band>
</Format>
{
    "tag": "Format",
    "attribute": {
        "id": "default"
    },
    "Format": [
        {
            "tag": "Columns"
        },
        {
            "tag": "Rows"
        },
        {
            "tag": "Band",
            "attribute": {
                "id": "head"
            }
        }
    ]
}
<Columns>
    <Column size="80"/>
</Columns>
{
    "tag": "Columns",
    "Columns": [
        {
            "tag": "Column",
            "attribute": {
                "size": "80"
            }
        }
    ]
}

아래와 같이 각 태그 단위로 JSON 오브젝트 또는 JSON 오브젝트 배열을 생성하는 함수를 만들어서 사용할 수도 있습니다. Grid나 Dataset 오브젝트처럼 필드 정보를 기반으로 처리해야 하는 영역은 별도 함수로 필드 정보를 넘겨서 처리하면 코드 가독성을 높일 수 있습니다.

{
	"tag": "Dataset",
	"attribute": { "id": "viewdataset" },
	"Dataset": [
		{
			"tag": "ColumnInfo",
			"ColumnInfo": fn_GetDsColumns(oFieldArray)
		},
		{
			"tag": "Rows",
			"Rows": fn_GetDsRows(oFieldArray)
		}
	]
}

변환 규칙 예외 (컨테이너 컴포넌트)

View Template은 Default 레이아웃만 지원합니다. 그래서 컨테이너 컴포넌트는 Layouts, Layout 태그 대신 Components 라는 속성 하나로 대응할 수 있도록 지원합니다.

XML

JSON

<Div id="Div00" text="Div00">
    <Layouts>
        <Layout>
            <Button id="Button00" text="Button00"/>
        </Layout>
    </Layouts>
</Div>
{
    "tag": "Div",
    "attribute": {
        "id": "Div00"
    },
    "Div": [
        {
            "Components": [
                {
                    "tag": "Button",
                    "attribute": {
                        "id": "Button00",
                        "text": "Button00"
                    }
                }
            ]
        }
    ]
}

아래와 같이 하나의 태그를 하나의 JSON 오브젝트로 구성하는 기본 변환 규칙을 따라갈 수도 있습니다. Components 속성 대신 Layouts, Layout 속성을 사용합니다.

XML

JSON

<Div id="Div00" text="Div00">
    <Layouts>
        <Layout>
            <Button id="Button00" text="Button00"/>
        </Layout>
    </Layouts>
</Div>
{
    "tag": "Div",
    "attribute": {
        "id": "Div00"
    },
    "Div": [
        {
            "tag": "Layouts",
            "Layouts": [
                {
                    "tag": "Layout",
                    "Layout": [
                        {
                            "tag": "Button",
                            "attribute": {
                                "id": "Button00",
                                "text": "Button00"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

이벤트 처리

이벤트는 Action을 통해서 처리할 수도 있지만 반환값에 Script 태그를 추가해서 처리할 수도 있습니다. 이런 경우에는 View 컴포넌트 내 포함된 스크립트를 호출하도록 설정해주어야 합니다.

넥사크로 스튜디오에서 이벤트 처리 시 Form 스크립트에 등록되는 것과는 다르게 View 컴포넌트의 innerform 스크립트로 처리되기 때문에 onclick 이벤트 작성 시 해당하는 View 컴포넌트의 아이디로 접근해야 합니다.

"이벤트명": {View 컴포넌트 아이디}.form.{이벤트함수명}
"onclick": "View00.form.btnAdd_onclick"
{
	"View":{
		"tag":"View",
		"attribute":{
			"id": "View00"
		},
		"Model": [
			{
				"fieldid": "",
				"Components": [
					{
						"tag": "Button",
						"attribute": {
							"id": "Button00",
							"text": "Button00",
							"onclick": "View00.form.btnAdd_onclick"
						}
					}
				]
			}
		],
		"Script": {
			"tag": "Script",
			"attribute": {
				"type": "xscript5.1"
			},
		"value": "this.btnAdd_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) {}"
}

View Layout Editor

View 템플릿 fn_GetViewAttributeList 함수 내에 edittype이 "Layout"인 항목을 설정한 경우 View Generation Wizard에서 View Attributes 항목 설정 시 View Layout Editor를 사용해 레이아웃 정보를 설정할 수 있습니다.

설정한 값은 fn_GetViewGenerationResult 함수에 generationattr 매개변수로 전달되어 View 화면 구성에 사용할 수 있습니다.

View Layout Editor에서 설정한 레이아웃 정보는 매개변수로 전달하며 View 템플릿 개발 시 레이아웃 정보를 사용할 수 있도록 직접 구현해주어야 합니다.

fn_GetViewAttributeList 함수에서 반환하는 JSON 값이 아래 같은 경우를 예로 설명합니다.

{
	"attributecount": 2,
	"attributes": [
		{
			"id": "use_triggerbutton",
			"edittype": "Boolean",
			"defaultvalue": "true"
		},
		{
			"id": "view_layout",
			"edittype": "Layout",
			"userproperties": {
				"propertycount": "1",
				"properties": [
					{
						"id": "gap",
						"edittype": "Number",
						"defaultvalue": 5
					}
				]
			}
		}			
	]
}

Form 디자인 창에서 View 컴포넌트에 Model을 연결합니다. View Generation Wizard에서 View Template을 선택하고 View Attributes 항목 설정 창에서 "Layout"으로 edittype을 설정한 항목(view_layout) 옆에 표시되는 버튼을 클릭해 VIew Layout Editor를 실행할 수 있습니다.

View Layout Editor 실행 후 첫 번째 보이는 "Create Table" 버튼을 클릭하고 레이아웃의 기본 Column, Row를 설정합니다. Column 10개, Row 8개 조합 형태까지는 바둑판 모양의 창에서 마우스 조작으로 선택할 수 있으며 그 이상 값은 "Custom" 항목 선택 후 직접 Column, Row 숫자를 입력할 수 있습니다.

입력할 수 있는 레이아웃 범위는 Column, Row 모두 1~30까지로 제한됩니다.

Column, Row 크기는 View 컴포넌트에 꽉 차게 자동 설정됩니다. 각 Column, Row 크기는 속성창에서 변경할 수 있습니다. 빨간 점선으로 표시된 경계선은 View 컴포넌트의 크기를 표시해줍니다.

Column, Row 크기를 -1로 설정하면 View 컴포넌트의 크기에서 Column, Row 크기를 설정한 값을 빼고 나머지 View 컴포넌트의 크기를 자동으로 나누어 설정해줍니다. 예를 들어 View 컴포넌트의 너비가 400이고 A 컬럼은 200, B, C 컬럼은 -1로 설정하면 B, C 컬럼은 100((400-200)/2)으로 설정되어 Editor에 표시됩니다.

너비 표시는 Editor 화면 표시에 한정된 기능이며 value 반환값은 -1로 전달되어 View Template 개발자가 직접 구현해주어야 합니다.

기본 테이블을 만든 후에는 "Edit Column", "Edit Row" 버튼 또는 컨텍스트 메뉴에서 Column, Row를 추가, 삽입하거나 삭제할 수 있습니다.

레이아웃 설정 후 [OK] 버튼을 클릭하면 "Layout"으로 edittype을 설정한 항목의 값이 설정됩니다.

셀 속성 설정하기

View Layout Editor에서 셀 선택 후 셀 속성을 설정할 수 있습니다.

기본으로 설정할 수 있는 속성은 아래와 같습니다.

Model 설정 시 선택한 필드값을 선택했다면 셀에 적용할 필드값을 설정할 수 있습니다.

fn_GetViewAttributeList 함수에서 userproperties 값을 반환했다면 User Properties 속성을 추가로 설정할 수 있습니다.

두 개의 모델 필드값(name, company)을 선택하고 한 개의 userproperties 값(gap)을 반환했다면 설정할 수 있는 셀 속성은 아래와 같습니다.

셀 합치기, 해제하기

Grid Editor와 비슷하게 셀 합치기, 해제하기 기능을 지원합니다. 두 개 이상의 셀을 선택하고 컨텍스트 메뉴에서 "Merget Cells" 항목을 선택해 셀을 합치거나 합쳐진 셀을 선택하고 컨텍스트 메뉴에서 "Split Cell" 항목을 선택해 합쳐진 셀을 해제할 수 있습니다.

셀 합치기 시 Column, Row 인덱스 정보는 작은 값으로 설정됩니다.

value 반환값 JSON 형식

value 반환값 JSON 형식은 아래와 같습니다. 반환값은 fn_GetViewGenerationResult 함수에 generationattr 매개변수로 전달되어 View 화면 구성에 사용할 수 있습니다.

{
	"columnsize":[101,101,101],
	"rowsize":[66,66],
	"celllist":[
		{
			"col":"0",
			"row":"0",
			"halign":"left",
			"valign":"top",
			"direction":"horizontal",
			"gap":"5",
			"fieldlist":["name"]
		},
		{
			"col":"0",
			"row":"1",
			"halign":"center",
			"valign":"middle",
			"direction":"vertical",
			"gap":"5",
			"colspan":"2",
			"fieldlist":["name","company"]
		}
	]
}

XML <-> JSON Converter

XML 코드를 JSON 코드로 변환하거나 JSON 코드를 XML 코드로 변환할 수 있는 기능을 지원합니다.

View 컴포넌트 정보가 View 템플릿 fn_GetViewGenerationResult 함수에 contents 매개변수로 전달되는 결과를 미리 확인하거나 fn_GetViewGenerationResult 함수에서 반환할 JSON 데이터를 만드는 용도 등으로 활용할 수 있습니다.

기능 제공 경로

XML <-> JSON Converter 기능은 여러 방식으로 접근할 수 있습니다.

변환할 코드 자동 선택

접근 경로에 따라 변환할 코드를 자동 선택하는 기능을 제공합니다.

자동 선택된 코드는 Input 영역에 복사되고 가운데 변환 버튼 클릭 시 JSON 코드로 변환됩니다. 변환된 JSON 코드는 클립보드에 복사됩니다.

직접 코드 입력

Input 영역에 직접 XML 또는 JSON 코드를 입력해서 변환할 수 있습니다. 자동으로 XML 또는 JSON 코드를 인식하고 XML->JSON 또는 JSON->XML 변환을 처리합니다.

직접 입력한 코드에 오류가 있는 경우 변환 버튼 클릭 시 Output 창에 오류 메시지를 출력합니다.

Attribute 편집

QuickCode 패널 메뉴에서 "Edit Common Attribute" 항목을 선택하면 프로젝트 내에서 Service, Model, Field에 Attribute를 추가할 수 있습니다. 각 항목을 신규 생성할 때 뿐 아니라 기존 항목에도 Attribute가 추가됩니다.

Edit Common Attribute 창이 실행되면 "Field", "Model", "Service" 항목을 선택하고 Attribute를 추가합니다.

Field Attribute 편집

Model 편집창에서 "Add Attributes"를 선택하면 "Edit User Attributes" 창이 표시됩니다.

"Edit User Attributes" 창에서 "Common Attribute"로 설정된 항목을 편집하거나 삭제하고 해당 Model에서만 사용할 Field Attribute를 추가할 수 있습니다.

Model Attribute 편집

QuickCode 패널에서 Model 선택 시 속성창에 Model Attribute가 표시됩니다.

컨텍스트 메뉴에서 "Edit User Attributes" 항목을 선택하면 "Edit User Attributes" 창이 표시됩니다.

"Edit User Attributes" 창에서 "Common Attribute"로 설정된 항목을 편집하거나 삭제하고 해당 Model에서만 사용할 Attribute를 추가할 수 있습니다.

Service Attribute 편집

QuickCode 패널에서 Service 항목을 더블클릭하거나 컨텍스트 메뉴에서 "Edit"를 선택하면 속성창에서 Service 그룹 내 항목이 활성화됩니다.

속성창 컨텍스트 메뉴에서 "Edit User Attributes" 항목을 선택하면 "Edit User Attributes" 창이 표시됩니다.

"Edit User Attributes" 창에서 "Common Attribute"로 설정된 항목을 편집하거나 삭제하고 해당 Service에서만 사용할 Attribute를 추가할 수 있습니다.

QuickCode Reference

QuickCode Reference는 Model, View Template, Action 항목을 수정하는 경우 프로젝트 내에서 해당 항목을 사용하는 Form 오브젝트와 View 컴포넌트를 찾을 수 있는 기능을 제공합니다. 메뉴[QuickCode > View > QuickCode Reference]에서 패널 표시 여부를 선택할 수 있습니다.



설명

1

필터 툴바

QuickCode 패널에서 선택한 항목을 표시하거나 필터를 삭제합니다.

2

기본 툴바

Go to Component: 선택한 View 컴포넌트로 포커스를 이동합니다.

Refresh: Reference 목록을 다시 조회합니다.

Clear All: Reference 목록을 삭제합니다.

Find: 키워드 검색 기능을 실행합니다.

3

Reference 목록

프로젝트 내에 View 컴포넌트를 사용하는 Form 오브젝트 목록을 표시합니다. 필터 적용 시에는 해당하는 목록만 표시합니다.

4

View Component 목록

선택한 Form 오브젝트에서 조건에 맞는 View 컴포넌트 목록을 표시합니다.

필터

QuickCode 패널에서 Model, View Template, Action 선택 후 컨텍스트 메뉴에서 "Reference"를 선택한 경우 해당 항목을 사용하는 결과만 표시하도록 필터를 추가할 수 있습니다. 적용된 필터 항목은 파란색으로 표시됩니다. 파란색으로 표시된 항목을 클릭하면 해당 필터를 해제합니다.

정보 표시 아이콘을 선택하면 현재 적용된 필터 정보를 확인할 수 있습니다.

검색

필터를 적용한 후에도 결과 항목이 많은 경우에는 키워드 검색으로 원하는 항목을 찾을 수 있습니다. 키워드 입력 후 검색 버튼을 클릭하면 키워드에 해당하는 항목을 하이라이트 표시합니다.

View 컴포넌트 이동

검색 결과에서 View 컴포넌트를 선택하고 "Go to Component" 버튼을 클릭하거나 View 컴포넌트를 더블 클릭하면 해당 View 컴포넌트가 포함된 Form 오브젝트를 실행하고 View 컴포넌트에 포커스를 이동합니다.

Model 서비스 조회

TypeDefinition에서 model 타입의 서비스 등록 시 URL, ServiceList, DataSchema를 등록하면 해당 서비스에서 데이터를 조회해 Model Group, Model Service, Model 항목을 가져올 수 있습니다.

Model Group, Model Service 조회하기

1

TypeDefiniction에서 서비스 항목을 추가합니다.

Type: model
URL: http://demo.nexacro.com/developer_guide/model/
ServiceList: ModelList.jsp
DataSchema: ModelList.jsp

2

QuickCode 패널에서 서비스 항목을 선택하고 컨텍스트 메뉴에서 "Refresh" 항목을 선택합니다.

항목 선택 시 서비스 URL, ServiceList에 설정된 서비스를 조회합니다. 요청 형식은 아래와 같습니다.

[URL][ServiceList]?group=/
http://demo.nexacro.com/developer_guide/N/Service/modellist.jsp?group=/

3

결과로 표시된 Model Group, Model Service를 선택하고 컨텍스트 메뉴에서 "Refresh" 항목을 선택합니다.

항목 선택 시 서비스 URL, ServiceList에 설정된 서비스를 조회합니다. 요청 형식은 아래와 같습니다.

[URL][ServiceList]?group=[선택한 Model Group 또는 Model Service]
http://demo.nexacro.com/developer_guide/N/Service/modellist.jsp?group=ModelGroup_1

Model Group 하위에 Model Group을 가진 경우에는 "/" 문자로 경로를 표시해 서비스를 조회합니다. 요청 형식은 아래와 같습니다.

[URL][ServiceList]?group=[상위 Model Group]/[선택한 Model Group]
http://demo.nexacro.com/developer_guide/N/Service/modellist.jsp?group=ModelGroup_1/ModelGroup_1_1

Model 조회하기

1

결과로 표시된 Model Service를 선택하고 컨텍스트 메뉴에서 "Refresh" 항목을 선택합니다.

Model 조회 시에는 서비스 항목에서 ServiceList 대신 DataSchema를 사용해 정보를 조회합니다. 요청 형식은 아래와 같습니다.

[URL][DataSchema]?group=[Model Group]&id[선택한 Model Service]
http://demo.nexacro.com/developer_guide/N/Service/modellist.jsp?group=ModelGroup_1/ModelGroup_1_1&id=ModelService_1

2

Model 항목을 선택하고 필드 정보를 확인할 수 있습니다.

서비스에서 조회한 Model 항목은 편집할 수 없습니다.

새로운 Field나 Attribute를 추가하는 기능은 모두 비활성화 상태로 표시됩니다.

응답 데이터 형식 - ErrorCode, ErrorMsg

Tag

Value

필수 여부

설명

정상 처리

ErrorCode

0

O


ErrorMsg


X

성공 시 메시지는 처리하지 않습니다.

에러 처리

ErrorCode

-1

O


ErrorMsg


O

수신된 메시지를 화면에 표시합니다.

응답 데이터 형식 - Model Group, Model Service

Tag

Attribute

필수 여부

설명

ModelGroup

id

O

id 값을 설정합니다.

type

O

group: Model Group

service: Model Service

[URL][ServiceList]?group=/
<?xml version='1.0' encoding='utf-8'?>
<Root>
	<ErrorCode>0</ErrorCode>
	<ErrorMsg>Success</ErrorMsg>

	<ModelGroup id="ModelGroup_1" type="group"/>
	<ModelGroup id="Service_1" type="service"/>
</Root>
[URL][ServiceList]?group=ModelGroup_1
<?xml version='1.0' encoding='utf-8'?>
<Root>
	<ErrorCode>0</ErrorCode>
	<ErrorMsg>Success</ErrorMsg>

	<ModelGroup id="ModelGroup_1">
		<ModelGroup id="ModelGroup_1_1" type="group"/>
		<ModelGroup id="Service_1_1" type="service"/>
	</ModelGroup>
</Root>

응답 데이터 형식 - Model

Tag

Attribute

필수 여부

설명

ModelInfo

version


"1.2"

Models



Model 상위 태그

Model

id

O

id

name


이름

iotype


입출력 타입 (input/output)

[attr]


ModelUserAttributes > Attribute 항목

Field

id

O

id

label

O

label 정보

fieldtype

O

유형 (FreeText/SelectOne/SelectAny/MultiMedia)

datatype

O

데이터 유형 (STRING/INT/FLOAT/BIGDECIMAL/DATE/TIME/DATETIME/BLOB)

datesize

O

데이터 크기

description


설명

required

O

필수 여부 (true/false)

[attr]


FieldUserAttributes > Attribute 항목

FieldUserAttributes



FieldUserAttributes 설정 시 Attribute 상위 태그

ModelUserAttributes



ModelUserAttributes 설정 시 Attribute 상위 태그

Service

id

O

id

name


이름

url

O

transaction 요청 시 사용할 Business Service

[attr]


ServiceUserAttributes > Attribute 항목

ServiceUserAttributes



ServiceUserAttributes 설정 시 Attribute 상위 태그

ModelUserAttributes, FieldUserAttributes, ServiceUserAttributes 태그 하위에 오는 Attribute 태그는 아래와 같은 형식을 가집니다.

Tag

Attribute

필수 여부

설명

Attribute

name

O

이름

edittype

O

편집 유형 (Boolean/Enum/Number/String/ViewObjList)

defaultvalue


기본값

enuminfo


Enum 정보

description


설명

[URL][DataSchema]?group=ModelGroup_1&id=Service_1
<ModelInfo version="1.2">
	<Models>
		<Model id="dataset_1" name="dataset_1" iotype="input" p1="TEST">
			<Field id="name" datatype="STRING" datasize="50"  label="Name"  fieldType="FreeText"  description=""  required="true"  p1="TEST"  p2="" />
			<Field id="company" datatype="STRING" datasize="50"  label="Company"  fieldType="FreeText"  description=""  required="true"  p1=""  p2="TEST" />
			<FieldUserAttributes>
				<Attribute name="p1" edittype="String"/>
				<Attribute name="p2" edittype="String"/>
			</FieldUserAttributes>
			<ModelUserAttributes>
				<Attribute name="p1" edittype="String"/>
			</ModelUserAttributes>
		</Model>
		<Model id="dataset_2" name="dataset_2" iotype="output">
			<Field id="B1" datatype="INT" datasize="10"  label="1"  fieldType="FreeText"  description=""  required="true" />
			<Field id="B2" datatype="STRING" datasize="50"  label="1"  fieldType="FreeText"  description=""  required="true" />
		</Model>
	</Models>
    <Service id="svcSearchEmployee" name="SearchEmployee" url="http://localhost:8080/searchEmployeeInfo.jsp?" svc_attr01=""/>
    <ServiceUserAttributes>
       <Attribute name="svc_attr01" edittype="String"/>
    </ServiceUserAttributes>
</ModelInfo>

예제 JSP

동작 방식을 설명하기 위해 사용한 JSP 코드입니다. 특정 Model Group, Model Serivce, Model 항목 조회 시 XML 코드를 반환합니다.

<%@ page contentType = "text/xml" %>
<%
	String str_group = request.getParameter("group")==null?"":request.getParameter("group");
	String str_id = request.getParameter("id")==null?"":request.getParameter("id");
	if(str_id.equals("")) 
	{
		if(str_group.equals("/"))
		{
%>
<Root>
  <ErrorCode>0</ErrorCode>
  <ErrorMsg>Success</ErrorMsg>

  <ModelGroup id="ModelGroup_1" type="group"/>
  <ModelGroup id="ModelGroup_2" type="group"/>
</Root>

<%
		} else if(str_group.equals("ModelGroup_1")){
%>
<Root>
  <ErrorCode>0</ErrorCode>
  <ErrorMsg>Success</ErrorMsg>

  <ModelGroup id="ModelGroup_1">
	<ModelGroup id="ModelGroup_1_1" type="group"/>
	<ModelGroup id="ModelGroup_1_2" type="group"/>
  </ModelGroup>		
</Root>
<%
		} else if(str_group.equals("ModelGroup_1/ModelGroup_1_1")){
%>
<Root>
  <ErrorCode>0</ErrorCode>
  <ErrorMsg>Success</ErrorMsg>

  <ModelGroup id="ModelGroup_1_1">
	<ModelGroup id="ModelService_1" type="service"/>
	<ModelGroup id="ModelService_2" type="service"/>
  </ModelGroup>		
</Root>
<%
		} else if(str_group.equals("ModelGroup_2")){
%>
<Root>
  <ErrorCode>0</ErrorCode>
  <ErrorMsg>Success</ErrorMsg>

  <ModelGroup id="ModelGroup_2">
	<ModelGroup id="ModelService_3" type="service"/>
	<ModelGroup id="ModelService_4" type="service"/>
  </ModelGroup>		
</Root>
<%
		} else {
%>
<Root>
  <ErrorCode>-1</ErrorCode>
  <ErrorMsg>Error</ErrorMsg>
</Root>
<%
		}
	} else if(str_id.equals("ModelService_1")){
%>
<Root>
  <ErrorCode>0</ErrorCode>
  <ErrorMsg>Success</ErrorMsg>

<ModelInfo version="1.2">
<Models>
<Model id="dataset_1" name="dataset_1" iotype="input" p1="TEST">
    <Field id="name" datatype="STRING" datasize="50"  label="Name"  fieldType="FreeText"  description=""  required="true"  p1="TEST"  p2="" />
    <Field id="company" datatype="STRING" datasize="50"  label="Company"  fieldType="FreeText"  description=""  required="true"  p1=""  p2="TEST" />
<FieldUserAttributes>
    <Attribute name="p1" edittype="String"/>
    <Attribute name="p2" edittype="String"/>
</FieldUserAttributes>
<ModelUserAttributes>
	<Attribute name="p1" edittype="String"/>
</ModelUserAttributes>
</Model>
<Model id="dataset_2" name="dataset_2" iotype="output">
    <Field id="B1" datatype="INT" datasize="10"  label="1"  fieldType="FreeText"  description=""  required="true" />
    <Field id="B2" datatype="STRING" datasize="50"  label="1"  fieldType="FreeText"  description=""  required="true" />
</Model>
</Models>
<Service id="svcSearchEmployee" name="SearchEmployee" url="http://localhost:8080/searchEmployeeInfo.jsp?" svc_attr01=""/>
    <ServiceUserAttributes>
       <Attribute name="svc_attr01" edittype="String"/>
    </ServiceUserAttributes>
</ModelInfo>	
</Root>
<%
	} else if(str_id.equals("ModelService_3")){
%>
<Root>
  <ErrorCode>0</ErrorCode>
  <ErrorMsg>Success</ErrorMsg>

<ModelInfo version="1.2">
<Models>
<Model id="dataset_1" name="dataset_1" iotype="input">
    <Field id="name" datatype="STRING" datasize="50"  label="Name"  fieldType="FreeText"  description=""  required="true" />
    <Field id="company" datatype="STRING" datasize="50"  label="Company"  fieldType="FreeText"  description=""  required="true" />
</Model>
</Models>
</ModelInfo>	
</Root>
<%
	} else {
%>
<Root>
  <ErrorCode>-1</ErrorCode>
  <ErrorMsg>Error</ErrorMsg>
</Root>
<%
	}
%>