/*********************************************************************************************************** * Name : TempExportHistorySnowflakeBatch * Purpose : Job to create Temp_Export_History__c records for an Export based on the JSON * received from Snowflake **********************************************************************************************************/ public with sharing class TempExportHistorySnowflakeBatch implements Database.Batchable, Database.Stateful, Database.RaisesPlatformEvents { public Export__c exportRecord; public String jsonString; @TestVisible private static final Map EH_ROW_MAPPING = new Map{ 'Created_Date__c' => 'CREATED_DATE', 'Email__c' => 'EMAIL_C', 'First_Name__c' => 'FIRST_NAME_C', 'Last_Name__c' => 'LAST_NAME_C', 'Age_Range__c' => 'AGE_RANGE_C', 'Gender__c' => 'GENDER_C', 'Mobile_Phone__c' => 'MOBILE_PHONE_C', 'Twitter_handle__c' => 'TWITTER_HANDLE_C', 'DSP__c' => 'DSP__c', 'Language__c' => 'PREFERRED_LANGUAGE_C', 'Preferred_Genre__c' => 'PREFERRED_GENRE_C', 'Birthday__c' => 'BIRTHDAY_MM_DD_C', 'Birthdate__c' => 'BIRTHDAY_C', 'Custom_Fields_1__c' => 'CUSTOM_FORM_FIELD_1_C', 'Custom_Fields_2__c' => 'CUSTOM_FORM_FIELD_2_C', 'Custom_Fields_3__c' => 'CUSTOM_FORM_FIELD_3_C', 'Custom_Fields_4__c' => 'CUSTOM_FORM_FIELD_4_C', 'Custom_Fields_5__c' => 'CUSTOM_FORM_FIELD_5_C', 'Custom_Fields_6__c' => 'CUSTOM_FORM_FIELD_6_C', 'Custom_Fields_7__c' => 'CUSTOM_FORM_FIELD_7_C', 'Custom_Fields_8__c' => 'CUSTOM_FORM_FIELD_8_C', 'Custom_Fields_9__c' => 'CUSTOM_FORM_FIELD_9_C', 'Custom_Fields_10__c' => 'CUSTOM_FORM_FIELD_10_C', 'Custom_Fields_11__c' => 'CUSTOM_FORM_FIELD_11_C', 'Custom_Fields_12__c' => 'CUSTOM_FORM_FIELD_12_C', 'Custom_Fields_13__c' => 'CUSTOM_FORM_FIELD_13_C', 'Custom_Fields_14__c' => 'CUSTOM_FORM_FIELD_14_C', 'Custom_Fields_15__c' => 'CUSTOM_FORM_FIELD_15_C', 'Custom_Fields_16__c' => 'CUSTOM_FORM_FIELD_16_C', 'Custom_Fields_17__c' => 'CUSTOM_FORM_FIELD_17_C', 'Custom_Fields_18__c' => 'CUSTOM_FORM_FIELD_18_C', 'Custom_Fields_19__c' => 'CUSTOM_FORM_FIELD_19_C', 'Custom_Fields_20__c' => 'CUSTOM_FORM_FIELD_20_C' }; public TempExportHistorySnowflakeBatch(String jsonString, Id exportId) { exportRecord = [ SELECT Id, Export_Type__c, Postal_Code_1__c, Address__c, Form_ID__c, Exported_By__c, CreatedDate, FormName__c, Form_Tool_Name__c, Form_Name__c, Created_Date__c, Email__c, First_Name__c, Last_Name__c, Age_Range__c, Gender__c, Mobile_Phone__c, Twitter_handle__c, Fan_City__c, Fan_Country__c, Fan_State__c, DSP__c, Language__c, Preferred_Genre__c, Birthday__c, Birthdate__c, Custom_Fields_1__c, Custom_Fields_2__c, Custom_Fields_3__c, Custom_Fields_4__c, Custom_Fields_5__c, Custom_Fields_6__c, Custom_Fields_7__c, Custom_Fields_8__c, Custom_Fields_9__c, Custom_Fields_10__c, Custom_Fields_11__c, Custom_Fields_12__c, Custom_Fields_13__c, Custom_Fields_14__c, Custom_Fields_15__c, Custom_Fields_16__c, Custom_Fields_17__c, Custom_Fields_18__c, Custom_Fields_19__c, Custom_Fields_20__c FROM Export__c WHERE Id = :exportId ]; this.jsonString = jsonString; } public Iterable start(Database.BatchableContext bc) { Map resultMap = (Map) JSON.deserializeUntyped(jsonString); List rows = (List) resultMap.get('rows'); jsonString = null; return rows; } public void execute(Database.BatchableContext bc, List rows) { List recordsToInsert = new List(); for (Object row : rows) { Map rowMap = (Map) row; Temp_Export_History__c tempExpHistory = new Temp_Export_History__c(); tempExpHistory.Form_Response_Id__c = String.valueOf(rowMap.get('ID')); tempExpHistory.Fan_ID__c = String.valueOf(rowMap.get('FAN_ID_C')); for (String field : EH_ROW_MAPPING.keySet()) { if (Boolean.valueOf(exportRecord.get(field))) { tempExpHistory.put(field, String.valueOf(rowMap.get(EH_ROW_MAPPING.get(field)))); } } if (Boolean.valueOf(exportRecord.get('Fan_City__c'))) { tempExpHistory.City__c = String.valueOf(rowMap.get('CITY_C')); } if (Boolean.valueOf(exportRecord.get('Fan_Country__c'))) { tempExpHistory.Country__c = String.valueOf(rowMap.get('COUNTRY_REGION_C')); } if (Boolean.valueOf(exportRecord.get('Fan_State__c'))) { tempExpHistory.State__c = String.valueOf(rowMap.get('STATE_C')); } if (Boolean.valueOf(exportRecord.get('Postal_Code_1__c'))) { tempExpHistory.Postal_Code__c = String.valueOf(rowMap.get('POSTAL_CODE_C')); } if (Boolean.valueOf(exportRecord.get('Address__c'))) { tempExpHistory.Address_1__c = String.valueOf(rowMap.get('ADDRESS_1_C')); tempExpHistory.Address_2__c = String.valueOf(rowMap.get('ADDRESS_2_C')); } if (Boolean.valueOf(exportRecord.get('Form_Name__c'))) { tempExpHistory.Form_Name__c = exportRecord.FormName__c; } tempExpHistory.Export_Type__c = exportRecord.Export_Type__c; tempExpHistory.Export_ID__c = exportRecord.Id; tempExpHistory.Form_ID__c = exportRecord.Form_ID__c; tempExpHistory.Exported_By__c = exportRecord.Exported_By__c; tempExpHistory.Date_Exported__c = exportRecord.CreatedDate.date(); tempExpHistory.Form_Tool_Name__c = exportRecord.Form_Tool_Name__c; recordsToInsert.add(tempExpHistory); } insert recordsToInsert; } public void finish(database.BatchableContext bc) { Export__c updatedExport = [ SELECT Id, Status__c, Is_Ready_To_Download__c, Export_History_Processed__c FROM Export__c WHERE Id = :exportRecord.Id ]; if (updatedExport.Status__c == ExportTrackerHelper.EXPORTING_DATA_STAGE) { updatedExport.Status__c = ExportTrackerHelper.READY_TO_DOWNLOAD_STAGE; } updatedExport.Is_Ready_To_Download__c = true; updatedExport.Export_History_Processed__c = true; update updatedExport; } }