Salesforce logSalesforce

同じレコードに対する複数のストリーミング API 通知

API バージョン 37.0 以降では、項目の変更で同じレコードの他の項目の変更がトリガされた場合、それらの項目が追跡されていなくても、項目に対する追加通知が送信されます。また、トランザクションでレコード内の 1 つの項目が複数回変更された場合も、複数の通知が送信されることがあります。通知は、項目値が PushTopic クエリに一致するかどうかに関わらず送信されます。

複数の通知が送信される理由は、最初の変更によってレコードの他の変更が再評価されるためです。

たとえば、WHERE 句で指定した項目を追跡する PushTopic があるとします。次のスニペットは、ケースオブジェクトのクエリを使用する PushTopic を挿入しています。

PushTopic pushTopic = new PushTopic();
pushTopic.Name = 'MyPushTopicExample';
pushTopic.Query = 
  'SELECT Id, Status, CaseNumber, OwnerId, Priority FROM Case WHERE Priority = \'High\'';
pushTopic.ApiVersion = 37.0;
pushTopic.NotifyForFields = 'Where';
insert pushTopic;

ケースオブジェクトに MyField__c というカスタム項目があり、PushTopic は WHERE 句でこの項目を追跡していないとします。追跡されている Priority 項目が High に変更されたときに、レコードの通知が生成されます。その後トリガまたはワークフローによって MyField__c などの他の項目が更新されると、その項目は追跡対象でなくても通知が生成されます。このレコードは最初に PushTopic の条件を満たしているため、追加通知が送信されます。まだ同じトランザクションであるため、このレコードが通知の生成元のままになります。

別のシナリオとして、同じトランザクション内で項目の値が変化する場合があります。たとえば、ケースレコードが作成され、PriorityMedium に設定されたとします。この設定は、PushTopic クエリに一致しません。次に、同じトランザクション内で、トリガまたはワークフローにより PriorityHigh に変更されたとします。これは、PushTopic クエリに一致します。結果として、変更ごとに 1 つ、つまり合計 2 つの通知が送信されます。これらの通知は、最初の変更が条件に一致しない場合でも送信されます。また、両方の通知の Priority 値には、最後の値である High が含まれています。

API バージョン 36.0 以前では、最後のレコードの変更に対する 1 つの通知のみが送信され、追加通知は発生しません。詳細は、「同じレコードの最後の PushTopic 通知のみを送信」を参照してください。

メモ