InfoPath フォームを介してあるリストから別のリストにアイテムを追加するときに、アイテムが既に存在する場合は新しいアイテムを作成せず、そのアイテムの「数量」を更新するだけのイベント レシーバーを作成したいと考えています。
例えば。
在庫商品リスト > 2 個の牛乳をカートに入れる > 牛乳は既にカートに入っています > 牛乳を 3 個に更新します。
InfoPath フォームを介してあるリストから別のリストにアイテムを追加するときに、アイテムが既に存在する場合は新しいアイテムを作成せず、そのアイテムの「数量」を更新するだけのイベント レシーバーを作成したいと考えています。
例えば。
在庫商品リスト > 2 個の牛乳をカートに入れる > 牛乳は既にカートに入っています > 牛乳を 3 個に更新します。
アイテムを識別するための一意のキーが必要です。理想的には、2 番目のリストで項目を識別できるように、これは数字などになります。牛乳の例では、ID がありません。したがって、1つ追加するか、アイテムをテキストと比較することができます(「ミルク」はタイトルフィールドにあると思います)
アイテムがリストに追加されている場合、「ItemAdding」で、アイテムがリストに既に存在するかどうかを SPQuery で確認できます (オンラインで見つけるのに十分な例)。クエリが 0 アイテムを返す場合は、SharePoint に通常どおりに機能させることができます。アイテムが見つかった場合は、見つかったアイテムの数量を更新する必要があります。
考慮すべき 2 つの注意事項:
リストに既にある項目が追加されないようにするには、次のコードを使用できます。
properties.Cancel = true;
properties.Status = SPEventReceiverStatus.CancelNoError
キャンセルは、アイテムが追加されていないことを確認します。通常、これはエラーをスローしますが、ステータスを設定することでエラーはスローされません。
2 番目に考慮する必要があるのは、数量の更新時にアイテムの更新を開始する場合です。これは奇妙な動作を引き起こす可能性があるためです。数量を更新する前にイベントの発生を無効にしてから、再度有効にすることをお勧めします。