global without sharing class CampaignMemberUploadFileController { public String staticResource {get; set;} public static String sobjectTypeValue = 'CampaignMember'; public static Map schemaMap = Schema.getGlobalDescribe(); public CampaignMemberUploadFileController(ApexPages.StandardController controller) { staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Document')); } global class Response{ public String message{set;get;} public String status{set;get;} } @RemoteAction global static Response saveFile(String CampaignMemberDatas,String transId){ Response res = new Response(); Savepoint sp = Database.setSavepoint(); try{ System.debug('CampaignMemberDatas:' + JSON.serialize(CampaignMemberDatas)); Schema.SObjectType CampaignMemberSchema = schemaMap.get(sobjectTypeValue); Map fieldAPIToTypeMap = CampaignMemberSchema.getDescribe().fields.getMap(); Map fieldValueMap = (Map)JSON.deserializeUntyped(CampaignMemberDatas); List> datas = (List>)fieldValueMap.get('idList'); List CMList = new List(); List awsIdList = new List(); List sfIdList = new List(); List contentList = new List(); for (Integer i = 0; i < datas.size(); i++) { CampaignMember cm = new CampaignMember(); for(String fieldAPI : datas[i].keySet()){ if(!fieldAPIToTypeMap.containskey(fieldAPI)){ continue; } Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType(); String fieldValue = String.valueOf(datas[i].get(fieldAPI)); if(fieldAPI == 'AWS_Data_Id__c'){ awsIdList.add(fieldValue); } if(String.valueOf(fielddataType)=='DATE'){ cm.put(fieldAPI,(String.isBlank(fieldValue)||String.isEmpty(fieldValue))? null:Date.valueOf(fieldValue.replace('/', '-'))); }else if(String.valueOf(fielddataType)=='DATETIME'){ if(String.isNotBlank(fieldValue)&&fieldValue.contains('T')){ fieldValue = fieldValue.replace('T',' '); cm.put(fieldAPI, Datetime.valueOfGmt(fieldValue)); }else if(String.isNotBlank(fieldValue)) { fieldValue = fieldValue.replace('/', '-') + ':00'; cm.put(fieldAPI, Datetime.valueOf(fieldValue)); }else{ cm.put(fieldAPI, null); } }else if(String.valueof(fielddataType)=='CURRENCY'|| String.valueof(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){ cm.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?null:Decimal.valueOf(fieldValue.replace(',', ''))); } else if(String.valueof(fielddataType)=='BOOLEAN'){ cm.put(fieldAPI, datas[i].get(fieldAPI)); }else { cm.put(fieldAPI,fieldValue); } } CMList.add(cm); } insert CMList; for(CampaignMember cm : CMList){ contentList.add(cm+''); sfIdList.add(cm.id); } //记录日志 res.message = 'success'; res.status = 'success'; PIHelper.saveTransLogBatch(sobjectTypeValue,awsIdList,sfIdList,transId, contentList ,res.status,''); return res; }catch(DmlException e){ Integer index = 0; System.debug('into catch'+e.getMessage()); Database.rollback(sp); res.message = '保存失败,原因:'+ e.getDmlMessage(index); res.status = 'Exception'; PIHelper.saveTransLog(sobjectTypeValue,'','',transId, '' ,res.status,e.getMessage()+e.getStackTraceString()); return res; }catch(Exception e) { System.debug('into catch'+e.getMessage()); Database.rollback(sp); res.message = e.getMessage()+e.getStackTraceString(); res.status = 'Exception'; PIHelper.saveTransLog(sobjectTypeValue,'','',transId, '' ,res.status,res.message); return res; } } }