Skip to main content

Latest Post

Record Types & Page Layout Strategy

  Record Types & Page Layout Strategy 💬 In plain words:   Record Types let one object act like different forms for different teams. Different picklist values, page layouts, and processes — same Account object. Use them for truly different business processes. Not for cosmetic layout changes. 📌 Example:   One Account object, two businesses: 'Retail Customer' record type shows B2C picklist values and layout. 'Enterprise Client' shows contract fields and a different sales process. Same table, two costumes. 🧠 One object, many costumes:   A Record Type is a costume on the same object — different picklists and layouts, same table underneath. Concept Record Types split one object into business variants. •   Each type can carry its own subset of picklist values, its own business process — Lead, Case and Opportunity stages — and its own page layout per profile. •   Lightning has changed the calculus. Dynamic Forms and conditional comp...

LWC Full Dynamic Working Code for Picklist in LWC Datatable Inline Edit

Introduction:

In this blog post, we will explore how to create a Lightning Web Component (LWC) with a dynamic picklist in a datatable and enable inline editing functionality. We will walk through the step-by-step process and provide the complete working code to implement this feature. Let's dive in!

Prerequisites:


Before proceeding, ensure that you have basic knowledge of Salesforce development, Lightning Web Components (LWC), and Apex programming.


Step 1: Create an Apex Controller:


To retrieve the picklist values dynamically, we need to create an Apex controller. The controller will query the metadata to fetch the picklist values for the desired field. Here's an example of an Apex controller:


public with sharing class PicklistController {

    @AuraEnabled(cacheable=true)

    public static Map<String, List<String>> getPicklistValues(String objectName, String fieldName) {

        Map<String, List<String>> picklistValuesMap = new Map<String, List<String>>();

        

        Schema.DescribeFieldResult fieldResult = Schema.getGlobalDescribe().get(objectName).getDescribe().fields.getMap().get(fieldName).getDescribe();

        

        if (fieldResult != null && fieldResult.isAccessible() && fieldResult.isPicklistField()) {

            List<Schema.PicklistEntry> picklistValues = fieldResult.getPicklistValues();

            List<String> values = new List<String>();

            

            for (Schema.PicklistEntry picklistEntry : picklistValues) {

                values.add(picklistEntry.getValue());

            }

            

            picklistValuesMap.put(fieldName, values);

        }

        

        return picklistValuesMap;

    }

}


Step 2: Create the LWC Component:


Create a Lightning Web Component with the name "picklistInDatatable". In the HTML file (picklistInDatatable), add the following code:


<template>

    <lightning-datatable

        data={data}

        columns={columns}

        key-field="Id"

        onsave={handleSave}

        draft-values={draftValues}>

    </lightning-datatable>

</template>


In the JavaScript file (picklistInDatatable.js), add the following code:


import { LightningElement, wire, api, track } from 'lwc';

import { refreshApex } from '@salesforce/apex';

import getPicklistValues from '@salesforce/apex/PicklistController.getPicklistValues';


const actions = [

    { label: 'Edit', name: 'edit' },

    { label: 'Delete', name: 'delete' }

];


const columns = [

    { label: 'Name', fieldName: 'Name', editable: true },

    { label: 'Status', fieldName: 'Status__c', editable: true, type: 'picklist' },

    { type: 'action', typeAttributes: { rowActions: actions } }

];


export default class PicklistInDatatable extends LightningElement {

    @api recordId;

    @track data = [];

    @track columns = columns;

    @track draftValues = [];


    @wire(getPicklistValues, { objectName: 'ObjectName', fieldName: 'Status__c' })

    picklistValues;


    get options() {

        return this.picklistValues.data ? this.picklistValues.data.Status__c : [];

    }


    handleSave(event) {

        const updatedFields = event.detail.draftValues;

        // Perform necessary operations with updatedFields

        refreshApex(this.picklistValues);

        this.draftValues = [];

    }

}


Make sure to replace 'ObjectName' with the desired object name in the '@wire' method.


Step 3: Add the LWC to a Record Page:


To use the "picklistInDatatable" component, you need to add it to a record page. Navigate to the desired record page in Salesforce Setup, and then drag the LWC component onto the page layout.


Conclusion:


Congratulations! You have successfully implemented a dynamic picklist in an LWC datatable with inline editing functionality. By following the steps outlined in this blog post and using the provided working code, you can create powerful and interactive Lightning Web Components in your Salesforce org. Feel free to customize the code further to meet your specific requirements.


Remember to test and adapt the code according to your org's specific needs. Happy coding!