1public with sharing class ContactController{23 @AuraEnabled(cacheable=true)4 public static List<Contact>getContacts(String accId){5 return[6 SELECT AccountId, Id, FirstName, LastName, Title, Phone, Email7 FROM Contact8 WHERE AccountId = :accId9 WITH SECURITY_ENFORCED10];11}12}
1 行のデータは 1 つのレコードに対応し、各列にはそのレコードの項目の 1 つの値が表示されます。インライン編集を有効にするには、列定義で editable: true を設定することで編集できる項目を指定します。この例では、First Name 項目と Last Name 項目は編集可能です。取引先責任者の名前項目は複合項目であるため、First Name 項目と Last Name 項目を使用する必要があります。
1// apexContactsForAccount.js23import{LightningElement, wire, api}from "lwc";4import getContacts from "@salesforce/apex/ContactController.getContactList";5import{refreshApex}from "@salesforce/apex";6import{updateRecord}from "lightning/uiRecordApi";78import{ShowToastEvent}from "lightning/platformShowToastEvent";9import FIRSTNAME_FIELD from "@salesforce/schema/Contact.FirstName";10import LASTNAME_FIELD from "@salesforce/schema/Contact.LastName";11import TITLE_FIELD from "@salesforce/schema/Contact.Title";12import PHONE_FIELD from "@salesforce/schema/Contact.Phone";13import EMAIL_FIELD from "@salesforce/schema/Contact.Email";14import ID_FIELD from "@salesforce/schema/Contact.Id";1516const COLS = [17{18 label: "First Name",19 fieldName: FIRSTNAME_FIELD.fieldApiName,20 editable: true,21},22{23 label: "Last Name",24 fieldName: LASTNAME_FIELD.fieldApiName,25 editable: true,26},27{label: "Title", fieldName: TITLE_FIELD.fieldApiName, editable: true},28{29 label: "Phone",30 fieldName: PHONE_FIELD.fieldApiName,31 type: "phone",32 editable: true,33},34{35 label: "Email",36 fieldName: EMAIL_FIELD.fieldApiName,37 type: "email",38 editable: true,39},40];41export default class DatatableInlineEditWithUiApi extends LightningElement{42 @api recordId;43 columns = COLS;44 draftValues = [];4546 @wire(getContacts, {accId: "$recordId"})47 contacts;4849 async handleSave(event){50 // Convert datatable draft values into record objects51 const records = event.detail.draftValues.slice().map((draftValue)=>{52 const fields = Object.assign({}, draftValue);53 return{fields};54});5556 // Clear all datatable draft values57 this.draftValues = [];5859 try{60 // Update all records in parallel thanks to the UI API61 const recordUpdatePromises = records.map((record)=> updateRecord(record));62 await Promise.all(recordUpdatePromises);6364 // Report success with a toast65 this.dispatchEvent(66 new ShowToastEvent({67 title: "Success",68 message: "Contacts updated",69 variant: "success",70}),71);7273 // Display fresh data in the datatable74 await refreshApex(this.contacts);75}catch(error){76 this.dispatchEvent(77 new ShowToastEvent({78 title: "Error updating or reloading contacts",79 message: error.body.message,80 variant: "error",81}),82);83}84}85}
@wire(getContacts) は、データを contacts.data に、レコード ID を accId にプロビジョニングします。
項目を編集すると、編集後の項目値とレコード Id がオブジェクトの配列として event.detail.draftValues に格納されます。