Insert multiple Contacts related to that Account Use Database.insert() for bulk records in LWC Salesforce
SCENARIO
- Enter Account Name, Phone, Description
- Enter details for 3 Contacts (simple static fields)
- Click button
- Apex will:
- Create Account
- Insert all Contacts using Database.insert()
- Attach them to Account
Create Apex Class โ AccountContactBulkController.cls
Step 1:- AccountContactBulkController.cls
AccountContactBulkController.cls [Apex Controller]
public WITH sharing class AccountContactBulkController {
@AuraEnabled
public static String createAccountWithContacts(Account acc, List<Contact> contactList) {
try {// Step 1: INSERT Account
INSERT acc;// Step 2: Assign AccountId TO Contacts
FOR(Contact c : contactList){
c.AccountId = acc.Id;
}// Step 3: Bulk INSERT Contacts
DATABASE.SaveResult[] results = DATABASE.insert(contactList, FALSE);
INTEGER successCount = 0;
INTEGER failCount = 0;
FOR(DATABASE.SaveResult sr : results){
IF(sr.isSuccess()){
successCount++;} ELSE {
failCount++;}}RETURN 'Account Created: ' + acc.Name +
' | Contacts Total: ' + contactList.size() +
' | Success: ' + successCount +
' | Failed: ' + failCount;
} catch(Exception e){
throw NEW AuraHandledException(e.getMessage());
}}}
Component Name: accountContactSimple.html โ
Step 2:- LWC HTML โ Input Fields for Multiple Contacts Related to Account
accountContactSimple.html [HTML Component]
<template>
<lightning-card title="Create Account & 3 Contacts">
<div class="slds-m-around_medium">
<!-- ACCOUNT FIELDS -->
<h2>Account Details</h2>
<lightning-INPUT label="Account Name" name="accName" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Phone" name="accPhone" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Description" name="accDesc" onchange={handleChange}></lightning-input>
<br/>
<!-- CONTACT 1 -->
<h2>Contact 1</h2>
<lightning-INPUT label="First Name" name="c1First" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Last Name" name="c1Last" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Email" name="c1Email" TYPE="email" onchange={handleChange}></lightning-input>
<br/>
<!-- CONTACT 2 -->
<h2>Contact 2</h2>
<lightning-INPUT label="First Name" name="c2First" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Last Name" name="c2Last" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Email" name="c2Email" TYPE="email" onchange={handleChange}></lightning-input>
<br/>
<!-- CONTACT 3 -->
<h2>Contact 3</h2>
<lightning-INPUT label="First Name" name="c3First" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Last Name" name="c3Last" onchange={handleChange}></lightning-input>
<lightning-INPUT label="Email" name="c3Email" TYPE="email" onchange={handleChange}></lightning-input>
<br/><br/>
<lightning-button
label="Create Account & Contacts"
variant="brand"
onclick={handleCreate}>
</lightning-button>
</div>
</lightning-card>
</template>
accountContactSimple.js โ
Step 3:- LWC JavaScript
accountContactSimple.js [HTML Component]
import { LightningElement, track } FROM 'lwc';
import createAccountWithContacts FROM '@salesforce/apex/AccountContactBulkController.createAccountWithContacts';
import { ShowToastEvent } FROM 'lightning/platformShowToastEvent';
export DEFAULT class AccountContactSimple extends LightningElement {
@track formData = {};
handleChange(event) {
this.formData[event.target.name] = event.target.value;
}handleCreate() {
// CREATE Account Object
let acc = {
Name: this.formData.accName,
Phone: this.formData.accPhone,
Description: this.formData.accDesc
};// CREATE Contact List
let contactList = [
{FirstName: this.formData.c1First,
LastName: this.formData.c1Last,
Email: this.formData.c1Email
},
{FirstName: this.formData.c2First,
LastName: this.formData.c2Last,
Email: this.formData.c2Email
},
{FirstName: this.formData.c3First,
LastName: this.formData.c3Last,
Email: this.formData.c3Email
}];createAccountWithContacts({ acc: acc, contactList: contactList })
.then(RESULT => {
this.showToast('Success', RESULT, 'success');
})
.catch(error => {
this.showToast('Error', error.body.message, 'error');
});
}showToast(title, message, variant) {
this.dispatchEvent(
NEW ShowToastEvent({
title: title,message: message,variant: variant
})
);}}
accountContactSimple.js-meta.xml โ
Step 4:- LWC accountContactSimple.js-meta.xml
accountContactSimple.js-meta.xml [meta.xml Component]
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>61.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__HomePage</target>
<target>lightning__AppPage</target>
<target>lightning__RecordPage</target>
</targets>
</LightningComponentBundle>
Further post that would you like to learn in Salesforce
What is the difference between @param and RequestParam?
Here, Employee is JPA Entity, and @Param is used to bind the method parameter departmentId to Query parameter deptId. In your case, you are trying to fetch URL Parameter value. @RequestParam need to be used. @RequestParam is used to bind method parameter to web URL request parameter.
Can we have multiple HTML files in LWC?
Although it's possible for a component to render multiple templates, we recommend using the lwc:if|elseif|else directives to render nested templates conditionally instead. Create multiple HTML files in the component bundle.
What is the difference between Slds and Slds 2?
The original SLDS is now called SLDS 1. SLDS 2 is built with a new CSS framework that separates the structure from the visual design using styling hooks. Styling hooks are CSS custom properties that enable deeper customization and theming, allowing you to create unique experiences faster.
Related Topics | You May Also Like
|
๐ Get Free Course โ
๐ Salesforce Administrators ๐ Salesforce Lightning Flow Builder ๐ Salesforce Record Trigger Flow Builder |
๐ Get Free Course โ |



