function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
karthic sankar 9karthic sankar 9 

Interesting :: how to write a proper upsert

Hi Experts,

I have below controller which inserts data five times as five different records


public class AddQAAMWeeklyPlanner
{
//Shrinkage Time
    public String ShrinkageTimeFri { get; set; }
    public String ShrinkageTimeThur { get; set; }
    public String ShrinkageTimeWed { get; set; }
    public String ShrinkageTimeTue { get; set; }
    public String ShrinkageTimeMon { get; set; }

      //Otherttime Description add
    public String OthertimeDes_Fri { get; set; }
    public String OthertimeDes_Thur { get; set; }
    public String OthertimeDes_Wed { get; set; }
    public String OthertimeDes_Tue { get; set; }
    public String OthertimeDes_Mon { get; set; }

   public map<String,String> OthertimeDesMap= new map<String, String>();
    public map<String,String> ShrinkageTimeMonMap = new map<String, String>();

public void AddAvailability()
     {
OthertimeDesMap.put('Monday',OthertimeDes_Mon);
        OthertimeDesMap.put('Tuesday',OthertimeDes_Tue);
        OthertimeDesMap.put('Wednesday',OthertimeDes_Wed);
        OthertimeDesMap.put('Thursday',OthertimeDes_Thur);
        OthertimeDesMap.put('Friday',OthertimeDes_Fri);
       
               ShrinkageTimeMonMap.put('Monday', ShrinkageTimeMon);
             ShrinkageTimeMonMap.put('Tuesday', ShrinkageTimeTue);
             ShrinkageTimeMonMap.put('Wednesday', ShrinkageTimeWed);
             ShrinkageTimeMonMap.put('Thursday', ShrinkageTimeThur);
             ShrinkageTimeMonMap.put('Friday', ShrinkageTimeFri);

}

public void saveAllDetails()
        {
AddAvailability();
List<QAAM_Weekly_Planner__c> testList = new List<QAAM_Weekly_Planner__c>();
string enteredDayfromUI = ‘Monday’;
if(enteredDayfromUI.equals('Monday'))
        {

for(String k : ShrinkageTimeMonMap.keySet())
        {
QAAM_Weekly_Planner__c acc= new QAAM_Weekly_Planner__c ();
acc. Shrinkage_time__c = Double.valueOf(ShrinkageTimeMonMap.get(k));
acc. OthertimeDes__c = OthertimeDesMap.get(k);
testList.add(acc);
}
Insert testList;
}


I want to check, it data is already available, I just to update my records rather than doing a new insert. Kindly help.

This query will return me the ID's of primary feilds.

List<QAAM_Weekly_Planner__c> weekValues = [select Week_Start_Date__c, id, Week__C from QAAM_Weekly_Planner__c where Week__C =: week];

if size of weekValues is greater than 0, I have to take all record ID's [to be precise 5 records will be available] and I have to run the method saveAllDetails() with upsert operation. Kindly help me.

Thanks
Karthic Sankar V P
Abhishek Sharma 36Abhishek Sharma 36
You are not following the best practices of apex code. However, please follow the below snippet for saveAllDetails(). This will resolve and the data your issue.
public void saveAllDetails()
        {
AddAvailability();
List<QAAM_Weekly_Planner__c> testList = new List<QAAM_Weekly_Planner__c>();
string enteredDayfromUI = ‘Monday’;

for(String k : ShrinkageTimeMonMap.keySet())
        {
           if(enteredDayfromUI==k)
           {
             QAAM_Weekly_Planner__c acc= new QAAM_Weekly_Planner__c ();
             acc. Shrinkage_time__c = Double.valueOf(ShrinkageTimeMonMap.get(k));
             acc. OthertimeDes__c = OthertimeDesMap.get(k);
             testList.add(acc);
          }
    }
Insert testList;