Showing posts with label lwc wrapper class example for account and contact insertion. Show all posts
Showing posts with label lwc wrapper class example for account and contact insertion. Show all posts

Monday, May 4, 2020

Creating a wrapper class to create Account and Contact using lwc

Creating a wrapper class to create Account and Contact using lwc

I'm assuming there are no other mandatory fields on Account other than Account Name, on contact also firstName and LastName are required, all other fields are not mandatory.

we can do this Account Creation in multiple ways, in below explaple I'm explaining how can we create Account Record first and how can we associate Account with contact using a wrapper class.

Note: Same requirement we can do without using wrapper class also.

accountContactCreationWrapper.html

<template>
    <lightning-card title="Wrapper Example" icon-name="custom:custom14">
        <div class="slds-m-around_medium">
            <lightning-input type="text" label="Account Name" value={accountName} onchange={handleAccountName}>
            </lightning-input>
            <lightning-input type="text" label="First Name" value={firstName} onchange={handlefChange}>
            </lightning-input>
            <lightning-input type="text" label="Last Name" value={lastName} onchange={handlelChange}></lightning-input>
            <br />
            <lightning-button label="Save" icon-name="utility:save" onclick={handleSave}></lightning-button>
            &nbsp;&nbsp;
            <lightning-button label="Cancel" icon-name="utility:clear" onclick={handleCancel}></lightning-button>
        </div>
    </lightning-card>
</template>

accountContactCreationWrapper.js

import { LightningElement, track } from "lwc";
import { ShowToastEvent } from "lightning/platformShowToastEvent";
import wrapperExa from "@salesforce/apex/AccountContactCreationWrapper.insertAccAndCon";
import saveContact from '@salesforce/apex/AccountContactCreationWrapper.ContactCreateion';

export default class AccountContactCreationWrapper extends LightningElement {
  @track accountName = "";
  @track firstName = "";
  @track lastName = "";

  @track record = {
    accName: this.accountName,
    firstName: this.firstName,
    lastName: this.lastName,
  };

  handleAccountName(event) {
    this.record.accName = event.target.value;
  }

  handlefChange(event) {
    this.record.firstName = event.target.value;
  }

  handlelChange(event) {
    this.record.lastName = event.target.value;
  }

  handleSave(event) {
    wrapperExa({ wrp: this.record })
      .then((result) => {  
        console.log("result--->>>" + JSON.stringify(result));
        if(result != "error"){     
          saveContact({conWrap: this.record, accountId: result })
          .then(results =>{
              const contoast = new ShowToastEvent({
                title: "success",
                message: "Contact Created Successfully",
                variant: "success",
              });
              this.dispatchEvent(contoast);
          })
          .catch(error => {
              const conerrortoast = new ShowToastEvent({
                title: "error",
                message: "Error Creating Contact!",
                variant: "error",
              });
              this.dispatchEvent(conerrortoast);
          });
          const toast = new ShowToastEvent({
            title: "success",
            message:  "Record Created Successfully",
            variant: "success",
          });
          this.dispatchEvent(toast);
        }else if(result === "error"){
          const toast = new ShowToastEvent({
            title: "Error",
            message:  "Unable to Create Account Record!",
            variant: "error",
          });
          this.dispatchEvent(toast);
        }      
      })
      .catch((error) => {
        console.log("error--->>>" + JSON.stringify(error));
        const toast = new ShowToastEvent({
          title: "error",
          message: "Failed to insest record",
          variant: "error",
        });
        this.dispatchEvent(toast);
      });
  }

  handleCancel(event) {
    this.template.querySelector('lightning-input').reset();
  }

}

accountContactCreationWrapper.js-meta.xml

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>48.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__AppPage</target>
        <target>lightning__RecordPage</target>
        <target>lightning__HomePage</target>
    </targets>

</LightningComponentBundle>

AccountContactCreationWrapper.cls

public class AccountContactCreationWrapper {
    
    @AuraEnabled
    public static String insertAccAndCon(WrapperCls wrp){
        WrapperCls wt = new WrapperCls();
        wt = wrp;

        Account ac = new Account();
        ac.Name = wt.accName;
        try{
            insert ac;
        }catch(Exception ex){}

        if(ac.Id!=null){
            return ac.Id;
        }            
        else {
            return 'error';   
        }    
    }

    @AuraEnabled
    public static string ContactCreateion(WrapperCls conWrap, String accountId){
        WrapperCls wt = new WrapperCls();
        wt = conWrap;

        Contact con = new Contact();
        con.firstName = wt.firstName;
        con.lastName = wt.lastName;
        if(!String.isBlank(accountId)){
            con.AccountId = accountId;
        }

        try {
            insert con;
        } catch (Exception ex) {}

        if(con.Id!=null){
            return con.Id;
        }else {
            return 'error';
        }
    }

    public class WrapperCls{

        @AuraEnabled
        public String firstName{get;set;}

        @AuraEnabled
        public String lastName{get;set;}

        @AuraEnabled
        public String accName{get;set;}
    }

}