Use updateRecord in LWC Salesforce

by Rijwan Mohmmed
use-updaterecord-in-lwc-salesforce

Hello folks, today we will discuss How to use updateRecord in LWC Salesforce. We use this for updates a record. Provide the record Id of the record to update in recordInput. Here we will create a simple form in which there will be two fields. A update for the call method for updating the account record.

Also check this: Navigate to Aura Component from LWC

Key Highlights:

  • Import updateRecord.
  • We don’t use the Apex method here.
  • These are UI APIs of LWC.

Syntax :

import { updateRecord } from 'lightning/uiRecordApi';
updateRecord(recordInput: Record, clientOptions?: Object): Promise<Record>

Code :

AccountDataController.cls :

public class AccountDataController {

    @AuraEnabled(cacheable=true)
    public static Account getSingleAccount() {
        return [
            SELECT Id, Name, Phone, Rating, AccountNumber
            FROM Account
            LIMIT 1
        ];
    }
}

updateRecordLWC.HTML :

<template>
	<lightning-card title="Use updateRecord in LWC Salesforce/ LDS Update Record" icon-name="standard:record">
		<template if:true={showLoading}>
			<lightning-spinner alternative-text="Loading" size="medium" class="spinnerClass"></lightning-spinner>
		</template>
		<div class="slds-m-around_medium">
			<template if:true={account.data}>
				<lightning-input label="Id" disabled value={account.data.Id}></lightning-input>
				<lightning-input label="Name" value={account.data.Name} data-field="Name" onchange={handleChange}
					class="slds-m-bottom_x-small" required></lightning-input>
				<lightning-input label="Rating" value={account.data.Rating} data-field="Rating" onchange={handleChange}
					class="slds-m-bottom_x-small"></lightning-input>
				<lightning-button label="Update Account" variant="brand" onclick={handleUpdate} disabled={disabled}>
				</lightning-button>
			</template>
			<template if:true={account.error}>
				<!-- handle Apex error -->
			</template>
		</div>
	</lightning-card>
</template>

updateRecordLWC.JS:

import { LightningElement, track, wire } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { updateRecord } from 'lightning/uiRecordApi';
import { refreshApex } from '@salesforce/apex';
import getSingleAccount from '@salesforce/apex/AccountDataController.getSingleAccount';
import NAME_FIELD from '@salesforce/schema/Account.Name';
import RATING_FIELD from '@salesforce/schema/Account.Rating';
import ID_FIELD from '@salesforce/schema/Account.Id';

export default class UpdateRecordLWC extends LightningElement {
    disabled = false;
    @track error;
    @track showLoading = false;

    @wire(getSingleAccount)
    account;

    handleChange(event) {
        // Display field-level errors and disable button if a name field is empty.
        if (!event.target.value) {
            event.target.reportValidity();
            this.disabled = true;
        }
        else {
            this.disabled = false;
        }
    }

    handleUpdate() {
        
        const allValid = [...this.template.querySelectorAll('lightning-input')]
            .reduce((validSoFar, inputFields) => {
                inputFields.reportValidity();
                return validSoFar && inputFields.checkValidity();
            }, true);

        if (allValid) {
            this.showLoading = true;
            // Create the recordInput object
            const fields = {};
            fields[ID_FIELD.fieldApiName] = this.account.data.Id;
            fields[NAME_FIELD.fieldApiName] = this.template.querySelector("[data-field='Name']").value;
            fields[RATING_FIELD.fieldApiName] = this.template.querySelector("[data-field='Rating']").value;

            const recordInput = { fields };
            console.log(recordInput);

            updateRecord(recordInput)
                .then(() => {
                    this.showToast('Success!!', 'Account updated successfully!!', 'success', 'dismissable');
                    // Display fresh data in the form
                    this.showLoading = false;
                    return refreshApex(this.account);
                })
                .catch(error => {
                    this.showLoading = false;
                    this.showToast('Error!!', error.body.message, 'error', 'dismissable');
                });
        }
        else {
            // The form is not valid
            this.showToast('Error!!', 'Check your input and try again.', 'error', 'dismissable');
        }
        
    }

    showToast(title, message, variant, mode) {
        const evt = new ShowToastEvent({
            title: title,
            message: message,
            variant: variant,
            mode: mode
        });
        this.dispatchEvent(evt);
    }
}

updateRecordLWC.JS-meta.xml:

<?xml version="1.0"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
	<apiVersion>55.0</apiVersion>
	<isExposed>true</isExposed>
	<targets>
		<target>lightning__HomePage</target>
	</targets>
</LightningComponentBundle>

Output :

use-updaterecord-in-lwc-salesforce-techdicer
use-updaterecord-in-lwc-salesforce-techdicer

Reference:

1. updateRecord

What’s your Reaction?
+1
3
+1
0
+1
0
+1
0
+1
2
+1
0

You may also like

Leave a Comment