[設定] でのコンポーネントの表示
売上予測ページのコンポーネントの作成
エクスペリエンスビルダーサイト
ユーティリティバー
Outlook および Gmail
スタンドアロンアプリケーション
Visualforce ページ
フォーム要素
ファイルを開く
メッセージチャネルの作成
Message Service の範囲の定義
メッセージチャネルでの公開
メッセージチャネルの登録および登録解除
メッセージサービスの制限事項
モバイルデバイス機能の使用
CRM Analytics ダッシュボード
メッセージチャネルでメッセージの登録および登録解除を行うには、メッセージチャネルを @salesforce/messageChannel で範囲設定されたモジュールから Lightning Web コンポーネントにインポートします。Lightning Message Service の subscribe() 関数と unsubscribe() 関数をコールします。
github.com/trailheadapps/lwc-recipes リポジトリの lmsSubscriberWebComponent では、メッセージチャネルへの登録、およびチャネルからの登録解除の方法が示されます。この例では、「メッセージチャネルでの公開」のパブリッシャーコンポーネントを使用します。
パブリッシャーコンポーネントから取引先責任者を選択すると、選択したレコード ID が Record_Selected__c メッセージチャネルに公開されます。
登録者コンポーネントの HTML は、公開されたメッセージに反応し、メッセージペイロードを介してレコード ID が提供された取引先責任者のデータを表示します。
1<!-- lmsSubscriberWebComponent.html -->
2<template>
3 <lightning-card title="LMSSubscriberWebComponent" icon-name="custom:custom30">
4 <div class="slds-m-around_medium">
5 <template lwc:if={Picture__c}>
6 <img src={Picture__c} alt="Profile photo" />
7 </template>
8 <p>{Name}</p>
9 <p>{Title}</p>
10 <p>
11 <lightning-formatted-phone value={Phone}></lightning-formatted-phone>
12 </p>
13 <p>
14 <lightning-formatted-email value={Email}></lightning-formatted-email>
15 </p>
16 </div>
17 </lightning-card>
18</template>コンポーネントの JavaScript で、lightning/messageService から登録に必要な Message Service の機能をインポートします。@salesforce/messageChannel から Record_Selected__c メッセージチャネルをインポートします。
@wire(MessageContext) を使用してコンテキストオブジェクトを作成します。このオブジェクトは、Lightning Message Service を使用している Lightning Web コンポーネントに関する情報を提供します。コンポーネントを DOM に添付してからでないと、@wire(MessageContext) でデコレートされたプロパティを使用できません。
subscribeToMessageChannel() 関数は、subscription が null かどうかを確認します。subscription が null の場合、Lightning Message Service の subscribe() メソッドをコールして subscription に割り当てます。subscribe() メソッドは、メッセージコンテキスト、メッセージチャネルの名前、公開されたメッセージを処理するリスナーメソッドの 3 つの必須パラメータを取ります。リスナーメソッドが呼び出されると、メッセージを handleMessage() に渡します。handleMessage() は、受信した JSON メッセージペイロードから recordId プロパティを抽出します。次に、レコード ID と一致する取引先責任者の関連情報で HTML テンプレートが更新されます。
メッセージチャネル上のメッセージをアプリケーション内の任意の場所から受信するには、subscribe() メソッドの 4 番目のパラメータ (省略可能) として { scope: APPLICATION_SCOPE } を渡します。「Message Service の範囲の定義」を参照してください。
Lightning Message Service からのメッセージの受信を停止するには、登録参照を渡して unsubscribe() をコールします。subscription オブジェクトには、解除する登録への参照が含まれます。次の例では、unsubscribeToMessageChannel() をコールします。これにより、unsubscribe() がコールされて、subscription が null に設定されます。
1// lmsSubscriberWebComponent.js
2import { LightningElement, wire } from "lwc";
3import { getRecord, getFieldValue } from "lightning/uiRecordApi";
4import { ShowToastEvent } from "lightning/platformShowToastEvent";
5import { reduceErrors } from "c/ldsUtils";
6
7// Import message service features required for subscribing and the message channel
8import {
9 subscribe,
10 unsubscribe,
11 APPLICATION_SCOPE,
12 MessageContext,
13} from "lightning/messageService";
14import recordSelected from "@salesforce/messageChannel/Record_Selected__c";
15
16import NAME_FIELD from "@salesforce/schema/Contact.Name";
17import TITLE_FIELD from "@salesforce/schema/Contact.Title";
18import PHONE_FIELD from "@salesforce/schema/Contact.Phone";
19import EMAIL_FIELD from "@salesforce/schema/Contact.Email";
20import PICTURE_FIELD from "@salesforce/schema/Contact.Picture__c";
21
22const fields = [NAME_FIELD, TITLE_FIELD, PHONE_FIELD, EMAIL_FIELD, PICTURE_FIELD];
23
24export default class LmsSubscriberWebComponent extends LightningElement {
25 subscription = null;
26 recordId;
27
28 Name;
29 Title;
30 Phone;
31 Email;
32 Picture__c;
33
34 @wire(getRecord, { recordId: "$recordId", fields })
35 wiredRecord({ error, data }) {
36 if (error) {
37 this.dispatchToast(error);
38 } else if (data) {
39 fields.forEach((item) => (this[item.fieldApiName] = getFieldValue(data, item)));
40 }
41 }
42
43 @wire(MessageContext)
44 messageContext;
45
46 // Encapsulate logic for Lightning message service subscribe and unsubsubscribe
47 subscribeToMessageChannel() {
48 if (!this.subscription) {
49 this.subscription = subscribe(
50 this.messageContext,
51 recordSelected,
52 (message) => this.handleMessage(message),
53 { scope: APPLICATION_SCOPE },
54 );
55 }
56 }
57
58 unsubscribeToMessageChannel() {
59 unsubscribe(this.subscription);
60 this.subscription = null;
61 }
62
63 // Handler for message received by component
64 handleMessage(message) {
65 this.recordId = message.recordId;
66 }
67
68 // Standard lifecycle hooks used to subscribe and unsubsubscribe to the message channel
69 connectedCallback() {
70 this.subscribeToMessageChannel();
71 }
72
73 disconnectedCallback() {
74 this.unsubscribeToMessageChannel();
75 }
76
77 // Helper
78 dispatchToast(error) {
79 this.dispatchEvent(
80 new ShowToastEvent({
81 title: "Error loading contact",
82 message: reduceErrors(error).join(", "),
83 variant: "error",
84 }),
85 );
86 }
87}LightningElement でないサービスコンポーネントを作成する場合、@wire(MessageContext) を使用して MessageContext オブジェクトを作成することはできません。代わりに、createMessageContext() メソッドと releaseMessageContext() メソッドを lightning/messageService からインポートします。createMessageContext() を使用してコンテキストオブジェクトを作成し、それを messageContext などの項目に割り当てます。次に、messageContext を subscribe() メソッドに渡します。コンテキストはサービスコンポーネントに対して自動的に開放されません。releaseMessageContext(messageContext) をコールして、コンポーネントのメッセージコンテキストに関連付けられた登録を削除します。
Note
関連トピック
The Japanese Summer '24 guide is now live