Hello Friends, in this chapter we will learn how to call apex method imperatively. I hope you enjoy the article.
Are you ready ? Let’s Begin !!
—
Example 1
apexImperativeMethod.html
<template> <lightning-card title="ApexImperativeMethod" icon-name="custom:custom63"> <div class="slds-var-m-around_medium"> <p class="slds-var-m-bottom_small"> <lightning-button label="Load Contacts" onclick={handleLoad} ></lightning-button> </p> <template if:true={contacts}> <template for:each={contacts} for:item="contact"> <div key={contact.Id}> <p>{contact.Name}</p> <p>{contact.Phone}</p> </div> </template> </template> </div> </lightning-card> </template>
apexImperativeMethod.js
import { LightningElement } from 'lwc'; import getContactList from '@salesforce/apex/ContactMaster.getContactList'; export default class apexImperativeMethod extends LightningElement { contacts; error; handleLoad() { getContactList() .then((result) => { this.contacts = result; this.error = undefined; }) .catch((error) => { this.error = error; this.contacts = undefined; }); } }
AccountManager.apxc
public class AccountManager { @AuraEnabled (cacheable=true) public static List <Account> getAccounts() { return [SELECT Id, name, industry, Type, NumberOfEmployees, TickerSymbol, Phone, Rating, Website, AnnualRevenue FROM Account ORDER BY createdDate ASC LIMIT 25]; } }
Example 2:
ApexImperativeMethodWithParams.html
<template> <lightning-card title="ApexImperativeMethodWithParams" icon-name="custom:custom63" > <div class="slds-var-m-around_medium"> <lightning-layout vertical-align="end" class="slds-var-m-bottom_small" > <lightning-layout-item flexibility="grow"> <lightning-input type="search" onchange={handleKeyChange} label="Search" value={searchKey} ></lightning-input> </lightning-layout-item> <lightning-layout-item class="slds-var-p-left_xx-small"> <lightning-button label="Search" onclick={handleSearch} ></lightning-button> </lightning-layout-item> </lightning-layout> <template if:true={contacts}> <template for:each={contacts} for:item="contact"> <p key={contact.Id}>{contact.Name}</p> </template> </template> </div> </lightning-card> </template>
ApexImperativeMethodWithParams.js
import { LightningElement } from 'lwc'; import findContacts from '@salesforce/apex/ContactMaster.findContacts'; export default class ApexImperativeMethodWithParams extends LightningElement { searchKey = ''; contacts; error; handleKeyChange(event) { this.searchKey = event.target.value; } handleSearch() { findContacts({ searchKey: this.searchKey }) .then((result) => { this.contacts = result; this.error = undefined; }) .catch((error) => { this.error = error; this.contacts = undefined; }); } }
AccountManager.apxc
public class AccountManager { @AuraEnabled (cacheable=true) public static List <Account> getAccounts() { return [SELECT Id, name, industry, Type, NumberOfEmployees, TickerSymbol, Phone, Rating, Website, AnnualRevenue FROM Account ORDER BY createdDate ASC LIMIT 25]; } @AuraEnabled public static List <Account> fetchAccountDetails(String accName){ if(string.isNotBlank(accName)){ string searchName ='%'+accName+'%'; return [Select Id, name, industry, Type, NumberOfEmployees, TickerSymbol, Phone, Rating, Website, AnnualRevenue FROM Account where name like :searchName LIMIT 1]; } else{ return NULL; } } }
Example3
opportunityManager.html
<template> <div class="slds-box slds-p-around_small" style="background-color: rgb(187, 255, 255);"> <lightning-input label="Enter Opportunity Name" placeholder="Opportunity Name" value={searchOpportunityName} onchange={opportunityNameChange}> </lightning-input> <template if:true={opportunities}> <div class="slds-grid slds-wrap sds-gutters"> <template for:each={opportunities} for:item="opp"> <div class="slds-col slds-size_1-of-3 slds-p-around_small" key={opp.Id}> <lightning-card title={opp.Name}> <div slot="actions"> <template if:true={opp.IsClosed}> <span style="color: blue; font-weight: bold;">Already Closed</span> </template> <template if:false={opp.IsClosed}> <lightning-button name={opp.Id} value={opp.Id} label="Close Opportunity" onclick={passOpportunityToClose} ></lightning-button> </template> </div> <p class="slds-p-horizontal_small"> <span style="color: blue;">Stage:</span>{opp.StageName} </p> <p class="slds-p-horizontal_small"> <span style="color: blue;">Close Date:</span>{opp.CloseDate} </p> </lightning-card> </div> </template> </div> </template> </div> </template>
opportunityManager.js
import { LightningElement } from 'lwc'; import fetchOpportunityDetails from '@salesforce/apex/OpportunityManager.fetchOpportunityDetails'; import closeOpportunity from '@salesforce/apex/OpportunityManager.closeOpportunity'; export default class CaseManager extends LightningElement { searchOpportunityName; opportunities; errorDetails; opportunityCloseMessage; opportunityNameChange(event){ this.searchOpportunityName = event.target.value; fetchOpportunityDetails({oppName:this.searchOpportunityName }) .then(result=>{ this.opportunities = result; }) .catch(error=>{ this.errorDetails = error; }); } passOpportunityToClose(event){ this.opportunityId = event.target.name; closeOpportunity({opportunityId:this.opportunityId}) .then(result=>{ this.opportunityCloseMessage = result; }) .catch(error=>{ this.errorDetails = error; }); } }
OpportunityManager.apxc
public class OpportunityManager { @AuraEnabled public static list<Opportunity> fetchOpportunityDetails(string oppName){ if(string.isNotBlank(oppName)){ string searchOpp ='%'+oppName+'%'; return [SELECT Id,Account.Name,Name,StageName, CloseDate FROM Opportunity where Name like :searchOpp]; } else{ return NULL; } } @AuraEnabled public static string closeOpportunity(string opportunityId){ string message; try{ opportunity opp = new opportunity(Id=opportunityId); opp.StageName='Closed Won'; update opp; message = 'Success'; } catch(Exception ex){ message = ex.getMessage(); } return message; } }