Hey guys, In this post we are going to learn about how to write inner query in Salesforce. And how to fetch data from multiple custom sObject using wrapper apex class in lightning component.
Also in this example we will achieving that how to
Files we used in this post example →
wrapperCustomObjCmp.cmp | Lightning Component | It is used for display the Input filed of name, address, email, and button Icon of delete on the table. |
wrapperCustomObjCmpConroller.js | JavaScript Controller File | It is used for communicate to server side apex method and fetch the record using init fuction. |
wrapperCustomObjCmpHelper.js | JavaScript Helper File | It is used for refresh the page after delete the record. |
wrapperCustomObjCmp.CSS | Component Style CSS | It is used for creat a custom delete icon from resource. |
wrapperCustomObjCtrCmp.apxc | Apex Class Controller | It is used for delete and fetching the records from multiple sObject from database server |
Custom Parent Object:- NewStudent__c Custom Parent Object Fields:- Name, Email__c Address__c Custom Child Lookup Object:- Registration__c Custom Child Object Fields:- Name, RegNewStudent__r.Name RegCourse__r.Name DateOfRegistration__c |
Custom Object and their fields | In this post we used two type of custom sObject. first is Parent object (NewStudent__c) and another is child sObject (Registration__c). We are achieving that how to fetch records from two custom objects and how to delete child record in Lookup relationship.. |
Final Output →
- Do you know:- The cheapest and best smartphone in your budget 2022?
Other related post that would you like to learn in lightning component.
Create Lightning Component →
Step 1:- Create Lightning Component : wrapperCustomObjCmp.cmp
From Developer Console >> File >> New >> Lightning Component >> wrapperCustomObjCmp.cmp
wrapperCustomObjCmp.cmp [Lightning Component File]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<aura:component controller="wrapperCustomObjCtrCmp" implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction,lightning:isUrlAddressable" access="global" > <aura:attribute name="wrapListItems" type="NewStudent__c[]"/> <aura:handler name="init" value="{!this}" action="{!c.doInit}"/> <aura:attribute name="recSelectId" type="String" default=""/> <div class="slds slds-p-horizontal--medium"> <table class="slds-table slds-table--bordered slds-table--col-bordered" style="border-collapse:collapse;"> <thead> <tr> <th>Student Name</th> <th>Address</th> <th>Email</th> <th>Registration No.</th> <th>Registered Student Name</th> <th>Registered Course Name</th> <th>Registration Date</th> <th></th> </tr> </thead> <tbody> <aura:iteration items="{!v.wrapListItems}" var="wrapVar" indexVar="index"> <tr id="{!wrapVar.recStudentId}"> <td>{!wrapVar.studentName}</td> <td>{!wrapVar.studentAddress}</td> <td>{!wrapVar.studentEmail}</td> <td>{!wrapVar.regNum}</td> <td>{!wrapVar.regStudentName}</td> <td>{!wrapVar.regCourseName}</td> <td>{!wrapVar.regDateOfReg}</td> <td> <a href="javascript:void(0);"><span class="delSpan slds-m-left--small" title="Delete" onclick="{!c.deleteRowId}" data-sfid="{!wrapVar.recStudentId}" data-index="{!index}"></span></a> </td> </tr> </aura:iteration> </tbody> </table> <br/><br/> <!--Start RelatedTopics Section--> <div style="border:1px #ddd solid; padding:10px; background:#eee; margin:40px 0;"> <p data-aura-rendered-by="435:0"><img src="https://www.w3web.net/wp-content/uploads/2021/05/thumbsUpLike.png" width="25" height="25" style="vertical-align:top; margin-right:10px;" data-aura-rendered-by="436:0"><strong data-aura-rendered-by="437:0"><span style="font-size:16px; font-style:italic; display:inline-block; margin-right:5px;">Don't forget to check out:-</span><a href="https://www.w3web.net/" target="_blank" rel="noopener noreferrer" style="text-decoration:none;" data-aura-rendered-by="440:0">An easy way to learn step-by-step online free Salesforce tutorial, To know more Click <span style="color:#ff8000; font-size:18px;" data-aura-rendered-by="442:0">Here..</span></a></strong></p> <br/><br/> <p data-aura-rendered-by="435:0"><img src="https://www.w3web.net/wp-content/uploads/2021/07/tickMarkIcon.png" width="25" height="25" style="vertical-align:top; margin-right:10px;" data-aura-rendered-by="436:0"><strong data-aura-rendered-by="437:0"><span style="font-size:17px; font-style:italic; display:inline-block; margin-right:5px; color:rgb(255 128 0);">You May Also Like →</span> </strong></p> <div style="display:block; overflow:hidden;"> <div style="width: 50%; float:left; display:inline-block"> <ul style="list-style-type: square; font-size: 16px; margin: 0 0 0 54px; padding: 0;"> <li><a href="https://www.w3web.net/lwc-get-set-lightning-checkbox-value/" target="_blank" rel="noopener noreferrer">How to get selected checkbox value in lwc</a></li> <li><a href="https://www.w3web.net/display-account-related-contacts-in-lwc/" target="_blank" rel="noopener noreferrer">how to display account related contacts based on AccountId in lwc</a></li> <li><a href="https://www.w3web.net/create-lightning-datatable-row-actions-in-lwc/" target="_blank" rel="noopener noreferrer">how to create lightning datatable row actions in lwc</a></li> <li><a href="https://www.w3web.net/if-and-else-condition-in-lwc/" target="_blank" rel="noopener noreferrer">how to use if and else condition in lwc</a></li> <li><a href="https://www.w3web.net/get-selected-radio-button-value-and-checked-default-in-lwc/" target="_blank" rel="noopener noreferrer">how to display selected radio button value in lwc</a></li> </ul> </div> <div style="width: 50%; float:left; display:inline-block"> <ul style="list-style-type: square; font-size: 16px; margin: 0 0 0 54px; padding: 0;"> <li><a href="https://www.w3web.net/display-account-related-contacts-lwc/" target="_blank" rel="noopener noreferrer">display account related contacts based on account name in lwc</a></li> <li><a href="https://www.w3web.net/create-lightning-datatable-row-actions-in-lwc/" target="_blank" rel="noopener noreferrer">how to insert a record of account Using apex class in LWC</a></li> <li><a href="https://www.w3web.net/fetch-picklist-values-dynamic-in-lwc/" target="_blank" rel="noopener noreferrer">how to get picklist values dynamically in lwc</a></li> <li><a href="https://www.w3web.net/edit-save-and-remove-rows-dynamically-in-lightning-component/" target="_blank" rel="noopener noreferrer">how to edit/save row dynamically in lightning component</a></li> <li><a href="https://www.w3web.net/update-parent-object-from-child/" target="_blank" rel="noopener noreferrer">update parent field from child using apex trigger</a></li> </ul> </div> <div style="clear:both;"></div> <br/> <div class="youtubeIcon"> <a href="https://www.youtube.com/channel/UCW62gTen2zniILj9xE6LmOg" target="_blank" rel="noopener noreferrer"><img src="https://www.w3web.net/wp-content/uploads/2021/11/youtubeIcon.png" width="25" height="25" style="vertical-align:top; margin-right:10px;"/> <strong>TechW3web:-</strong> To know more, Use this <span style="color: #ff8000; font-weight: bold;">Link</span> </a> </div> </div> </div> <!--End RelatedTopics Section--> </div> </aura:component> |
Create JavaScript Controller →
Step 2:- Create Lightning Component : wrapperCustomObjCmpConroller.js
From Developer Console >> File >> New >> Lightning Component >> JavaScript Controller
wrapperCustomObjCmpConroller.js [JavaScript Controller]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
({ doInit : function(component, event, helper) { var action = component.get("c.appCustomWrapListMthd"); action.setCallback(this, function(response){ var state = response.getState(); if(state=='SUCCESS'){ var result = response.getReturnValue(); component.set('v.wrapListItems',result); } }); $A.enqueueAction(action); }, deleteRowId:function(component,event,helper){ var sfid = event.target.dataset.sfid; var action =component.get('c.delectRecId'); action.setParams({'delRecId':sfid}); action.setCallback(this, function(response){ var state = response.getState(); if(state == 'SUCCESS'){ var result = response.getReturnValue(); var wrapListItems = component.get( "v.wrapListItems" ); component.set( "v.wrapListItems", wrapListItems ); helper.refreshView(component); //alert('record deleted successfully'); var eventToast = $A.get("e.force:showToast"); eventToast.setParams({ "title":'Success', "type":'success', "message":'Record deleted successfully.' }); eventToast.fire(); } }); $A.enqueueAction(action); }, }) |
Create JavaScript Helper →
Step 3:- Create Lightning Component : wrapperCustomObjCmpHelper.js
From Developer Console >> File >> New >> Lightning Component >> JavaScript Helper
wrapperCustomObjCmpHelper.js [JavaScript Helper File]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
({ refreshView : function(component, event, helper) { var action = component.get("c.appCustomWrapListMthd"); action.setCallback(this, function(response){ var state = response.getState(); //alert(state); if(state=='SUCCESS'){ var result = response.getReturnValue(); // alert('result ' + JSON.stringify(result)); component.set('v.wrapListItems',result); } }); $A.enqueueAction(action); } }) |
Create Component Style CSS →
Step 4:- Create Lightning Component Style CSS: wrapperCustomObjCmp.CSS
From Developer Console >> File >> New >> Lightning Component >> Style CSS
wrapperCustomObjCmp.CSS [JavaScript Helper File]
Note:-Static resource custom delete icon
You need to upload a custom delete icon on resource file.
1 2 3 4 5 6 |
.THIS { } .THIS .slds-table thead tr th{background-color:#eee;} .THIS .slds-table thead tr th, .THIS .slds-table tbody tr td {border:1px #dddbda solid; border-collapse: collapse; white-space: normal;} .THIS .delSpan:before{content:''; width:17px; height:17px; display:inline-block; background:url(https://www.w3web.net/wp-content/uploads/2022/01/delete.png) no-repeat left top; background-size:cover; cursor: pointer;} |
Create Apex Class Controller →
Step 5:- Create Apex Class : wrapperCustomObjCtrCmp.apxc
From Developer Console >> File >> New >> Apex Class
wrapperCustomObjCtrCmp.apxc [Apex Class Controller]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
public class wrapperCustomObjCtrCmp { public class wrapperCustomClass{ @AuraEnabled public string studentName; @AuraEnabled public string studentEmail; @AuraEnabled public string studentAddress; @AuraEnabled public Id recStudentId; @AuraEnabled public string regNum; @AuraEnabled public string regStudentName; @AuraEnabled public string regCourseName; @AuraEnabled public date regDateOfReg; public wrapperCustomClass(string studentName, string studentEmail, string studentAddress, Id recStudentId, string regNum,string regStudentName,string regCourseName,date regDateOfReg){ this.studentName = studentName; this.studentEmail = studentEmail; this.studentAddress = studentAddress; this.recStudentId = recStudentId; this.regNum = regNum; this.regStudentName = regStudentName; this.regCourseName = regCourseName; this.regDateOfReg = regDateOfReg; } } @AuraEnabled public static List<wrapperCustomClass> appCustomWrapListMthd(){ List<NewStudent__c> newStudent = new List<NewStudent__c>(); List<Registration__c> newRegistration = new List<Registration__c>(); List<wrapperCustomClass> custWrapObj = new List<wrapperCustomClass>(); List<NewStudent__c> newStudentView =[Select Id, Name, Email__c, Address__c,(Select Id, Name, RegNewStudent__r.Name, RegCourse__r.Name, DateOfRegistration__c From Registrations__r) From NewStudent__c]; newRegistration = [Select Id, Name, RegNewStudent__r.Name, RegCourse__r.Name, DateOfRegistration__c From Registration__c ]; for(NewStudent__c studentObj:newStudentView){ for(Registration__c regObj:studentObj.Registrations__r){ custWrapObj.add(new wrapperCustomClass(studentObj.Name,studentObj.Email__c, studentObj.Address__c, studentObj.Id,regObj.Name,regObj.RegNewStudent__r.Name,regObj.RegCourse__r.Name,regObj.DateOfRegistration__c)); } } return custWrapObj; } @AuraEnabled public static List<NewStudent__c> delectRecId(Id delRecId){ delete [Select Id, (Select Id From Registrations__r Where RegNewStudent__c=:delRecId) From NewStudent__c Where Id=:delRecId]; List<NewStudent__c> listStudent = [Select Id, Name, Email__c, Address__c,(Select Id, Name, RegNewStudent__r.Name, RegCourse__r.Name, DateOfRegistration__c From Registrations__r) From NewStudent__c]; return listStudent; } } |
Further post that would you like to learn in lightning component.
What are the different objects in Salesforce?
Salesforce supports several different types of objects. There are standard objects, custom objects, external objects, platform events, and BigObjects.
How many objects are there in Salesforce?
There are three kinds of Salesforce objects. Standard Objects − The objects already created for you by the Salesforce platform. Custom Objects − These are the objects created by you based on your business processes. External Objects − The objects which you create map to the data stored outside your organization.
What is SOSL in Salesforce?
Salesforce Object Search Language (SOSL) is a Salesforce search language that is used to perform text searches in records. Use SOSL to search fields across multiple standard and custom object records in Salesforce. SOSL is similar to Apache Lucene.
Related Topics | You May Also Like
- Your reaction of the article ▾
Nice post very informative……..
You Can Join Stock Market Classes In IndoreBest NISM & Trading Share Market Technical Analysis
Nice post very informative
Good Ainformative articel
Ow great i am looking for this article. Thank you so much.
Wooww !!! Great Post
5 Internet Approval Site (Do Follow Backlinks)
Nice Blog
hello guys good mornings i wanna tell you that this site are very creative and very helpful content.
Wooww !!! Great Post…
Amazing article, and I have learned a lot