本章もしくは節で説明する機能は、nexacro beyondで追加された機能です。
nexacro beyond(17.1)では、nexacro platform 14でDatasetオブジェクトもしくはコンポーネントで処理するデータの中で処理基準が明確でないため他の方式で処理されていたデータを一貫性のある処理基準を適用し整理する作業を行いました。明確にデータ型に合うほとんどのデータは既存の方式と同様に処理されますが、一部のデータにおいては結果値が既存と異なる場合があります。
datatyperuleプロパティの追加
変更後のデータ有効性処理ルールを適用するかどうかを設定することが出います。プロパティの適用基準は以下の通りです。
nexacro platform 14で作成したプロジェクトの実行時に
datatyperuleプロパティが設定されておらず、変更後のデータ有効性処理ルールを適用しません。
新しいプロジェクトの生成時に
datatyperuleプロパティが「2.0」に設定され、変更後のデータ有効性処理ルールを適用します。
新しいプロジェクトを生成した場合でもdatatyperuleプロパティを「1.0」に設定すると、変更後のデータ有効性処理ルールを適用しません。
適用対象は以下の通りです。
Datasetオブジェクトで有効でない値を処理する場合
Datasetオブジェクトとバインドされたコンポーネントで有効でない値を処理する場合
nexacro.Dateオブジェクトの動作
datatyperuleプロパティ値はスクリプトで変更することはできません。
Datasetオブジェクトのバリデーションルール
Datasetオブジェクトで数値型や日付型のデータの処理時に範囲を超えた場合0もしくは空の値で曖昧な処理を行っていたケースをInfinity、-Infinity、NaN、Invalid Dateのような値で結果値を処理するように変更しました。
文字、数値の値の有効性処理は以下のように変更されました。一部例外的な入力値に対する処理結果値が変更されました。
データ型 | データ形式(Load) | 結果値 | 17.1以降 |
---|---|---|---|
STRING | null | undefined | null |
INT | Infinity / -Infinity | NaN | 0 |
入力値エラー | NaN | "" | |
FLOAT | 入力値エラー | NaN | "" |
BIGDECIMAL | Infinity / -Infinity | Infinity / -Infinity | 0 |
入力値エラー | NaN | undefined |
日付と時刻に対する有効性処理は以下の通りです。標準のJavaScriptで処理されルールを適用し、一部例外的な入力値に対する結果値が変更されました。
データ型 | データ形式(Load) | 結果値 | 17.1以降 |
---|---|---|---|
DATE | Infinity / -Infinity | Invalid Date | nexacroの補正値 |
入力形式(8桁)エラー | Invalid Date | nexacroの補正値 | |
入力値エラー | Invalid Date | nexacroの補正値 | |
DATETIME | Infinity / -Infinity | Invalid Date | nexacroの補正値 |
入力形式(14桁, 17桁)エラー | Invalid Date | nexacroの補正値 | |
入力値エラー | Invalid Date | nexacroの補正値 | |
TIME | Infinity / -Infinity | Invalid Date | nexacroの補正値 |
入力形式(6桁, 9桁)エラー | Invalid Date | nexacroの補正値 | |
入力値エラー | Invalid Date | nexacroの補正値 |
入力形式エラーもしくは入力値エラーの場合は、ブラウザのJavaScriptエンジンでDateオブジェクトが処理する方式によって結果値を処理します。ほとんどはInvalid Dateとして処理しますが、一部データはnexacroが補正することがあるため、想定した結果が出ないことがあります。
例えば、type項目を「TIME」に設定し入力形式に合わない値("12120")を入力した場合、IE11では「Invalid Date」として処理しますが、NRE、Chromeでは「000000000」に補正して処理します。
新たに追加されたプロパティ、メソッドのパラメータ
例外的な値を処理するために以下のようなプロパティとメソッドを追加しました。
invalidデータの保存
saveXML、saveSSV、saveCSV、transactionメソッドの実行時のNaN、(-)Infinity、invaliddate形式の値を処理する方式を指定するためのプロパティを追加しました。
プロパティ | 対象オブジェクト | 説明 |
---|---|---|
datasetsavenan | Environment | Datasetのcolumn typeがint/float/bigdecimalであり、且つ値がNaNである場合 "include":NaN値として保存 "exclude"(デフォルト値):""値として保存 |
datasetsaveinfinity | Environment | Datasetのcolumn typeがint/float/bigdecimalであり、且つ値が(-)Infinityである場合 "include"(デフォルト値):(-)Infinity値として保存 "exclude":""値として保存 |
datasetsaveinvaliddate | Environment | Datasetのcolumn typeがDate/DateTime/Timeであり、且つ値がInvaliddateである場合 "include":Invaliddate値として保存 "exclude"(デフォルト値):""値として保存 |
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 | デフォルト値:"invalid value" valueがNaN、(-)Infinity、Invaliddateのいずれかの値である場合の表示テキスト |
calendardisplayinvalidtype | GridCellControl ListViewCellControl | デフォルト値:"invalidtext" none:value値を表示 invalidtext:calendardisplayinvalidtext値を表示 nullmask:nullmaskを表示 |
calendardisplayinvalidtext | GridCellControl, ListViewCellControl | デフォルト値:"invalid value" valueがNaN、(-)Infinity、Invaliddateのいずれかの値である場合の表示テキスト |
displayinvalidtextが表示される際のuserstatusを追加しました。
userstatus | 対象オブジェクト | 説明 |
---|---|---|
invalidtext | Calendar MaskEdit Spin GridCellControl ListViewCellControl | displayinvalidtextが表示される際のuserstatus |
innerdatasetにないデータの処理
プロパティ | 対象オブジェクト | 説明 |
---|---|---|
acceptvaluetype | Combo ListBox Radio | - デフォルト値:"allowinvalid" - Combo、ListBox, Radioにinnerdatasetによるバリデーションを行うかどうかを指定できる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
データの演算方式
nexacro platform 14では例外的な値を0として処理しましたが、変更後のDatasetの有効性処理ルールでは例外的な値を含む場合は全体の演算結果値の処理が異なります。例えば、BIGDECIMAL型のカラムのデータにInfinity値を含む場合、getMaxメソッドの実行時にnexacro platform 14では0として処理しましたが、変更後のDatasetの有効性処理ルールではInfinityを最大値として返します。
データ型 | データ形式(Load) | 結果値 | 17.1以降 |
---|---|---|---|
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.1以降 |
---|---|---|
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プロパティに関係なく適用されるルールです。nexacro platform 14のプロジェクトのマイグレーションを行う際にご注意ください。
Calendarコンポーネント
下記に該当する場合の設定方式について説明します。
N/A
Calendarコンポーネント
GridコンポーネントのCellオブジェクトのdisplaytypeプロパティを「calendarcontrol」もしくは「date」に設定している
入力値を以下のような形式によって、先頭の値から有効な値の桁数で処理します。ただし、 min("00000101")、max("99991231")の範囲を超えた場合は("00000"もしくは"999999")invalid valueとして処理します。
Date : YYYYMMDD
DateTime : YYYYMMDDHHmmssuuu,YYYYMMDDHHmmss
Time : HHmmssuuu , HHmmss
入力値 | 結果値 | 17.1以降 |
---|---|---|
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.1以降 (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.1以降 (value / text) |
---|---|---|
"aaaa12" | "aaaa12" / "aaaa12" | "aaaa12" / "aaaa12" |
"aa1112" | "aa1112" / "______" | "aa1112" / "aa____" |