Salesforce LWC メッセージ通信

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;
  }