Data Validation

이번 장 또는 절에서 설명하는 기능은 넥사크로플랫폼 17.1.0.100 버전에서 추가된 기능입니다.

Dataset 오브젝트 또는 컴포넌트에서 처리하는 데이터 중에서 처리 기준이 명확하지 않아 다른 방식으로 처리되던 데이터를 일관성 있게 정리하는 작업을 진행했습니다. 명확하게 데이터 타입에 맞는 대부분의 데이터는 이전 방식과 차이가 없지만, 일부 데이터의 경우 결과값이 다를 수 있습니다.

datatyperule 속성 추가

변경된 Data 유효성 처리 규칙을 적용할지 여부를 설정할 수 있습니다. 속성 적용 기준은 아래와 같습니다.

적용 대상은 아래와 같습니다.

datatyperule 속성은 스크립트에서 변경할 수 없습니다.

Dataset 오브젝트 Validation 규칙

Dataset 오브젝트에서 숫자형이나 날짜형 데이터 처리 시 범위를 벗어나는 경우 0이나 빈값으로 모호하게 처리하던 항목을 Infinity, -Infinity, NaN, Invalid Date 와 같은 값으로 결과값을 처리하도록 변경했습니다.

문자, 숫자값의 유효성 처리는 아래와 같이 변경되었습니다. 일부 예외적인 입력값에 대한 처리 결과값이 변경됐습니다.

데이터 타입

데이터 형식(Load)

결과값

17.0.0.x

STRING

null

undefined

null

INT

Infinity / -Infinity

NaN

0

입력값 오류

NaN

""

FLOAT

입력값 오류

NaN

""

BIGDECIMAL

Infinity / -Infinity

Infinity / -Infinity

0

입력값 오류

NaN

undefined

날짜와 시간에 대한 유효성 처리는 아래와 같습니다. JavaScript 표준에서 처리되는 규칙을 적용하며 일부 예외적인 입력값에 대한 처리 결과값이 변경됐습니다.

데이터 타입

데이터 형식(Load)

결과값

17.0.0.x

DATE

Infinity / -Infinity

Invalid Date

자체 보정값

입력형식(8자) 오류

Invalid Date

자체 보정값

입력값 오류

Invalid Date

자체 보정값

DATETIME

Infinity / -Infinity

Invalid Date

자체 보정값

입력형식(14, 17자) 오류

Invalid Date

자체 보정값

입력값 오류

Invalid Date

자체 보정값

TIME

Infinity / -Infinity

Invalid Date

자체 보정값

입력형식(6, 9자) 오류

Invalid Date

자체 보정값

입력값 오류

Invalid Date

자체 보정값

입력형식 오류 또는 입력값 오류의 경우에는 브라우저의 자바스크립트 엔진에서 Date 객체가 처리하는 방식에 따라 결과값을 처리합니다. 대부분 Invalid Date로 처리하지만, 일부 데이터는 자체 보정하는 경우가 있기 때문에 원하는 결과가 나오지 않을 수 있습니다.

예를 들어 type 항목을 "TIME"으로 지정하고 입력형식과 맞지 않은 "12120"을 입력한 경우 IE11에서는 "Invalid Date"로 처리하지만, NRE나 크롬 브라우저에서는 "000000000"으로 보정해 처리합니다.

새로 추가된 속성, 메소드 파라미터

예외적인 값을 처리하기 위해 새로운 속성과 메소드를 아래와 같이 추가했습니다.

invalid 데이터 저장

saveXML, saveSSV, saveCSV, transaction 메소드 실행 시 NaN, (-)Infinity, invaliddate 형태의 값을 처리하는 방식을 지정하기 위한 속성을 추가했습니다.

속성

대상 오브젝트

설명

datasetsavenan

Environment

Dataset 의 column type 이 int/float/bigdecimal 이고 값이 NaN 일때

"include": NaN 값으로 저장

"exclude"(default): "" 값으로 저장

datasetsaveinfinity

Environment

Dataset 의 column type 이 int/float/bigdecimal 이고 값이 (-)Infinity 일때

"include"(default): (-)Infinity 값으로 저장

"exclude": "" 값으로 저장

datasetsaveinvaliddate

Environment

Dataset 의 column type 이 Date/DateTime/Time 이고 값이 Invaliddate 일때

"include": Invaliddate 값으로 저장

"exclude"(default): "" 값으로 저장

savenan

Dataset

datasetsavenan 속성과 같음

값을 지정하지 않으면 datasetsavenan 속성값 적용

saveinfinity

Dataset

datasetsaveinfinity 속성과 같음

값을 지정하지 않으면 datasetsaveinfinity 속성값 적용

