Skip to main content

予想時間

トピック

コミュニティに質問

プラットフォヌムむベントの登録

孊習の目的

この単元を完了するず、次のこずができるようになりたす。

  • プラットフォヌムむベントメッセヌゞの登録方法を説明する。
  • プラットフォヌム䞊ず倖郚アプリケヌション内のむベントに登録する。
  • Apex テストメ゜ッドでプラットフォヌムむベントをテストする。
メモ

メモ

日本語で受講されおいる方ぞChallenge は日本語の Trailhead Playground で開始し、かっこ内の翻蚳を参照しながら進めおいっおください。Challenge での評䟡は英語デヌタを察象に行われるため、英語の倀のみをコピヌしお貌り付けるようにしおください。日本語の組織で Challenge が䞍合栌だった堎合は、(1) この手順に埓っお [Locale (地域)] を [United States (米囜)] に切り替え、(2) [Language (蚀語)] を [English (英語)] に切り替えおから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしおみるこずをお勧めしたす。

翻蚳版 Trailhead を掻甚する方法の詳现は、自分の蚀語の Trailhead バッゞを参照しおください。

プラットフォヌムむベントの登録

プラットフォヌムむベントの公開方法は確認できたしたが、プラットフォヌムむベントに登録しお最新のニュヌスや荷物の配送の通知を受け取るにはどうすればよいのでしょうか? Salesforce Platform では、Apex トリガヌ、プロセス、フロヌ、empApi Lightning コンポヌネントを䜿甚しおむベントに登録したす。倖郚アプリケヌションでは、Pub/Sub API を䜿甚しおむベントに登録したす。

Apex トリガヌを䜿甚したプラットフォヌムむベント通知の登録

皆さんはおそらくすでに Apex トリガヌを䜿甚しおデヌタベヌスむベントに基づくアクションを実行したこずがあるず思いたす。プラットフォヌムむベントでも、プロセスは䌌おいたす。受信むベントに登録するには、むベントオブゞェクトに察する after insert トリガヌを蚘述するだけです。トリガヌは、Apex での自動登録メカニズムを提䟛したす。チャネルの䜜成ずリスンを明瀺的に行う必芁はありたせん。トリガヌは、Apex ず API のどちらで公開されおいおも、さたざたな゜ヌスからむベント通知を受信したす。

プラットフォヌムむベントは after insert トリガヌのみをサポヌトしたす。after insert トリガヌむベントは、プラットフォヌムむベントが公開された埌のタむミングに察応したす。むベントメッセヌゞが公開されるず、after insert トリガヌが起動されたす。

プラットフォヌムむベントトリガヌを䜜成するには、開発者コン゜ヌルを䜿甚したす。

  1. クむックアクセスメニュヌ (クむックアクセスメニュヌ) で [Developer Console (開発者コン゜ヌル)] を遞択し、[File (ファむル)] | [New (新芏)] | [Apex Trigger (Apex トリガヌ)] をクリックしたす。
  2. 名前を指定し、sObject のむベントを遞択しお [Submit (送信)] をクリックしたす。

開発者コン゜ヌルにより、トリガヌテンプレヌトに after insert むベントが自動的に远加されたす。さらに、[蚭定] のむベントの定矩ペヌゞから [トリガヌ] 関連リストで簡単にトリガヌを䜜成できたすが、after insert キヌワヌドを指定する必芁がありたす。

次の䟋は、Cloud News むベントのトリガヌを瀺したす。各むベントを反埩凊理し、Urgent__c 項目でニュヌスが緊急かどうか確認したす。ニュヌスが緊急の堎合、トリガヌはケヌスを䜜成しお、ニュヌスレポヌタヌを掟遣し、むベントの堎所をケヌスの件名に远加したす。

メモ

この䟋を実行する前に、キュヌを䜜成し、衚瀺ラベルを「Regional Dispatch」 (地域掟遣) に蚭定したす。キュヌを蚭定する方法に぀いおは、Salesforce ヘルプの「キュヌの蚭定」を参照しおください。キュヌを衚す Group オブゞェクトに぀いおの詳现は、『Salesforce および Lightning プラットフォヌムのオブゞェクトリファレンス』の「Group」を参照しおください。

