こんにちは、ねこです。

自称プログラマのおばちゃんのブログです。いろいろあるよねぇ~。

remerge()のわな

2014-01-14 06:21:40 | Designer javascript
昨日はついつい、月曜日の憂鬱に負けてメモを更新しませんでした。
今日はRemerge()について語ります。

Remerge()は全画面をもとのDataDOMからの参照に戻します。
そして、その際にFormでDataDOMとデータバインディングしているフィールド(オブジェクト)に変更があれば、それも一度DataDOMに更新されてから再度それを参照し、Formへと反映させます。
だから。。。
表なんか作った場合、一行一行に変更があるかどうか予備のフィールドをもうけてINITIALIZEでDataDOMのデータをそこにコピーし、変更後のものと比較しようとしても、Remerge()してしまったらその内容はなくなっちゃいます。

<Initialize>
比較用予備フィールド = バインディングされたフィールド

<Changekなどのイベント>
『バインディングされたフィールド』内で変更のあったものを『比較用予備フィールド』と比較して違いを見る。その結果、変更を確認できると同時にリセットなどの機能を付け加えることができる。

ところが!!!

たとえば、新しい列を増やしてRemerge()したとする。
そうすると、この変更があったフィールドに対してDataDOMは上書きされているので、Initializeでの式が再び起こると、もちろん、比較できなくなるのであーる。
さぁ、スキーマにフィールドを足して、あらかじめWorkbenchで予備フィールドに比べるための値をいれておきましょう!!!

追記。
WISDLなどを使う場合は、Load()してRemerge()するしかないが、XDPで行う参照のみの表の結果表示や変更であれば使わなくてもよいのかも。こんな式をあらかじめ作っといて検索のたびに呼び出してやる。

====== スクリプトオブジェクト =============================================
function cleanUp(){
var vMain = xfa.resolveNodes("main.siuList.siu[*]");
for (var i=0;i<vMain.length;i++){
vMain.item(i).presence = "hidden";
}
}
====== Thisは検索するターゲットフィールド =================================
cleanUp.cleanUp(); //スクリプトオブジェクトを呼び出す。
var vMain = xfa.resolveNodes("main.siuList.siu.(pfacnam.rawValue.toUpperCase().indexOf('"+this.rawValue.toUpperCase()+"')>=0
|| sfacnam.rawValue.toUpperCase().indexOf('"+this.rawValue.toUpperCase()+"')>=0)");

//なんかわからんが、うまく式がブラウズされないんでここではスクリプトオブジェクトと同じことをしてください。ただし、'visible'で。


最新の画像もっと見る

コメントを投稿