データバリデーション

本章もしくは節で説明する機能は、nexacro beyondで追加された機能です。

nexacro beyond(17.1)では、nexacro platform 14でDatasetオブジェクトもしくはコンポーネントで処理するデータの中で処理基準が明確でないため他の方式で処理されていたデータを一貫性のある処理基準を適用し整理する作業を行いました。明確にデータ型に合うほとんどのデータは既存の方式と同様に処理されますが、一部のデータにおいては結果値が既存と異なる場合があります。

datatyperuleプロパティの追加

変更後のデータ有効性処理ルールを適用するかどうかを設定することが出います。プロパティの適用基準は以下の通りです。

適用対象は以下の通りです。

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コンポーネント

下記に該当する場合の設定方式について説明します。

入力値を以下のような形式によって、先頭の値から有効な値の桁数で処理します。ただし、 min("00000101")、max("99991231")の範囲を超えた場合は("00000"もしくは"999999")invalid valueとして処理します。

入力値

結果値

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____"