
データウィンドウからドット表記で取得した Null 値を別のデータウィンドウの初期値 (initial プロパティ) に設定すると、行を追加した際に不正な値が入力されます。
| バグ ID | 14921 |
| 製品 | PowerBuilder |
| ステータス | Appeon にて検証中 |
| バージョン | 日本語版 | 英語版 |
|---|---|---|
| 12.6 以前 | ◯ | - |
| 2017 (R2) | - | - |
| 2017 (R3) | ◯ | - |
| 2019 | ◯ | - |
| 2021 | - | - |
| 2022 | × | × |
データウィンドウのカラムからドット表記で取得した文字列値を別のデータウィンドウの初期値 (Initial) に設定するケースにおいて、取得元のカラムが Null 値 (文字列) であった場合、初期値として設定後に行を追加すると、半角スペースや意図しない文字列など、不正な値が対象のカラムに入力されます。
string ls_initial // dw_1 のカラムの 1 行目の値を dw_2 のカラムの初期値に設定 ls_initial = dw_1.object.column[1] dw_2.object.Column.initial = ls_initial dw_2.InsertRow(0) //不正な値が入力されて行追加される
※不具合の無いバージョンでは、取得した文字列型の Null 値を Initial プロパティに設定すると、初期値として空文字 ("") が設定されます。初期値に Null 値を設定するには Initial プロパティに文字列 "null" を指定します。
不具合の無いバージョンと同じ動作を再現するには、取得した値を String 関数で明示的に文字列型に変換するか、GetItemString 関数で文字列として取得します。
string ls_initial // dw_1 のカラムの 1 行目の値を dw_2 のカラムの初期値に設定 ls_initial = String(dw_1.object.column[1]) dw_2.object.Column.initial = ls_initial
string ls_initial // dw_1 のカラムの 1 行目の値を dw_2 のカラムの初期値に設定 ls_initial = dw_1.GetItemString(1, "column") dw_2.object.column.initial = ls_initial
バージョンを問わず、実際に Null 値を初期値として設定したい場合は、"null" という文字列を Initial プロパティに設定します。
string ls_init ls_init = dw_1.object.column[1] // 取得した値が Null だった場合 IF IsNull(ls_init) THEN // 初期値を Null 値に設定 ls_init = "null" END IF dw_2.object.col1.initial = ls_init