public with sharing class OpportunityController {
public static list<wrapperClass> listWrapper;
@AuraEnabled(cacheable=true)
public static List<opportunity> fetchRecordList(){
return [SELECT Id, Name, StageName,Amount,owner.name From Opportunity LIMIT 5];
}
@AuraEnabled
public static void updateRecords(object[] recordList){
system.debug('...data...'+recordList);
list<id> lstId = new list<id>();
list<opportunity> lstopp = new list<opportunity>();
if(!recordList.isEmpty() && recordList.size() > 0){
for(object objRecord : recordList){
String jsonstring = Json.serialize(objRecord);
wrapperClass n = (wrapperClass)JSON.deserialize(jsonstring, wrapperClass.class);
ID vID = String.valueof((n.BidNumber).Right(18));
lstId.add(vID);
}
if(!lstId.isEmpty()){
for(ID vID : lstId){
opportunity objOpp = new opportunity();
objOpp.id = vID;
lstopp.add(objOpp);
}
}
}
delete lstopp;
}
class wrapperClass {
string BidNumber;
}
}
=====================================================================================================================
import { LightningElement,track,wire } from 'lwc';
import {refreshApex} from '@salesforce/apex';
import getAllRecords from '@salesforce/apex/OpportunityController.fetchRecordList';
import updateRecords from '@salesforce/apex/OpportunityController.updateRecords';
/*const COLS=[
{label:'Name',fieldName:'Name', type:'text'},
{label:'Stage',fieldName:'StageName', type:'text'},
{label:'Amount',fieldName:'Amount', type:'ownerName'}
];*/
const columns =[{
label: 'Bid Number',
fieldName: 'BidNumber',
type: 'url',
typeAttributes: {
label: {
fieldName: 'BidNumberLabel'
},
target: '_blank'
},
sortable:true
},{
label: 'Total Bid Amount',
fieldName: 'TotalBidAmount',
type: 'Currency',
sortable:true
}, {
label: 'Owner Name',
fieldName: 'OwnerName',
type: 'text',
sortable:true
}];
export default class DataTableInLwcCheckbox extends LightningElement {
@track data = [];
@track recordList = [];
@track columns = columns;
wiredAccountsResult;
//@track recordCount =0;
@track sortBy;
@track sortDirection;
@wire(getAllRecords)
opp({error, data}) {
this.wiredAccountsResult = data;
if(data) {
let currentData = [];
let url = 'https://'+location.host+'/';
data.forEach((row) => {
let rowData = {};
rowData.TotalBidAmount = row.Amount;
rowData.BidNumber = url+row.Id;
rowData.BidNumberLabel = row.Name;
if (row.Owner) {
rowData.OwnerName = row.Owner.Name;
}
currentData.push(rowData);
});
this.data = currentData;
this.recordList = currentData;
//this.recordCount = currentData.length;
}
else if(error) {
// window.console.log(error);
}
}
@wire(getAllRecords) refreshData;
handleSortdata(event) {
this.sortBy = event.detail.fieldName;
this.sortDirection = event.detail.sortDirection;
this.sortData(event.detail.fieldName, event.detail.sortDirection);
}
sortData(fieldname, direction) {
let parseData = JSON.parse(JSON.stringify(this.data));
let keyValue = (a) => {
return a[fieldname];
};
let isReverse = direction === 'asc' ? 1: -1;
parseData.sort((x, y) => {
x = keyValue(x) ? keyValue(x) : ''; // handling null values
y = keyValue(y) ? keyValue(y) : '';
return isReverse * ((x > y) - (y > x));
});
this.data = parseData;
}
deleteRecord(){
console.log("getSelectedRows => ", this.template.querySelector('lightning-datatable').getSelectedRows());
var selectedRecords = this.template.querySelector("lightning-datatable").getSelectedRows();
console.log('...this.wiredAccountsResult...',this.wiredAccountsResult);
updateRecords({recordList: selectedRecords})
.then(result=>{
eval("$A.get('e.force:refreshView').fire();");
return refreshApex(this.refreshData);
})
.catch(error=>{
alert('Cloud not update'+JSON.stringify(error));
})
}
}
=========================================================================
<template>
<lightning-card title="Opportunity">
<lightning-button variant="brand"
slot="actions"
label="Approve"
onclick={deleteRecord}
>
</lightning-button>
<div class="slds-box">
<lightning-datatable columns={columns}
data={data}
key-field="id"
sorted-by={sortBy}
sorted-direction={sortDirection}
onsort={handleSortdata}></lightning-datatable>
</div>
</lightning-card>
</template>
=========================================================================
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>49.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__HomePage</target>
<target>lightning__RecordPage</target>
</targets>
</LightningComponentBundle>
=========================================================================