最近のアクセス:
When duplicate 節

For Each コマンドまたは New コマンドの本文でレコードの更新または作成を試行しているときに、別のレコード用に既に存在している、キー候補 (For Each の場合) や主キー (New の場合) の項目属性の値を使用して、実行するコードを指定できます。 
この節は更新に関係があるため、プロシージャーでのみ機能します。

構文

When duplicate
<When Duplicate 節のコード>
GeneXus は、キー候補の一意性を保証するため、一意のインデックスを使用します。また、主キーには主キーインデックスを使用します。重複を検出した場合、この節が For Each/New コマンドでプログラミングされていれば、関連するコード (<When Duplicate 節のコード>) を実行します。
この節が含まれていないと、キー候補 (For Each) である項目属性を更新しようとした場合、または候補キーや主キー (New) に値を割り当てようとし、その値を持つレコードが既に存在する場合、どのコードも実行されません。
New コマンドについて: ほとんどの場合、既存レコードの一部の項目属性の更新が必要になります。その場合、For Each コマンドが必要です。内部には、更新する項目属性が割り当てられます。あまり一般的ではありませんが、ほかのコマンドを実行することもできます。つまり、次のようになります:
      <When Duplicate 節のコード> ::=  [ <別のコード> ]
   For each
     { <項目属性> = <エクスプレッション> } ...
endfor
  [ <別のコード> ]

注:

  • For Each 内: 他の For Each コマンドが <CodeWhenDuplicate> に含まれていて、そのテーブルに (<MainCode> の) 外部の For Each を持つ同じ共通の項目属性がある場合、この項目属性はインスタンス化されたものとみなされ、When Duplicate 内の For Each でフィルタとして機能します。
各コマンドの詳細については、「For Each コマンド」と「New コマンド」の構文のセクションを参照してください。

Customer テーブルで CustomerName 項目属性がキー候補 (一意のインデックスが存在) であり、For Each を使ってアクセスされる多数のレコードを更新する場合:
for each Customer

    CustomerName = &customer

when duplicate

    msg( '顧客 ' + &customer + ' は既に存在します')

endfor
&customer に格納された値を持つレコードが既に存在する場合、for each のメインコードは実行されません。その代わりに、when duplicate コードが実行されます。

適用範囲

コマンド For Each コマンドXfor Each コマンドNew コマンド
オブジェクト Procedure オブジェクト
   







サブページ
Created: 15/01/07 22:49 by Admin Last update: 21/05/21 03:33 by Admin
カテゴリ
Powered by GXwiki 3.0