mirror of
https://github.com/forcedotcom/afv-library.git
synced 2026-08-05 23:41:31 +08:00
* 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>
104 lines
3.8 KiB
JavaScript
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' };
|
|
}
|
|
}
|