Friday 18 February 2022

How to pass wrapper class object to LWC component from Apex method ?

 Use Case - We need to have validation in apex code if any of the information missed we need to throw error. First Name, Last Name, SSN or DOB etc. Assume we have opportunity Id as parameter, will query Account information and add into a wrapper class.

Public class ResidentDetailRequest {

    @AuraEnabled public Integer FacilityNumber;
    @AuraEnabled public String FacilityName; 
    @AuraEnabled public String LastName;
    @AuraEnabled public String FirstName; 
    @AuraEnabled public String MiddleName;
    @AuraEnabled public String SSN;
    @AuraEnabled public String DOB;
    @AuraEnabled public String Suffix;
}

Main class.
public class ResidentValidationController {
    //public  static ResidentDetailRequest resident;
@AuraEnabled(cacheable=true)
    public static ResidentDetailRequest getResidentFromOpportunity(String opptyId){
        Opportunity oppy = getOpportunityFromId(opptyId);
        ResidentDetailRequest residentTemp;
        if(oppy != null){
        
            residentTemp = new ResidentDetailRequest();
            residentTemp.FirstName = oppy.Patient_Name_pc__r.FirstName;
            residentTemp.LastName = oppy.Patient_Name_pc__r.LastName;
            residentTemp.DOB = String.valueOf(oppy.DOB__c);
            residentTemp.SSN = oppy.SSN_ShieldEncryption__c;
            residentTemp.FacilityName = oppy.Facility_Name__c;
            residentTemp.FacilityNumber = Integer.valueOf(oppy.Facility__r.Facility_Number__c);
            residentTemp.MedicalRecordNumber = oppy.MedicalRecordNumber__c;
            
        }

       
        return residentTemp;
    }
    
  private static Opportunity getOpportunityFromId(Id opptyId){
        return [SELECT Id, DOB__c,Patient_Name_pc__c, Facility_Name__c, Last_Validation__c,                             Facility__r.Facility_Number__c,
                   SSN_ShieldEncryption__c,MedicalRecordNumber__c,
                   Patient_Name_pc__r.FirstName,Patient_Name_pc__r.LastName
                  FROM Opportunity WHERE Id =: opptyId];
    }
}

// LWC component code.
import { LightningElement,api } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import getResident from 
'@salesforce/apex/ResidentValidationController.getResidentFromOpportunity';
@api recordId
connectedCallback() {
        console.log('this is oppy Id',this.recordId);
        if(this.recordId){
            getResident({opptyId:this.recordId})
             .then(res=>{
                this.resident = res;
                
                let missingFields = this.getMissingFields(res);
                console.log('field missed',missingFields);
                if(missingFields){
                    let msg = "Opportunity is missing some required fields ("+missingFields+")";
                    this.showError(msg);
                }
}).catch(err=>{
                    this.showError(err.body.message);
});
}
}
getMissingFields(resident){
        let missing = [];
 
        if(resident.FirstName == null || resident.FirstName.trim() == ''){
            missing.push("First Name");
        }
        if(resident.LastName == null || resident.LastName.trim() == ''){
            missing.push("Last Name");
        }
        if(resident.SSN == null || resident.SSN.trim() == ''){
            missing.push("SSN");
        }
        if(resident.DOB == null || resident.DOB.trim() == ''){
            missing.push("DOB");
        }

        console.log('missing fields', missing);
        if(missing.length > 0){
            return missing.join(', ');
        }else{
            return null;
        }
    }
showError(msg){
        const evt = new ShowToastEvent({
            title: 'Resident Validation Error',
            message: msg,
            variant: "error"
        });
        this.dispatchEvent(evt);
    }

The idea here is just to make one call to apex, get information and throw error
if any information missing combing.

1 comment:

saasguru said...

How to connect wwith you? Please drop a mail at akshay.nair@saasguru.co