1.创建MessageChannels,在default目录下新建文件夹messageChannels:

2.新建channel文件,命名规则:name+".messageChannel-meta.xml":
<?xml version="1.0" encoding="UTF-8"?>
<LightningMessageChannel xmlns="http://soap.sforce.com/2006/04/metadata">
<description>This is a callcenter Lightning Message Channel.</description>
<isExposed>true</isExposed>
<lightningMessageFields>
<description>This is the record Id that changed</description>
<fieldName>recordId</fieldName>
</lightningMessageFields>
<masterLabel>callCenterMessageChannel</masterLabel>
</LightningMessageChannel>
lightningMessageFields:配置传递参数
3.在LWC中publish Channel,import的channel是messagechannel中的name+"__c":
javascript
import {LightningElement,api ,wire } from 'lwc';
import { publish, MessageContext } from 'lightning/messageService';
import CallCenterMessageChannel from '@salesforce/messageChannel/callCenterChannelName__c';
export default class CallCenterMessageService extends LightningElement {
@api recordId
@wire(MessageContext)
messageContext;
// 当组件加载时处理记录 ID
async connectedCallback() {
// console.log('Selected Record IDs: ', this.selectedIds);
console.log('record Id: ', this.recordId);
debugger
this.handlePublish();
}
handlePublish(){
// debugger
// console.log('handlePublish--Selected Record IDs: ', JSON.stringify(this.selectedIds));
const payload = { recordId: this.recordId};
publish(this.messageContext, CallCenterMessageChannel, payload);
}
closeQuickAction() {
this.dispatchEvent(new CloseActionScreenEvent());
}
}
4.在aura中publish & 订阅事件:
publish代码:
javascript
cmp:
<lightning:messageChannel type="callCenterChannelName__c"
aura:id="callCenterMessageChannel"/>
js:
handlePublish: function (cmp, event, helper) {
var payload = {
recordId: cmp.get("v.recordId")
};
cmp.find("callCenterMessageChannel").publish(payload);
}
订阅事件:
javascript
cmp:
<lightning:messageChannel type="callCenterChannelName__c" onMessage="{!c.handleCallCenterChannel}" scope="APPLICATION"/>
js:
handleCallCenterChannel: function (cmp, message, helper) {
// debugger;
console.log("订阅信息!!");
if (message != null && message.getParam("recordId") != null) {
console.log("recordId--->" + message.getParam("recordId"));
cmp.set("v.recordId", message.getParam("recordId"));
}
}
5.visualforce page 中publish & 订阅:
javascript
function publishMC() {
const message = {
record: "a0WIm000000cDYrMAM"
};
sforce.one.publish(callCenter, message);
}
//订阅事件
function subscribeMC() {
if (!subscriptionToMC) {
subscriptionToMC = sforce.one.subscribe(SAMPLEMC, displayMessage);
}
}
//取消订阅事件
function unsubscribeMC() {
if (subscriptionToMC) {
sforce.one.unsubscribe(subscriptionToMC);
subscriptionToMC = null;
}
}