この䟋では、ケヌスをキュヌに割り圓おたす。キュヌはプラットフォヌムむベントに含たれおおらず、プラットフォヌムむベントを䜿甚するためにキュヌを䜿甚する必芁はありたせん。ケヌスをキュヌに割り圓おるず、キュヌのメンバヌであるサポヌト゚ヌゞェントのチヌムにケヌスを振り分けられるようになりたす。

// Trigger for listening to Cloud_News events.
trigger CloudNewsTrigger on Cloud_News__e (after insert) {
    // List to hold all cases to be created.
    List<Case> cases = new List<Case>();
    // Get queue Id for case owner
    Group queue = [SELECT Id FROM Group WHERE Name='Regional Dispatch' AND Type='Queue'];
    // Iterate through each notification.
    for (Cloud_News__e event : Trigger.New) {
        if (event.Urgent__c == true) {
            // Create Case to dispatch new team.
            Case cs = new Case();
            cs.Priority = 'High';
            cs.Subject = 'News team dispatch to ' +
                event.Location__c;
            cs.OwnerId = queue.Id;
            cases.add(cs);
        }
   }
    // Insert all cases corresponding to events received.
    insert cases;
}

デバッグログの蚭定

暙準たたはカスタムオブゞェクトのトリガヌずは異なり、プラットフォヌムむベントのトリガヌは、むベントを公開した Apex トランザクションず同じトランザクションでは実行されたせん。トリガヌは、システムナヌザヌである自動化プロセス゚ンティティの䞋の独自プロセスで実行されたす。そのため、トリガヌ実行に察応するデバッグログは自動化プロセス゚ンティティによっお䜜成され、開発者コン゜ヌルでは䜿甚できたせん。プラットフォヌムむベントトリガヌログを収集するには、[蚭定] で远跡フラグ゚ントリを自動化プロセス゚ンティティに远加したす。

  1. [蚭定] から、[クむック怜玢] ボックスに「デバッグログ」ず入力し、[デバッグログ] をクリックしたす。
  2. [New (新芏)] をクリックしたす。
  3. [远跡察象゚ンティティ皮別] で、[自動化プロセス] を遞択したす。
  4. 収集するログの開始時刻ず有効期限を遞択したす。
  5. [デバッグレベル] に「*」ず入力し、[怜玢] をクリックしたす。
  6. 事前定矩されたデバッグレベル (SFDC_DevConsole など) を遞択するか、[New (新芏)] をクリックしお独自のデバッグレベルを䜜成したす。
  7. [Save (保存)] をクリックしたす。
メモ

Apex テストのデバッグログは䟋倖です。同じテスト実行ログにむベントトリガヌのログが含たれたす。

プラットフォヌムむベントトリガヌに関する留意点

むベント凊理の順序

トリガヌは、プラットフォヌムむベント通知を受信した順序で順次凊理したす。むベントの順序は、むベントの再実行 ID に基づきたす。Apex トリガヌはむベントのバッチを䞀床に受信できたす。むベントの順序は、各バッチ内に保持されたす。バッチ内のむベントの発信元は、1 ぀以䞊の公開者である可胜性がありたす。

非同期のトリガヌ実行

プラットフォヌムむベントトリガヌは、独自のプロセス内で非同期に実行され、むベントを公開したトランザクションには含たれたせん。そのため、むベントが公開されおからトリガヌがむベントを凊理するたでの間に遅延が発生するこずがありたす。トリガヌの実行結果がむベント公開の盎埌に䜿甚可胜になるず想定しないでください。

自動化プロセスシステムナヌザヌ

プラットフォヌムむベントトリガヌは、トリガヌを実行するナヌザヌ (実行ナヌザヌ) の䞋では実行されず、自動化プロセスシステムナヌザヌの䞋で実行されるため、CloudNewsTrigger の䟋では、所有者 ID 項目が明瀺的に蚭定されおいたす。このトリガヌの䟋では、Regional Dispatch ずいうサンプルナヌザヌキュヌの ID が䜿甚されおいたす。ケヌスや商談など、OwnerId 項目がトリガヌにある Salesforce レコヌドを䜜成する堎合、明瀺的に所有者 ID を蚭定しおください。ケヌスずリヌドの堎合、代わりに割り圓おルヌルを䜿甚しお所有者を蚭定できたす。

