Author: Neyaj Ansari, Tenetizer Technology
A wrapper class is a class nested within another class that encapsulates a set of variables within a single object. These variables can have similar or different data types.
Illustration:
1. Wrapper Class
public class wrapperClassExample {
public Account accInstance = new Account();
public String status;
public Boolean isSelected;
}
2. Wrapper Class with Constructor
public class wrapperClassExample {
public Account accInstance = new Account();
public String status;
public wrapperClassExample (Account acc, String statusValue) {
this.accInstance = acc;
this.status = statusValue;
}
}
Utilization of Wrapper Class in Apex
A wrapper class assists developers in efficiently organizing and encapsulating data values, incorporating variables of similar or different data types within a single wrapper.
Let’s explore how to pass return values within a wrapper class to a Lightning Web Component and also gain insights into using a wrapper class in integration scenarios.
1. Employing Wrapper Class in Lightning Web Component (LWC)
When employing a wrapper class to transmit values to a Lightning Web Component (LWC), it’s essential to annotate the wrapper class variables with ‘@AuraEnabled’.
Class : AccountDetails
public class AccountDetails {
@AuraEnabled(cahceable=true)
Public static List<accWrapper> getAccDetails() {
List<accWrapper> accWrapperList = new List<accWrapper>();
List<Account> accList = [SELECT Id, name, status
FROM Account
LIMIT 5];
for (Account acc : accList) {
accWrapperList.add(new accWrapper(acc, acc.status));
}
}
public class accWrapper {
@AuraEnabled
public Account accInstance = new Account();
@AuraEnabled
public String status;
public accWrapper (Account acc, String statusValue) {
this.accInstance = acc;
this.status = statusValue;
}
}
}
LWC : displayComp.html
<template>
<lightning-card title=”LWC”>
<template if:true={accWrapperList.data}>
<template for:each={accWrapperList.data} for:item="wrap">
Account Name : {wrap.accInstance.Name}
Status : {wrap.status}
</template>
</template>
</lightning-card>
</template>
LWC : displayComp.js
LWC component used to get data from Apex class.
import { LightningElement,wire } from 'lwc';
import getAccountDetails from '@salesforce/apex/AccountDetails.getAccDetails;
export default class displayComp extends LightningElement {
@wire(getAccDetails) accWrapperList;
}
2. Wrapper Class in Salesforce Integration
In Salesforce Integration, we receive the data in JSON format. So, we use a wrapper class to convert the JSON into Apex variables.
{
"accountList": [
{
"totCost": 2.5,
"ProdList": [
{
"QualityRate": 2,
"Name": "Product-1"
},
{
"QualityRate": 3,
"Name": "Product-1.1"
}
],
"accountNumber": 1
},
{
"totCost": 1.5,
"ProdList": [
{
"QualityRate": 1,
"Name": "Product-2"
}
],
"accountNumber": 2
}
]
}
A wrapper class is used to convert the above JSON into Apex variables.
public class AccountWrapper{
public cls_accountList[] accountList;
class cls_accountList {
public Double totCost; //2.5
public cls_ProdList[] ProdList;
public Integer accountNumber; //1
}
class cls_ProdList {
public Integer QualityRate; //3
public String Name; //Product-1.1
}
}
2.1 JSON Deserialization
To convert JSON into an accountWrapper instance, we can use JSON.deserialize().
Http responseVariable = http.send(request); String responseBody = responseVariable .getBody(); AccountWrapper accWrap = (AccountWrapper) JSON.deserialize(responseBody , AccountWrapper.class);
2.2 JSON Serialization
To convert accountWrapper instances into JSON, we can use JSON.serialize().
String jsonValueString = JSON.serialize(accWrap);
The ‘jsonString’ is employed to transmit data as the request body in a REST API
