PowerBuilder - データウィンドウのステータス

前回の記事に引き続き、パワービルダー(PowerBuilder)の特徴であるデータウィンドウ(DataWindow)について解説する。

今回はデータウィンドウの修正ステータスについて。

 

DataWindowが持つ4つのステータス


データウィンドウの各行、または各カラムは下記4つのステータスを持つ。
なおこれらはDWItemStatus定数として定義されており、詳細はヘルプ「DWItemStatus」ページで確認できる。

 

1.NotModified!

行またはカラムの情報は、検索されたときの状態から変更されていません。

⇒Retrieveでデータ取得した直後は、全レコード、全カラム「NotModified!」になる。


2.DataModified!

カラムまたは行内のいずれかのカラムの情報は、検索されたときの状態から変更されています。
⇒DWへの画面入力やSetItemメソッド等によってデータを書き換えた場合、当該行、カラムは「DataModified!」になる。


3.New!

新規行を追加した直後(カラムには値が何もセットされていない状態)
⇒InsertRowメソッドで新規追加した行は「New!」になる。


4.NewModified!

新規追加行のカラムに値が割り当てられています。
⇒「New!」のカラムに対して画面入力やSetItemメソッド等によってデータを書き換えた場合、当該行は「NewModified!」になる。


上記4つのステータスが存在する。これらのステータス情報はDWの行・カラムごとに保持している。

 

簡単に言うと、

・DBから読んだ直後のデータはNotModified!
・そのあと変更を加えたらDataModified!になる
・新規追加行はNew!
・そのあと変更を加えたらNewModified!になる

これらの各ステータスはGetItemStatusメソッドで取得できるほか、SetItemStatusメソッドで書き換えることも可能。

 

具体的な使用例

じゃあどんなことに使えるの...という話になるのだが、例としてざっと下記の用例が思いつく。

・DataModified!の行を探すことで画面に対する更新チェック(画面のデータが変更されているか)が行えたり、New!やNewModified!を探せば新規追加行を検出できたりする。

・メンテ画面で「更新」ボタンを押したときに全データのステータスを確認し、全てがNotModified!だった場合はデータを更新する箇所がないので「データが何も変更されていません」とエラーメッセージを出すテクニック。

・DBへの更新をPBのUpdateメソッドではなくDBプロシージャで実行するような場合で、Insert/Update/Deleteでそれぞれ呼び出す処理が違っていたりするときに判断材料になる。
例えば、画面全行分LOOPで回して、LOOP内でステータスを確認...NotModified!行は何もせず、DataModified!行は更新処理、New!やNewModified!行は追加処理を実行する、という作り方ができる。

・DWでRetrieveしたデータをRowsMoveやSetItemメソッドで別のDWに持ってきてそこで処理する場合、RowsMoveやSetItemでデータ移動した時点で全データのステータスがNewModified!になってしまい、DBから読んできたデータとInsertRowで新規追加したデータの区別がつかなくなってしまう。

この場合は、RowsMoveやSetItemした後にResetUpdateメソッドを実行し、ステータスをNotModified!にリセットするとよい。

そうすればDWがDBから読んだデータはNotModified!になり、画面から追加した行はNew!になり、画面入力により変更された行はDataModified!またはNewModified!となるため、全てのパターンを判別ができるようになる。

コメントする