[PowerBuilder] DescribeとModifyでデータウィンドウのプロパティ値を設定する

長らく死蔵していたPowerBuilderネタの下書きを発見したのでUPしておく。今更役に立つかは分からないけど。

 

DescribeとModify

DescribeとModifyは、データウィンドウが持つ各種プロパティを取得・変更するメソッドである。

例えば、下記でdw_2というDWのSQL SELECT文を取得できる。

ls_sql_text = dw_2.Describe("Datawindow.Table.Select")

また、下記でdw_2に新たなSQL文をセットすることができる。

dw_2.Modify("DataWindow.Table.Select=~"" + ls_sql_text + "~"" )

 

 

DWのSQL文を動的に変更する

この2つのメソッドを組み合わせれば、DWのSQL文に動的にWHERE句を指定することもできる。

//DW2のSELECT文を取得
is_select = dw_2.Describe("DataWindow.Table.Select")

//WHERE句を自動生成するロジック
ls_where = " WHERE ほにゃらら = 'honya'"

//DW2のSQL文にWHERE区を追加してデータ取得
dw_2.Modify("DataWindow.Table.Select=~"" + is_select + ls_where + "~"" )
dw_2.Retrieve()

※SetSQLSelectメソッドを使ってDWのSQLを設定してもよい。

dw_2.SetSQLSelect(ls_sql + ls_where)

 

取得/セットできるのはSQL文だけではない

上記例ではデータウィンドウが持つSQL文を取得・セットしたが、その他にもデータウィンドウに対して色々な操作が可能。

//現在のフィルター内容を取得
dw_2.Describe("Datawindow.Table.Filter")
//Datawindow式でも使用可能
//データ最終行またはDWのページ最終行なら1を表示する項目
IF(GetRow() = RowCount() OR GetRow() = Long(Describe("DataWindow.LastRowOnPage")), 1,0)
//Modifyで変更できるもの
dw_1.Modify("aaa.Protect=1") //dw_1にあるaaaというオブジェクトのプロテクト設定をオンにする
dw_1.Modify("aaa.TabSequence=0") //タブ順をオフに
dw_1.Modify("aaa.Visible=0") //非表示に
dw_1.Modify("aaa.Background.Color=16777215") //背景色を白に
//グループヘッダの改ページ時にヘッダが重複して表示されないよう抑制(PB10.5以降でのみ使用可能)
dw_12.Modify("DataWindow.Header.1.Suppress = Yes")
dw_12.Modify("DataWindow.Header.1.height = 0")
//Datawindow式でも使用可能だが、DDDWで更に式(~tif)を使用するのは不可
dw_1.Modify("表示区分.dddw.UseAsBorder = '0~tif(ISNULL(キー項目),1,0)'")
↑これは動作しない
//DDDWの表示行数を動的に指定する
dw_1.Modify("カラム名.dddw.Line=3")
dw_1.Object.カラム名.dddw.Line='3' //で直接オブジェクトにセットも可
//グリッド様式の行移動を禁止する
dw_1.Modify("Datawindow.Grid.ColumnMove=No")

コメントする