Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Image Added


[ Image Removed |../../index.htm#lansa/lansa048_3140.htm]
Visual LANSA フレームワーク ガイド > フレームワーク・プログラミング > インスタンスリストとインスタンスリスト・マネージャー > リスト・マネージャーのメソッド > VLF-WIN でのインスタンスリスト・エントリーの更新と削除

...

Image Removed
BeginListUpdateメソッドでは、特殊パラメータ・モード(DYNAMIC)を使用できます。  

通常、インスタンスリストの処理はおおまかに次の2つの処理モードに分類されます。

  • 検索と更新: 検索と更新:通常、検索ボタンがクリックされると、まずインスタンスリストがクリアされ、ユーザーが起動した検索によってインスタンスリストが完全に埋められます。これは、インスタンスリスト全体が更新されるためモード(REFRESH)処理と呼ばれます。場合によって、リストはクリアされず、エンドユーザーが「AND」形式の検索を簡単に実行できるよう、徐々に追加されることがあります。 
  • 個別エントリーの更新と削除: 個別エントリーの更新と削除:一般的に、コマンド・ハンドラーは、インスタント・リスト内にすでに存在する少数のエントリーに反映すべきだということを認識しているいくつかの処理を実行していました。これは、インスタンスリスト内の少数のエントリーのみがそのビジュアル・コンテンツを動的に更新または削除する必要があるため、モード(DYNAMIC)処理と呼ばれます。 

モード(REFRESH)がリスト処理の省略値スタイルです。

フレームワークがモード(REFRESH)要求を処理する方法とモード(DYNAMIC)要求を処理する方法には、いくつか異なる点があります。

...

最終的に、インスタンスリスト・エントリーを更新する方法は2種類になります:  #ListManager.AddtoList または #ListManager.UpdateListEntryData が使用できます。この 2 つともが既存のエントリーを更新しますが、AddtoList のみ指定されたエントリーが存在しない場合に新しいエントリーを作成します。 

この2つの主な違いは次のとおりです。

  • UpdateListEntryDataは、パラメータとして指定されたリスト・エントリーの値のみを更新します。たとえば、追加列3のみを更新できます。
  • AddtoListは、パラメータとして渡された値を使用するかデフォルト値を使用して、インスタンスリスト・エントリーのすべての値を更新します。したがって、追加列3を更新するには追加列1、2の値を渡す必要があり、また場合によっては追加列4、5、6の値も渡す必要があります。     
  • 上記のポイントは、MODE(REFRESH)更新でUpdateListEntryDataを使用するべきではないということを意味します。  
Warning

...

警告:

UpdateListEntryData または RemoveFromList を使用した後に AddtoList を使用して、インスタンスリスト・エントリーの識別キーを更新しないでください。識別キー(Akey、Nkey)は、いかなるコマンド・ハンドラーからも変更されない値とする必要があります。変更可能な、インスタンスリストの追加列の値を使用してください。

リレーション・ハンドラーを使用して、ツリーとして表示されているインスタンスリスト内のノードを動的に展開する場合、#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