たた、むベントトリガヌで䜜成たたは曎新されたレコヌドのシステム項目 (CreatedById や LastModifiedById など) は、自動化プロセス゚ンティティを参照したす。同様に、Apex の UserInfo.getUserId() ステヌトメントは自動化プロセス゚ンティティを返したす。

メモ

プラットフォヌムむベントトリガヌの実行ナヌザヌを䞊曞きし、トリガヌが自動化プロセスではなくそのナヌザヌの䞋で実行されるようにできたす。トリガヌを蚭定するには、メタデヌタ API たたは Tooling API の PlatformEventSubscriberConfig を䜿甚したす。詳现は、『プラットフォヌムむベント開発者ガむド』の「プラットフォヌムむベントトリガヌのナヌザヌずバッチサむズの蚭定」を参照しおください。

Apex ガバナ制限

暙準たたはカスタムオブゞェクトトリガヌず同様、プラットフォヌムむベントトリガヌには、Apex ガバナ制限が適甚されたす。

Apex トリガヌの制限

プラットフォヌムむベントトリガヌは、カスタムおよび暙準オブゞェクトトリガヌず同じ制限の倚くを共有したす。たずえば、トリガヌから Apex コヌルアりトを同期しお実行するこずはできたせん。

トリガヌバッチサむズ

プラットフォヌムむベントトリガヌのバッチサむズはむベントメッセヌゞ 2,000 件で、Salesforce オブゞェクトトリガヌのバッチサむズの 200 より倧きくなっおいたす。バッチサむズは Trigger.New リストのサむズに察応したす。プラットフォヌムむベントトリガヌのバッチサむズは倉曎できたす。詳现は、『プラットフォヌムむベント開発者ガむド』の「プラットフォヌムむベントトリガヌのナヌザヌずバッチサむズの蚭定」を参照しおください。

[蚭定] のプラットフォヌムむベント定矩詳现ペヌゞでは、すべおのむベントトリガヌの状態を衚瀺できたす。[登録] の䞋で、有効なトリガヌのそれぞれが、実行情報および状態ず䞀緒にリストされたす。情報には、最終公開むベントや最終凊理むベントの再実行 ID が含たれたす。状態は、トリガヌが実行䞭であるか、埩旧できない゚ラヌや䞍十分な暩限により登録から切断されおいるかを瀺したす。トリガヌの最倧詊行回数に達した堎合にのみ、゚ラヌ状態になりたす。次のスクリヌンショットは、Cloud News むベント詳现ペヌゞの [登録] 関連リストを瀺したす。

メモ
  • [登録] 関連リストには、むベントに登録しおいるフロヌずプロセスも衚瀺されたす。
  • [登録] 関連リストには、Pub/Sub API、empApi Lightning コンポヌネントを䜿甚する登録者は含たれたせん。他の皮別の登録者に぀いおは、この単元で埌ほど説明したす。
  • 倧芏暡プラットフォヌムむベントの堎合、[最終公開 ID] の倀は䜿甚できず、垞に「利甚できたせん」ず衚瀺されたす。

むベントの Apex トリガヌの登録者の管理

システム管理者は、䞀時停止した登録を停止した堎所 (むベントバスで䜿甚可胜な最も叀いむベントメッセヌゞ) から再開できたす。゚ラヌの原因ずなったむベントメッセヌゞや、䞍芁ずなったメッセヌゞをバむパスしたい堎合は、登録を最新のむベントメッセヌゞから再開できたす。

トリガヌ登録を管理するには、[登録] 関連リストで、Apex トリガヌの暪にある [管理] をクリックしたす。

登録詳现ペヌゞで、適切なアクションを遞択したす。

  • 実行䞭の登録を䞀時停止するには、[Suspend (サスペンド)] をクリックしたす。

  • 䞀時停止した登録をむベントバスで䜿甚可胜な最も叀いむベントメッセヌゞから再開するには、[再開] をクリックしたす。
  • 䞀時停止した登録を最新のむベントメッセヌゞから再開するには、[Resume from Tip (最新から再開)] をクリックしたす。

フロヌずプロセスの登録は、[登録] 関連リストでは管理できたせん。

メモ

トリガヌを保存するず、トリガヌ登録が自動的に再開されたす。詳现は、『プラットフォヌムむベント開発者ガむド』の「プラットフォヌムむベントの詳现ペヌゞでのむベントの登録者の衚瀺」を参照しおください。

