messageChannel を利用して通信する。
① messageChannel 新規作成する
メーターデータ取得する。
<types>
<members>*</members>
<name>LightningMessageChannel</name>
</types>
ソース格納フォルダforce-app/main/default
/messageChannels
サンプル:
LineMessageChannel.messageChannel-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningMessageChannel xmlns="http://soap.sforce.com/2006/04/metadata">
<description>Line Message LMS.</description>
<isExposed>true</isExposed>
<lightningMessageFields>
<description>Select Changed</description>
<fieldName>lineId</fieldName>
</lightningMessageFields>
<lightningMessageFields>
<description>Select Changed</description>
<fieldName>recordId</fieldName>
</lightningMessageFields>
<masterLabel>LineMessageChannel</masterLabel>
</LightningMessageChannel>
➁ メッセージ送信する
import FRIEND_SELECTED_CHANNEL from '@salesforce/messageChannel/LineMessageChannel__c';
import { publish, MessageContext } from 'lightning/messageService';
@wire(MessageContext) messageContext;
friendSelect(event) {
const payload = { recordId: recordId}; //メッセージ内容
publish(this.messageContext, FRIEND_SELECTED_CHANNEL, payload);
}
③メッセージ受信する
import FRIEND_SELECTED_CHANNEL from '@salesforce/messageChannel/LineMessageChannel__c';
import { publish, MessageContext, unsubscribe,subscribe, APPLICATION_SCOPE } from 'lightning/messageService';
//メッセージ自動更新
connectedCallback() {
this.subscribeToMessageChannel();
}
disconnectedCallback() {
unsubscribe(this.subscription);
this.subscription = null;
}
subscribeToMessageChannel() {
if (!this.subscription) {
this.subscription = subscribe(
this.messageContext,
FRIEND_SELECTED_CHANNEL,
(message) => this.handleMessage(message),
{ scope: APPLICATION_SCOPE }
);
}
}
handleMessage(message) {
this.recordId = message.recordId;
}