afv-library/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js
sandipkumar-yadav 37aa84df42
feat: @W-22444026@ Introducing Core Skills, Datacloud Skills, Industries and Utility Skills. (#268)
* Migrating Core Salesforce Skills

* Updating pr comments

* updat reference

* Updating a skill

* Migrating Datacloud skills

* Migrating Industries cloud skills

* Validating - skills fixing

---------

Co-authored-by: Sandip Kumar Yadav <sandipkumar.yadav+sfemu@salesforce.com>
2026-05-14 19:32:15 +05:30

104 lines
3.8 KiB
JavaScript

/**
* LIGHTNING MESSAGE SERVICE - PUBLISHER TEMPLATE
*
* This component demonstrates publishing messages via LMS.
* Use LMS when components need to communicate but:
* - Don't have a parent-child relationship
* - Are in different parts of the page
* - Need to communicate between LWC, Aura, and Visualforce
*
* Replace: lmsPublisher → yourComponentName
*/
import { LightningElement, wire } from 'lwc';
import { publish, MessageContext } from 'lightning/messageService';
import RECORD_SELECTED_CHANNEL from '@salesforce/messageChannel/RecordSelected__c';
export default class LmsPublisher extends LightningElement {
// ═══════════════════════════════════════════════════════════════════════
// MESSAGE CONTEXT
// ═══════════════════════════════════════════════════════════════════════
/**
* MessageContext provides the scope for publishing/subscribing.
* Wire it to get the current context automatically.
*/
@wire(MessageContext)
messageContext;
// ═══════════════════════════════════════════════════════════════════════
// PUBLISH METHODS
// ═══════════════════════════════════════════════════════════════════════
/**
* Publish a simple message with record selection
*/
handleRecordSelect(event) {
const recordId = event.target.dataset.id;
const recordName = event.target.dataset.name;
// Create message payload
const payload = {
recordId: recordId,
recordName: recordName,
objectApiName: 'Account',
sourceComponent: 'lmsPublisher',
timestamp: new Date().toISOString()
};
// Publish to the message channel
publish(this.messageContext, RECORD_SELECTED_CHANNEL, payload);
console.log('Published message:', payload);
}
/**
* Publish with complex payload (JSON string for nested data)
*/
publishWithComplexPayload(recordData) {
const payload = {
recordId: recordData.Id,
recordName: recordData.Name,
objectApiName: 'Account',
sourceComponent: 'lmsPublisher',
timestamp: new Date().toISOString(),
payload: JSON.stringify({
additionalField1: recordData.field1,
additionalField2: recordData.field2,
nestedObject: {
key1: 'value1',
key2: 'value2'
}
})
};
publish(this.messageContext, RECORD_SELECTED_CHANNEL, payload);
}
/**
* Publish from imperative action (e.g., after Apex call)
*/
async handleSaveAndPublish() {
try {
// Perform some action
const result = await this.saveRecord();
// Publish result to other components
publish(this.messageContext, RECORD_SELECTED_CHANNEL, {
recordId: result.Id,
recordName: result.Name,
objectApiName: 'Account',
sourceComponent: 'lmsPublisher',
timestamp: new Date().toISOString()
});
} catch (error) {
console.error('Save failed:', error);
}
}
// Placeholder for actual save logic
async saveRecord() {
return { Id: '001xx000000000', Name: 'Test Account' };
}
}