BeginListUpdateメソッドでは、特殊パラメータ・モード(DYNAMIC)を使用できます。
通常、インスタンスリストの処理はおおまかに次の2つの処理モードに分類されます。
モード(REFRESH)がリスト処理の省略値スタイルです。
フレームワークがモード(REFRESH)要求を処理する方法とモード(DYNAMIC)要求を処理する方法には、いくつか異なる点があります。
最終的に、インスタンスリスト・エントリーを更新する方法は2種類になります: #ListManager.AddtoList または #ListManager.UpdateListEntryData が使用できます。この 2 つともが既存のエントリーを更新しますが、AddtoList のみ指定されたエントリーが存在しない場合に新しいエントリーを作成します。
この2つの主な違いは次のとおりです。
警告:
リレーション・ハンドラーを使用して、ツリーとして表示されているインスタンスリスト内のノードを動的に展開する場合、#avListManager.RefreshRelationshipメソッドを使用して、ツリー内の1つのレベルをプログラムで完全に更新することができます。
たとえば、組み込みのデモンストレーション・フィルターDF_FILT30には、イベントDEM_EMP_UPDATEDをリッスンする以下のロジックが含まれています。
* 社員更新のトリガー時
When (= DEM_EMP_UPDATED)
* インスタンスリストに追加された時のこの社員が属する部門と課を取得
Invoke #avListManager.GetCurrentInstance AKey1(#Original_Deptment) AKey2(#Original_Section) AKey3(#Empno)
* この社員が元々いたツリー・ノードをリフレッシュ (これにより、この社員がノードから削除されることもある)
* この方法により、リレーション・ハンドターのファンクション DFREL01 が再び呼び出され、ツリー・ノード全体がリフレッシュされる。
Invoke #avListmanager.RefreshRelationship BusinessObjectType(DEM_ORG_SEC_EMP) AKey1(#Original_Deptment) Akey2(#Original_Section)
* 社員の今の部門と課を確認両方とも変更された場合は、ツリーノードを
* 新しい部門/課で更新する。このノードが展開されたことがなければ、この要求は無視される。
* これは、ユーザーがこのノードの展開を決めた時に表示されるため。
Fetch Fields(#Deptment #Section) from_file(PslMst) with_key(#Empno)
If ((#Deptment *ne #Original_Deptment) or (#Section *ne #Original_Section))
Invoke #avListmanager.RefreshRelationship BusinessObjectType(DEM_ORG_SEC_EMP) AKey1(#Deptment) Akey2(#Section)
Endif