이번 장 또는 절에서 설명하는 기능은 넥사크로플랫폼 17.1.0.100 버전에서 추가된 기능입니다.
Dataset 오브젝트 또는 컴포넌트에서 처리하는 데이터 중에서 처리 기준이 명확하지 않아 다른 방식으로 처리되던 데이터를 일관성 있게 정리하는 작업을 진행했습니다. 명확하게 데이터 타입에 맞는 대부분의 데이터는 이전 방식과 차이가 없지만, 일부 데이터의 경우 결과값이 다를 수 있습니다.
datatyperule 속성 추가
변경된 Data 유효성 처리 규칙을 적용할지 여부를 설정할 수 있습니다. 속성 적용 기준은 아래와 같습니다.
이전 버전에서 작성한 프로젝트 실행 시
datatyperule 속성값이 설정되지 않으며 변경된 Data 유효성 처리 규칙을 적용하지 않습니다.
새로운 프로젝트 생성 시
datatyperule 속성값이 "2.0"으로 설정되며 변경된 Data 유효성 처리 규칙을 적용합니다.
새로운 프로젝트를 생성하더라도 datatyperule 속성값이 "1.0"으로 설정하면 변경된 Data 유효성 처리 규칙을 적용하지 않습니다.
적용 대상은 아래와 같습니다.
Dataset 오브젝트에서 유효하지 않은 값을 처리하는 경우
Dataset 오브젝트와 바인딩된 컴포넌트에서 유효하지 않는 값을 처리하는 경우
nexacro.Date 오브젝트의 동작
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로 처리합니다.
Date : YYYYMMDD
DateTime : YYYYMMDDHHmmssuuu,YYYYMMDDHHmmss
Time : HHmmssuuu , HHmmss
입력값 | 결과값 | 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____" |