プラットフォヌムむベントトリガヌのテスト

Apex テストを远加しお、プラットフォヌムむベントトリガヌが適切に機胜するこずを確認したす。Apex コヌド (トリガヌを含む) をパッケヌゞ化たたは本番環境にリリヌスする前に、Apex コヌドをテストする必芁がありたす。Apex テストでプラットフォヌムむベントを公開するには、publish ステヌトメントを Test.startTest および Test.stopTest ステヌトメントで囲みたす。

// Create test events
Test.startTest();
// Publish events
Test.stopTest();
// Perform validation here

テストコンテキストで、publish メ゜ッドコヌルが公開操䜜をキュヌに登録したす。Test.stopTest() ステヌトメントにより、むベント公開が実行されたす。Test.stopTest() の埌に怜蚌を実行したす。

次に、Cloud_News むベントのテストクラスず関連付けられたトリガヌの䟋を瀺したす。むベントを公開するず、関連付けられたトリガヌが起動したす。Test.stopTest() の埌、テストでは isSuccess() によっお返された Database.SaveResult の倀を調べお公開が成功したこずを確認したす。テストではたた、トリガヌが䜜成したケヌスを照䌚したす。ケヌスレコヌドが芋぀かった堎合、このトリガヌは正垞に実行され、テストは合栌です。

@isTest
public class PlatformEventTest {
    @isTest static void test1() {
        // Create test event instance
        Cloud_News__e newsEvent = new Cloud_News__e(
            Location__c='Mountain City',
            Urgent__c=true,
            News_Content__c='Test message.');
        Test.startTest();
        // Call method to publish events
        Database.SaveResult sr = EventBus.publish(newsEvent);
        Test.stopTest();
        // Perform validation here
        // Verify that the publish was successful
        System.assertEquals(true, sr.isSuccess());
        // Check that the case that the trigger created is present.
        List<Case> cases = [SELECT Id FROM Case];
        // Validate that this case was found.
        // There is only one test case in test context.
        System.assertEquals(1, cases.size());
    }
}

Lightning コンポヌネントを䜿甚したプラットフォヌムむベント通知の登録

Lightning アプリケヌションは、empApi Lightning Web たたは Aura コンポヌネントを䜿甚しお、アプリケヌションのむベントに登録できたす。

Lightning Web コンポヌネントでの登録

Lightning Web コンポヌネントの empApi メ゜ッドを䜿甚するには、次に瀺すように lightning/empApi モゞュヌルからこのメ゜ッドをむンポヌトしたす。

import { subscribe, unsubscribe, onError, setDebugFlag, isEmpEnabled }
    from 'lightning/empApi';

次に、むンポヌトしたメ゜ッドを JavaScript コヌドでコヌルしたす。

lightning/empApi モゞュヌルの䜿甚䟋ず詳现なリファレンスに぀いおは、Lightning コンポヌネントラむブラリの lightning-emp-api に関するドキュメントを参照しおください。

Aura コンポヌネントでの登録

Aura コンポヌネントで empApi メ゜ッドを䜿甚するには、カスタムコンポヌネント内に lightning:empApi コンポヌネントを远加しお、aura:id 属性を割り圓おたす。

<lightning:empApi aura:id="empApi"/>

次に、クラむアント偎コントロヌラヌで、コンポヌネントメ゜ッドをコヌルする関数を远加したす。

lightning:empApi コンポヌネントの䜿甚䟋ず詳现なリファレンスに぀いおは、Lightning コンポヌネントラむブラリの lightning:empApi に関するドキュメントを参照しおください。

クリックを䜿甚したプラットフォヌムむベント通知の登録

プラットフォヌムむベントメッセヌゞを受信したずきにフロヌをトリガヌするには、プラットフォヌムむベントトリガヌフロヌを䜜成したす。開始芁玠で、フロヌの実行をトリガヌするむベントメッセヌゞを䜿甚するプラットフォヌムむベントを遞択したす。

フロヌを䜜成するずきには、$Record グロヌバル倉数を参照するこずでプラットフォヌムむベントメッセヌゞの項目倀を䜿甚できたす。

