CLOSE
バグ情報_要注意

概要

PowerBuilder 2022R3 において データウィンドウの列を SaveAsAscii 関数で出力するとき、ファイル出力の列順序がデータウィンドウの列順序と異なる不具合が確認されています。

バグ ID14569
製品PowerBuilder
ステータスAppeon にて検証中
バージョン日本語版英語版
12.6 以前
2017 (R2)
2017 (R3)
2019
2021(none)
2022×
◯:修正済み/未発生、×:未修正、-:未確認 (※ 2017 以外のバージョンについてはリリースされている最新リビジョンでの状況です)

詳細

データウィンドウの列表示幅が一定以下(サンプルソースでは列の 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)
x instagram facebook youtube