
PowerBuilder 2022R3 において データウィンドウの列を SaveAsAscii 関数で出力するとき、ファイル出力の列順序がデータウィンドウの列順序と異なる不具合が確認されています。
| バグ ID | 14569 |
| 製品 | PowerBuilder |
| ステータス | Appeon にて検証中 |
| バージョン | 日本語版 | 英語版 |
|---|---|---|
| 12.6 以前 | - | - |
| 2017 (R2) | - | - |
| 2017 (R3) | - | - |
| 2019 | - | - |
| 2021 | (none) | - |
| 2022 | × | - |
データウィンドウの列表示幅が一定以下(サンプルソースでは列の x 座標 40px 間隔で配置)に設定すると、出力結果がデータウィンドウの列順序と異なって出力されます。

本不具合に関する回避策は以下のいずれかの方法となります。
①データウィンドウの各コントロールの x 座標を充分な間隔(目安として 100px 以上)で配置する。
➁Modify 関数でデータウィンドウの x 座標を変更してから出力する。
➁の回避策を実現するためのサンプルコードは下記の通りとなります。
long ll_col_count long i string ls_col_name, ls_label_name string ls_modify_req string ls_original_settings // 元の状態を保持する配列 // DWのカラム数を取得 ll_col_count = long(dw_1.Describe("DataWindow.Column.Count")) long ll_current_x = 0 long ll_width for i = 1 to ll_col_count ls_col_name = dw_1.Describe("#" + string(i) + " .Name") ls_label_name = ls_col_name + "_t" // 標準的なラベル名(カラム名_t) // 1.現在のDW(x座標)をバックアップし、一時的に整列させる ls_original_settings[i] = ls_col_name + " .x=" + dw_1.Describe(ls_col_name + " .x") + " " + & ls_label_name + " .x=" + dw_1.Describe(ls_label_name + " .x") + " " // 出力用にDWのx座標を設定する ls_modify_req += ls_col_name + " .x=" + string(ll_current_x) + " " + & ls_label_name + " .x=" + string(ll_current_x) + " " + & ls_label_name + " .visible=1" // 充分な列幅(150px)を設定する。 ll_width = 150 // x座標を累計(列のx座標を150px間隔で配置する) ll_current_x += ll_width next // 2.出力用に列のx座標を変更する dw_1.Modify(ls_modify_req) // 3.SaveAsAsciiでファイル出力する string ls_path = "C:\work\output\SaveAsAscii_Output.csv" dw_1.SaveAsAscii(ls_path, ",", "~") // 4.DWを元の表示位置に復元する ls_modify_req = "" for i = 1 to ll_col_count ls_modify_req += ls_original_settings[i] + " " next dw_1.Modify(ls_modify_req)