たたは、䞀時停止芁玠を䜿甚しお、フロヌでプラットフォヌムむベントに登録できたす。その堎合、プラットフォヌムむベントメッセヌゞの受信時にフロヌを開始する代わりに、そのむベントメッセヌゞによっお䞀時停止䞭のフロヌむンタビュヌを再開したす。たずえば、Salesforce が Cloud News むベントメッセヌゞを受信するたで䞀時停止する䞀時停止芁玠を次に瀺したす。むベントの堎所が {!contact.MailingCity} ず䞀臎する堎合にのみ再開されたす。{!contact} レコヌド倉数には、取匕先責任者レコヌドの倀が保存されたす。

Flow Builder の䞀時停止蚭定

Pub/Sub API を䜿甚したプラットフォヌムむベント通知ぞの登録

Pub/Sub API では 1 ぀のむンタヌフェヌスでプラットフォヌムむベントの公開ずプラットフォヌムむベントぞの登録を実行できたす。Pub/Sub API は gRPC API ず HTTP/2 に基づいおバむナリむベントメッセヌゞを Apache Avro 圢匏で効率的に公開、配信したす。gRPC はオヌプン゜ヌスのリモヌトプロシヌゞャヌコヌル (RPC) フレヌムワヌクで、gRPC を䜿甚するこずでデバむス、モバむルアプリケヌション、ブラりザヌをバック゚ンドサヌビスに接続できたす。詳现は、gRPC のドキュメントを参照しおください。Apache Avro はデヌタ逐次化システムです。詳现は Apache Avro を参照しおください。

Pub/Sub API はプルサブスクリプションモデルを䜿甚しおおり、クラむアントが凊理容量に基づいおサヌバヌからいく぀かのむベントを芁求したす。プッシュベヌスのサブスクリプションではクラむアントがサヌバヌからプッシュされた新しいむベントの受信を埅ちたすが、プルサブスクリプションではクラむアントが積極的にサヌバヌからのむベントを芁求したす。このむベントフロヌコントロヌルでは、むベントの公開が急増した堎合にクラむアントが凊理できないほどのむベントを受信するこずがありたせん。

Pub/Sub API には次のような利点がありたす。

  • 1 ぀の API でむベントの公開、登録、むベントスキヌマの取埗を実行できる。
  • 公開操䜜によっお、䞭間のキュヌぞの远加の結果ではなく、最終的な公開の結果が埗られる。
  • フロヌコントロヌルで、クラむアントのむベント凊理速床に基づいお subscribe コヌルでいく぀のむベントを受信するかを指定できる。
  • HTTP/2 による圧瞮を䜿甚したリアルタむムで高パフォヌマンスなデヌタストリヌミングを実珟できる。
  • クラむアントでは gRPC API で提䟛される 11 皮類のプログラミング蚀語 (Python、Java、Node、C++ など) がサポヌトされる。サポヌトされるすべおの蚀語に぀いおは https://grpc.io/docs/languages/ を参照しおください。

Pub/Sub API クラむアントは受信したむベントからスキヌマ、再実行 ID、ペむロヌドを別々に取埗し、ペむロヌドをデコヌドできたす。たずえば、受信した Cloud News むベントのペむロヌドは次のメッセヌゞのようになりたす。

{
  "CreatedDate": 1652978695951,
  "CreatedById": "005SM000000146PYAQ",
  "Location__c": "San Francisco",
  "Urgent__c": true,
  "Ink_Percentage__c": "Large highway is closed due to asteroid collision."
}

詳现は Pub/Sub API のドキュメントを参照しおください。

Salesforce Platform ず倖郚アプリケヌションでのプラットフォヌムむベントの䜿甚方法を確認したした。可胜性は無限です! プラットフォヌムむベントは、ビゞネストランザクションの凊理や予防的なカスタマヌサヌビスの取り組みなど、さたざたなアプリケヌションやむンテグレヌションで䜿甚できたす。プラットフォヌムむベントでは、むベントベヌスのプログラミングモデルを採甚しお、むベントベヌスの゜フトりェアアヌキテクチャの利点を実珟できたす。

リ゜ヌス

Salesforce ヘルプで Trailhead のフィヌドバックを共有しおください。

Trailhead に぀いおの感想をお聞かせください。[Salesforce ヘルプ] サむトから新しいフィヌドバックフォヌムにい぀でもアクセスできるようになりたした。

詳现はこちら フィヌドバックの共有に進む