saveinvaliddate

Dataset

datasetsaveinvaliddate 속성과 같음

값을 지정하지 않으면 datasetsaveinvaliddate 속성값 적용

saveXML, saveSSV, saveCSV 메소드 실행 시 지정할 수 있는 파라미터(savenan, saveinfinity, saveinvaliddate)가 추가됐습니다.

saveXML([strID[,strSaveType[,savenan,[saveinfinity,[saveinvaliddate]]])
saveCSV([strID[,savenan,[saveinfinity,[saveinvaliddate]]])
saveSSV([strID[,strSaveType[,savenan,[saveinfinity,[saveinvaliddate]]])

파라미터

대상 오브젝트

설명

savenan

Dataset

true/false/undefined : true이면 "include", false 이면 "exclude", undefined이면 Dataset.savenan 값을 따라감

saveinfinity

Dataset

true/false/undefined : true이면 "include", false 이면 "exclude", undefined이면 Dataset.saveinfinity 값을 따라감

saveinvaliddate

Dataset

true/false/undefined : true이면 "include", false 이면 "exclude", undefined이면 Dataset.saveinvaliddate 값을 따라감

invalid 데이터 표시

유효하지 않은 데이터를 화면에 어떻게 표시할지 설정하는 속성을 추가했습니다.

속성

대상 오브젝트

설명

displayinvalidtext

Calendar

MaskEdit

Spin

default : "invalid value"

value 가 NaN, (-)Infinity, Invaliddate 인 경우에 text 에 보여줄 값

calendardisplayinvalidtype

GridCellControl

ListViewCellControl

default: "invalidtext"

none: value값을 보여준다.

invalidtext: calendardisplayinvalidtext 값을 보여준다.

nullmask: nullmask 를 보여준다.

calendardisplayinvalidtext

GridCellControl,

ListViewCellControl

default: "invalid value"

value 가 NaN, (-)Infinity, Invaliddate 인 경우에 text 에 보여줄 값

displayinvalidtext가 표시될때의 userstatus 추가했습니다.

userstatus

대상 오브젝트

설명

invalidtext

Calendar

MaskEdit

Spin

GridCellControl,

ListViewCellControl

displayinvalidtext가 표시될때의 userstatus 추가.

innerdataset에 없는 데이터 처리

속성

대상 오브젝트

설명

acceptvaluetype

Combo

ListBox

Radio

- default : "allowinvalid"

- Combo, ListBox, Radio 에 innerdataset을 통한 validatation을 할 것인지 여부를 제어 가능하도록 acceptvaluetype 속성 추가.

- innerdataset에 없는 값이 value로 설정될 경우에 대한 처리 여부 설정.

- "ignoreinvalid"로 설정 될 경우 변경 없음.

변경된 속성, 메소드 기능

데이터 설정 방식 변경

메소드

대상 오브젝트

설명

setColumn, setColumnNF, setConstColumn

Dataset

invalid value에 대하여 무시 처리

loadBIN, loadCSV, loadSSV, loadXML, transaction

Dataset

invalid value 설정 허용

setColumn 메소드로 INT, FLOAT, BIGDECIMAL 타입에 Infinity 또는 잘못된 값을 입력하는 경우에는 false를 반환하고 값을 적용하지 않습니다.

trace(this.Dataset00.setColumn(1, 3, Number.POSITIVE_INFINITY)); // false
trace(this.Dataset00.setColumn(2, 3, "TEST")); // false

setColumn 메소드로 DATE, DATETIME, TIME 타입에 Infinity 또는 잘못된 값을 입력하는 경우에는 false를 반환하고 값을 적용하지 않습니다.

trace(this.Dataset00.setColumn(0, 3, Number.POSITIVE_INFINITY)); // false
trace(this.Dataset00.setColumn(1, 3, "20201010")); // true
trace(this.Dataset00.setColumn(2, 3, "202010101")); // false
trace(this.Dataset00.setColumn(3, 3, "TEST")); // false

데이터 연산 방식 변경

이전 버전에서는 예외적인 값을 0으로 처리했으나 변경된 Dataset 유효성 처리 규칙에서는 예외적인 값이 포함되어 있는 경우 전체 연산 결과값을 다르게 처리합니다. 예를 들어 BIGDECIMAL 타입의 컬럼 데이터에 Infinity 값이 포함되어 있으면 getMax 메소드 실행 시 이전 버전에서는 0으로 처리했으나, 변경된 Dataset 유효성 처리 규칙에서는 Infinity가 가장 큰 값으로 반환됩니다.

데이터 타입

데이터 형식(Load)

결과값

17.0.0.x

getSum(NF), getCaseSum(NF), getRowsSum(NF)

getAvg(NF), getCaseAvg(NF), getRowsAvg(NF)

BIGDECIMAL

Infinity + -Infinity

NaN

Infinity 또는 -Infinity 값을 0으로 처리하고 연산

Infinity / -Infinity

Infinity / -Infinity

Infinity 또는 -Infinity 값을 0으로 처리하고 연산

입력값 오류

NaN

해당 값을 0으로 처리하고 연산

getMax(NF), getCaseMax(NF), getRowsMax(NF)

BIGDECIMAL

Infinity가 포함된 경우

Infinity

Infinity 또는 -Infinity 값을 0으로 처리하고 연산


-Infinity만 있는 경우

-Infinity

Infinity 또는 -Infinity 값을 0으로 처리하고 연산

getMin(NF), getCaseMin(NF), getRowsMin(NF)

BIGDECIMAL

-Infinity가 포함된 경우

-Infinity

Infinity 또는 -Infinity 값을 0으로 처리하고 연산


Infinity만 있는 경우

Infinity

Infinity 또는 -Infinity 값을 0으로 처리하고 연산

getCount(NF), getCaseCount(NF), getRowsCount(NF)

INT, FLOAT, BIGDECIMAL


undefined/null/""/NaN 를 제외한 row count

undefined/null를

제외한 row count

DATE, TIME, DATETIME


undefined/null/invaliddate 를 제외한 row count

undefined/null를

제외한 row count

데이터 정렬 방식 변경

keystring 또는 updateSortGroup 메소드를 사용해 데이터를 정렬하는 경우 데이터 타입에 따라 정렬 방식이 변경됐습니다. 문자열이나 숫자, 날짜값에 대한 정렬 방식은 기존과 같고 예외적인 값에 대한 처리 방식이 변경됐습니다.

데이터 타입

데이터 형식(Load)

17.0.0.x

STRING

Empty < 문자열 < Undefined (NULL)

Empty < Undefined < 문자열

INT, FLOAT, BIGDECIMAL

-Infinity < -1 < 0 < 20 < Infinity < Empty < undefined (NULL, NaN)

-1 < -Infinity < Infinity < undefined (NULL, NaN) < Empty < 0 < 20

DATE, TIME, DATETIME

-Infinity < 날짜값 < Infinity < Empty < undefined (NULL, NaN, Invalid Date)


컴포넌트 별 변경 사항

datatyperule 속성에 상관없이 적용되는 규칙입니다. 이전 버전 프로젝트 마이그레이션 시 유의해주세요.

Calendar 컴포넌트

Calendar 컴포넌트와 Grid 컴포넌트에서 Cell 오브젝트의 displaytype 속성값을 "calendarcontrol" 또는 "date"로 설정한 경우에 설정 방식에 대한 설명입니다.

입력값을 아래와 같은 형식에 따라 앞에서부터 잘라서 처리합니다. 단, min("00000101"), max("99991231") 범위를 벗어나는 경우("00000" 또는 "999999")에는 invalid value로 처리합니다.

입력값

결과값

17.0.0.x

2018

2018-01-01

2018-01-01

20182

2018-02-01

2018-02-01

201802

2018-02-01

2018-02-01

201813

2019-01-01

2019-01-01

2018123

2018-12-03

2018-12-03

20191238

2019-01-07

2019-01-07

0000

0000-01-01

0000-01-01

00000

invalid value

0000-01-01

00003

0000-03-01

0000-03-01

000011

0000-11-01

0000-11-01

000021

0001-09-01

0001-09-01

9999

9999-01-01

9999-01-01

999999

invalid value

9999-12-31

99999999

invalid value

9999-12-31

Spin 컴포넌트

입력값을 FLOAT형으로 변환한 값이 invalid value인 경우 처리 방식이 변경됐으며 min, max 속성이 설정된 경우에 해당값보다 크거나 값이 설정될 수 있습니다.

입력값

결과값 (value / text)

17.0.0.x (value / text)

"TEST"

NaN / ""

undefined / ""

min: 10, max: 100 인 경우

300

300

100

0

0

10

MaskEdit 컴포넌트

type 속성값이 "string"인 경우는 입력값이 format 속성과 맞지 않는 경우 처리 방식이 변경됐습니다. format 속성과 맞지 않는 경우에는 format이 적용된 기본 형태로만 표시됩니다.

입력값 (format: @@aa##)

결과값 (value / text)

17.0.0.x (value / text)

"aaaa12"

"aaaa12" / "aaaa12"

"aaaa12" / "aaaa12"

"aa1112"

"aa1112" / "______"

"aa1112" / "aa____"