/* *@Description: *@Author: Dennis Rodman *@Date: 2022-03-10 10:26:47 */ global without sharing class NewRepairController { public String layoutSectionsStr { get; set; } //for dynamic add readonly attribute public List layoutSections { get; set; } public String awsToken { get; set; } public static Map schemaMap = Schema.getGlobalDescribe(); public static String sobjectTypeValue = 'Repair__c'; public Boolean isNewMode { get; set; } public String rtTypeId { get; set; } public String AWSDataId { get; set; } public String DecryptAWSDataId { get; set; } public String ContactAWSDataId { get; set; } public List encryptedAPIList { get; set; } public String staticResource { get; set; } public String staticResourceContact { get; set; } public String staticResourceAddress { get; set; } public String requiredFieldAPIListStr { get; set; } public String fieldAPIToLabelMapStr { get; set; } public String Input_Required_Field_Msg { get; set; } public String PIPL_Name_Label { get; set; } public String PIPL_Input_Account_Error_Msg { get; set; } public String sobjectPrefix { get; set; } public String sobjecttypeForFrontEnd { get; set; } public String sobjectId { get; set; } public String workLocationSelect { get; set; } public String RepairSubOrderAWSDataId { get; set; } public String staticResourceRepairSubOrder { get; set; } public String VLookUpFieldsJson { get; private set; } //zhj MEBG新方案改造 2022-11-29 start public String staticResourceV2 { get; set; } //zhj MEBG新方案改造 2022-11-29 end public NewRepairController(ApexPages.StandardController controller) { //sobjectId = [SELECT CustomObjectId,CustomObjectName FROM CustomObjectUserLicenseMetrics where CustomObjectName ='Repair' limit 1].CustomObjectId; sobjectId = [SELECT id, QualifiedApiName, DurableId, IsCustomizable FROM EntityDefinition WHERE QualifiedApiName = 'Repair__c'] .DurableId; isNewMode = true; Input_Required_Field_Msg = Label.Input_Required_Field_Msg; PIPL_Name_Label = Label.PIPL_Name_Label; PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg; sobjecttypeForFrontEnd = sobjectTypeValue; //获取所有字段 List fieldList = new List(Schema.getGlobalDescribe().get('Repair__c').getDescribe().fields.getMap().keyset()); // Add fields to controller. This is to avoid the SOQL error in visualforce page if (!Test.isRunningTest()) { controller.addFields(fieldList); } SObject obj = controller.getRecord(); if (obj.Id != null) { //更新 isNewMode = false; Repair__c repairData = [ SELECT Id, RecordTypeId, AWS_Data_Id__c, Address_AWS_Data_Id__c, Contact_AWS_Data_Id__c, Address_Contacts_Encrypt__c, Address_Contacts_Name_Encrypt__c, Address_Telephone_Encrypt__c, Address_ZipCode_Encrypt__c, Detailed_Address_Encrypt__c FROM Repair__c WHERE id = :obj.Id ]; rtTypeId = repairData.RecordTypeId; AWSDataId = repairData.AWS_Data_Id__c; DecryptAWSDataId = String.valueOf(repairData.Address_AWS_Data_Id__c); ContactAWSDataId = String.valueOf(repairData.Contact_AWS_Data_Id__c); } else { //新建 // //修理品返送地 // if(mso.containsKey('00N10000006P6SM')){ // controller.getRecord().put('SalesOfficeCode_selection__c',mso.get('00N10000006P6SM')); // } // if(mso.containsKey('00N10000002FH86')){ // //controller.getRecord().put('On_site_repair__c',mso.get('00N10000002FH86')); // //Repair_Source__c // controller.getRecord().put('Repair_Source__c',mso.get('00N10000002FH86')); // } // if(mso.containsKey('00N10000006P6Rn')){ // controller.getRecord().put('work_location_select__c',mso.get('00N10000006P6Rn')); // workLocationSelect = mso.get('00N10000006P6Rn'); // System.debug('workLocationSelect = ' + workLocationSelect); // } // //问题内容描述00N10000002Dx6I // if(mso.containsKey('00N10000002Dx6I')){ // controller.getRecord().put('Repair_Detail__c',mso.get('00N10000002Dx6I')); // } // //问题联络收到日00N10000008rsVQ // if(mso.containsKey('00N10000008rsVQ')){ // String o = mso.get('00N10000008rsVQ'); // controller.getRecord().put('DateReceiptQuestions__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //是否有死亡、伤害、感染00N10000008rsW7 // if(mso.containsKey('00N10000008rsW7')){ // controller.getRecord().put('ifDeadHurt__c',mso.get('00N10000008rsW7')); // } // //是否和这次的产品故障有关00N10000008rsVw // if(mso.containsKey('00N10000008rsVw')){ // controller.getRecord().put('ProductFailureRelated__c',mso.get('00N10000008rsVw')); // } // //医院有没有向政府机关报告不良事件或疑似不良事件00N10000008rsW2 // if(mso.containsKey('00N10000008rsW2')){ // controller.getRecord().put('ReportAdverseEvents__c',mso.get('00N10000008rsW2')); // } // //做的是哪个项目00N10000008rsW6 // if(mso.containsKey('00N10000008rsW6')){ // controller.getRecord().put('WhatProject__c',mso.get('00N10000008rsW6')); // } // //手术/检查名称00N10000008rsVk // if(mso.containsKey('00N10000008rsVk')){ // controller.getRecord().put('OperationOrExaminationName__c',mso.get('00N10000008rsVk')); // } // //是否有发生断裂或脱落00N10000008rsVN // if(mso.containsKey('00N10000008rsVN')){ // controller.getRecord().put('BreakORFallOff__c',mso.get('00N10000008rsVN')); // } // //配套使用产品00N10000008rsW4 // if(mso.containsKey('00N10000008rsW4')){ // controller.getRecord().put('SupportingProducts__c',mso.get('00N10000008rsW4')); // } // //发现故障后,医院对患者的处理情况00N10000008rsVL // if(mso.containsKey('00N10000008rsVL')){ // controller.getRecord().put('AfterFailureInformation__c',mso.get('00N10000008rsVL')); // } // //发现故障现象后,有延误15分钟以上的手术实施的情况发生吗00N10000008rsVR // if(mso.containsKey('00N10000008rsVR')){ // controller.getRecord().put('Delay15Min__c',mso.get('00N10000008rsVR')); // } // //信息是从医院的谁那里得到的00N10000008rsVZ // if(mso.containsKey('00N10000008rsVZ')){ // controller.getRecord().put('InformationFrom__c',mso.get('00N10000008rsVZ')); // } // //在医院,故障发生的频率是多少00N10000008rsVT // if(mso.containsKey('00N10000008rsVT')){ // controller.getRecord().put('FailureQInHospital__c',mso.get('00N10000008rsVT')); // } // //问题发生时间情况00N10000008rsVv // if(mso.containsKey('00N10000008rsVv')){ // controller.getRecord().put('ProblemOccurred__c',mso.get('00N10000008rsVv')); // } // //是否用该产品完成了手术/检查00N10000008rsW5 // if(mso.containsKey('00N10000008rsW5')){ // if(mso.get('00N10000008rsW5') != 'undefined'){ // controller.getRecord().put('UseFailProductFinish__c',mso.get('00N10000008rsW5')); // } // } // //故障发生日00N10000002Dx5y // if(mso.containsKey('00N10000002Dx5y')){ // String o = mso.get('00N10000002Dx5y'); // controller.getRecord().put('Failure_Occurrence_Date__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //修理委托者(FSE)CF00N10000002EMHw_lkid 问题 // if(mso.containsKey('CF00N10000002EMHw_lkid')){ // controller.getRecord().put('Incharge_Staff__c',mso.get('CF00N10000002EMHw_lkid')); // } // //原修理受付番号00N1m000005gt1l 问题 // if(mso.containsKey('00N1m000005gt1l')){ // controller.getRecord().put('Old_Name__c',mso.get('00N1m000005gt1l')); // } // //设备型号CF00N10000002Dx1X_lkid // if(mso.containsKey('CF00N10000002Dx1X_lkid')){ // controller.getRecord().put('Delivered_Product__c',mso.get('CF00N10000002Dx1X_lkid')); // } // //维修委托书号码00N10000006P1dw // if(mso.containsKey('00N10000006P1dw')){ // controller.getRecord().put('PaperRepairRequestNo__c',mso.get('00N10000006P1dw')); // } // //市场多年保修 有偿/无偿修理00N10000008rG4p // if(mso.containsKey('00N10000008rG4p')){ // controller.getRecord().put('RepairCostType__c',mso.get('00N10000008rG4p')); // } // //服务方式00N10000002F6dW // if(mso.containsKey('00N10000002F6dW')){ // controller.getRecord().put('On_site_repair__c',mso.get('00N10000002F6dW')); // } // //返品方式00N1m000004QmcJ 问题 // if(mso.containsKey('00N1m000004QmcJ')){ // controller.getRecord().put('Returns_Product_way__c',mso.get('00N1m000004QmcJ')); // } // //问题内容描述(图片)00N10000008rsVuEAI 问题 // if(mso.containsKey('00N10000008rsVuEAI')){ // controller.getRecord().put('ProblemDescription__c',mso.get('00N10000008rsVuEAI')); // } // //如果是测试环境 问题 // Boolean isTest = NFMUtil.isSandbox(); // //报修人00N1m0000054ufW // String RepairApplicant = isTest==true?'00N1m0000054ufW':'00N10000009H1rQ'; // if(mso.containsKey(RepairApplicant)){ // controller.getRecord().put('RepairApplicant__c',mso.get(RepairApplicant)); // } // //报修人医院00N1m0000054ufU // String RepairApplicantHospital = isTest==true?'00N1m0000054ufU':'00N10000009H1rP'; // if(mso.containsKey(RepairApplicantHospital)){ // controller.getRecord().put('RepairApplicantHospital__c',mso.get(RepairApplicantHospital)); // } // //报修人科室00N1m0000054ufT // String RepairApplicantDepartment = isTest==true?'00N1m0000054ufT':'00N10000009H1rO'; // if(mso.containsKey(RepairApplicantDepartment)){ // controller.getRecord().put('RepairApplicantDepartment__c',mso.get(RepairApplicantDepartment)); // } // //报修子单CF00N1m0000054ufZ_lkid // String RepairSubOrder = isTest==true?'CF00N1m0000054ufZ_lkid':'CF00N10000009H1rR_lkid'; // if(mso.containsKey(RepairSubOrder)){ // controller.getRecord().put('RepairSubOrder__c',mso.get(RepairSubOrder)); // //查询AWSDataId // List rso = [select AWS_Data_Id__c from RepairSubOrder__c where Id=:mso.get(RepairSubOrder)]; // if(rso.size() > 0){ // RepairSubOrderAWSDataId = rso[0].AWS_Data_Id__c; // } // } // //报修发起日 // String RepairTime = isTest==true?'00N1m0000054ufa':'00N10000009H1rS'; // if(mso.containsKey(RepairTime)){ // String o = mso.get(RepairTime); // controller.getRecord().put('RepairTime__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //报修单受理日ReceiverTime__c // String ReceiverTime = isTest==true?'00N1m0000054ufS':'00N10000009H1rN'; // if(mso.containsKey(ReceiverTime)){ // String o = mso.get(ReceiverTime); // controller.getRecord().put('ReceiverTime__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //计划上门日 // String PlannedVisitDay = isTest==true?'00N1m000005SRiF':'00N10000009H1rM'; // if(mso.containsKey(PlannedVisitDay)){ // String o = mso.get(PlannedVisitDay); // controller.getRecord().put('PlannedVisitDay__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //一次上门日 // String ActualVisitDateFirst = isTest==true?'00N1m000005SRiK':'00N10000009H1r6'; // if(mso.containsKey(ActualVisitDateFirst)){ // String o = mso.get(ActualVisitDateFirst); // controller.getRecord().put('ActualVisitDateFirst__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //二次上门日 // String ActualVisitDateSecond = isTest==true?'00N1m000005SRiP':'00N10000009H1r7'; // if(mso.containsKey(ActualVisitDateSecond)){ // String o = mso.get(ActualVisitDateSecond); // controller.getRecord().put('ActualVisitDateSecond__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //三次上门日 // String ActualVisitDateThird = isTest==true?'00N1m000005SRiU':'00N10000009H1r8'; // if(mso.containsKey(ActualVisitDateThird)){ // String o = mso.get(ActualVisitDateThird); // controller.getRecord().put('ActualVisitDateThird__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //移动端申请修理日 // String SubOrderCompleteDate = isTest==true?'00N1m000005SRmg':'00N10000009H1ri'; // if(mso.containsKey(SubOrderCompleteDate)){ // String o = mso.get(SubOrderCompleteDate); // controller.getRecord().put('SubOrderCompleteDate__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //报修单处理完成日 // String SubOrderCreatedDate = isTest==true?'00N1m000005SRmW':'00N10000009H1rj'; // if(mso.containsKey(SubOrderCreatedDate)){ // String o = mso.get(SubOrderCreatedDate); // controller.getRecord().put('SubOrderCreatedDate__c',(String.isBlank(o)||String.isEmpty(o))? null:Date.valueOf(o.replace('/', '-'))); // } // //送修物流方式00N1m0000054ufE // if(mso.containsKey('00N1m0000054ufE')){ // controller.getRecord().put('DeliveryLogisticsMode__c',mso.get('00N1m0000054ufE')); // } // //送修物流最新状态00N1m0000054ufk // if(mso.containsKey('00N1m0000054ufk')){ // controller.getRecord().put('LogisticsLatestStatus__c',mso.get('00N1m0000054ufk')); // } // //送修物流单号00N1m0000054ufF // if(mso.containsKey('00N1m0000054ufF')){ // controller.getRecord().put('DeliveryLogisticsNo__c',mso.get('00N1m0000054ufF')); // } // //送修物流信息备注00N1m0000054ufD // if(mso.containsKey('00N1m0000054ufD')){ // controller.getRecord().put('DeliveryLogisticsAnnotation__c',mso.get('00N1m0000054ufD')); // } // //超时报告的理由00N10000008rsVS // if(mso.containsKey('00N10000008rsVS')){ // controller.getRecord().put('DelayReportReason__c',mso.get('00N10000008rsVS')); // } Map mso = ApexPages.currentPage().getParameters(); system.debug('mso=' + mso); AssignValueFromUrl(mso, controller.getRecord()); //通过id查 问题 //PIPL zhj 2022-11-11 start //从报修子单过来00N10000009H1rR if (mso.containsKey('CF00N10000009H1rR_lkid')) { String repairSubOrderId = mso.get('CF00N10000009H1rR_lkid'); System.debug('repairSubOrderId = ' + repairSubOrderId); //查询AWSDataId List rso = [SELECT AWS_Data_Id__c FROM RepairSubOrder__c WHERE Id = :repairSubOrderId]; if (rso.size() > 0) { RepairSubOrderAWSDataId = rso[0].AWS_Data_Id__c; } } //PIPL zhj 2022-11-11 end List rc = new List(); system.debug('retURL=' + mso.containsKey('retURL')); if (mso.containsKey('retURL')) { String RepairId = mso.get('retURL').substring(1); System.debug('RepairId = ' + RepairId); rc = [ SELECT Hospital__c, Department_Class__c, Account__c, Dealer__c, Incharge_Staff_Contact__c, Incharge_Staff__c, RepairSubOrder__c, On_Call_ID__c, QIS_ID__c, InsReport__c, Rental_Apply_Equipment_Set_Detail__c FROM Repair__c WHERE id = :RepairId ]; System.debug('rc = ' + rc); if (rc.size() > 0) { //医院 controller.getRecord().put('Hospital__c', rc[0].Hospital__c); //战略科室分类 controller.getRecord().put('Department_Class__c', rc[0].Department_Class__c); //科室 controller.getRecord().put('Account__c', rc[0].Account__c); //经销商名 controller.getRecord().put('Dealer__c', rc[0].Dealer__c); //修理委托者(员工) controller.getRecord().put('Incharge_Staff_Contact__c', rc[0].Incharge_Staff_Contact__c); //修理委托者(FSE) controller.getRecord().put('Incharge_Staff__c', rc[0].Incharge_Staff__c); //报修子单RepairSubOrder__c controller.getRecord().put('RepairSubOrder__c', rc[0].RepairSubOrder__c); //查询AWSDataId List rso = [SELECT AWS_Data_Id__c FROM RepairSubOrder__c WHERE Id = :rc[0].RepairSubOrder__c]; if (rso.size() > 0) { RepairSubOrderAWSDataId = rso[0].AWS_Data_Id__c; } //On-Call号码On_Call_ID__c controller.getRecord().put('On_Call_ID__c', rc[0].On_Call_ID__c); //QIS号码QIS_ID__c controller.getRecord().put('QIS_ID__c', rc[0].QIS_ID__c); //点检报告书InsReport__c controller.getRecord().put('InsReport__c', rc[0].InsReport__c); //借出备品配套一览明细Rental_Apply_Equipment_Set_Detail__c controller.getRecord().put('Rental_Apply_Equipment_Set_Detail__c', rc[0].Rental_Apply_Equipment_Set_Detail__c); } } rtTypeId = ApexPages.currentPage().getParameters().get('RecordType'); if (String.isBlank(rtTypeId) || String.isEmpty(rtTypeId)) { List rtList = new List( [SELECT Id, DeveloperName FROM RecordType WHERE SobjectType = 'Repair__c' AND DeveloperName = 'Repair'] ); rtTypeId = rtList[0].Id; } } LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper( rtTypeId, 'Repair__c', 'classic' ); layoutSections = LayoutWrapperValue.layoutSections; layoutSectionsStr = JSON.serialize(layoutSections); //for dynamic add readonly attribute List requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList; Map fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap; requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList); fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap); PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Repair__c'); PIHelper.PIIntegration piIntegrationAddress = PIHelper.getPIIntegrationInfo('Address__c'); PIHelper.PIIntegration piIntegrationContact = PIHelper.getPIIntegrationInfo('Contact'); PIHelper.PIIntegration piIntegrationRepairSubOrder = PIHelper.getPIIntegrationInfo('RepairSubOrder__c'); staticResource = JSON.serialize(piIntegration); //zhj MEBG新方案改造 2022-11-29 start staticResourceV2 = JSON.serialize(PIHelper.getPIIntegrationInfo('Repair__cV2')); //zhj MEBG新方案改造 2022-11-29 end staticResourceAddress = JSON.serialize(piIntegrationAddress); staticResourceContact = JSON.serialize(piIntegrationContact); staticResourceRepairSubOrder = JSON.serialize(piIntegrationRepairSubOrder); encryptedAPIList = piIntegration.PIFields; sobjectPrefix = piIntegration.sobjectPrefix; //获取lookup字段 List VLookUpFields = new List(); for (LayoutDescriberHelper.LayoutSection ls : layoutSections) { for (LayoutDescriberHelper.LayoutField lf : ls.layoutFields) { if (lf.fieldAPI != '' && lf.fieldType == 'reference') { VLookUpFields.add(lf.fieldAPI); } } } VLookUpFieldsJson = Json.serialize(VLookUpFields); } global class Response { public String recordId { get; set; } public String message { get; set; } public String status { get; set; } } @RemoteAction global static Response EncryptUpdate(string rid) { system.debug('rid=' + rid); Response r = new Response(); List reps = new List(); if (Test.isRunningTest()) { if (rid == 'a0J1m000001QqXk') { reps.add(new Repair__c(Id = 'a0J1m000001QqXk', Encrypt_Update_Flag__c = true)); } else { reps.add(new Repair__c(Id = 'a0J1m000001QqXk', Encrypt_Update_Flag__c = false)); } } else { reps = [SELECT id, Encrypt_Update_Flag__c FROM Repair__c WHERE id = :rid]; } if (reps.size() == 0) { r.status = 'failed'; r.message = '符合条件的数据未找到'; return r; } Repair__c rep = reps[0]; if (!rep.Encrypt_Update_Flag__c) { r.status = 'success'; r.message = ''; return r; } //zhj MEBG新方案改造 2022-11-29 start //boolean b = AWSServiceTool2.EncryptPushData(new string[]{rid}); System.debug('AWSServiceTool2V2.EncryptPushDataRepair start'); //AWSServiceTool2V2.EncryptPushDataRepair(rid); boolean b = false; if (!Test.isRunningTest()) { b = AWSServiceTool2V2.EncryptPushDataRepair(rid); } //zhj MEBG新方案改造 2022-11-29 end rep.Encrypt_Update_Flag__c = false; if (!Test.isRunningTest()) { update rep; } r.status = b ? 'success' : 'failed'; r.message = b ? '' : '加密推送失败'; r.recordId = rid; return r; } @RemoteAction global static Response saveRepair(String repairJson, String transId, Boolean isNew) { System.debug('Repair__c Info:' + JSON.serialize(repairJson)); //1. Prepare the payload for Repair__c Schema.SObjectType repairSchema = schemaMap.get(sobjectTypeValue); Map fieldAPIToTypeMap = repairSchema.getDescribe().fields.getMap(); Map fieldValueMap = (Map) JSON.deserializeUntyped(repairJson); Repair__c repairInfo = new Repair__c(); Boolean updateRepairCheck = false; //自定义格式转换 for (String fieldAPI : fieldValueMap.keySet()) { system.debug('field API' + fieldAPI); if (!fieldAPIToTypeMap.containskey(fieldAPI)) { continue; } Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType(); String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI)); if (String.valueOf(fielddataType) == 'DATE') { repairInfo.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', ' '); repairInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue)); } else if (String.isNotBlank(fieldValue)) { fieldValue = fieldValue.replace('/', '-') + ':00'; System.debug('fieldValue = ' + fieldValue); repairInfo.put(fieldAPI, Datetime.valueOf(fieldValue)); } else { repairInfo.put(fieldAPI, null); } } else if ( String.valueOf(fielddataType) == 'PERCENT' || String.valueOf(fielddataType) == 'CURRENCY' || String.valueOf(fielddataType) == 'Number' || String.valueOf(fielddataType) == 'DOUBLE' ) { repairInfo.put( fieldAPI, (String.isBlank(fieldValue) || String.isEmpty(fieldValue)) ? null : Decimal.valueOf(fieldValue.replace(',', '')) ); } else if (String.valueof(fielddataType) == 'BOOLEAN') { //check repair check value if (fieldAPI == 'Return_Without_Repair__c' && Boolean.valueof(fieldValueMap.get(fieldAPI))) { updateRepairCheck = true; } repairInfo.put(fieldAPI, fieldValueMap.get(fieldAPI)); } else { repairInfo.put(fieldAPI, String.valueOf(fieldValueMap.get(fieldAPI))); } } //2. Save Record Process String status = 'success'; Response resp = new Response(); Savepoint sp = Database.setSavepoint(); String rid = ''; try { System.debug('abcde'); if (isNew) { System.debug('repairInfozhj = ' + repairInfo); insert repairInfo; } else { System.debug('into update'); String awsDataId = (String) repairInfo.get('AWS_Data_Id__c'); System.debug('awsDataId = ' + awsDataId); Repair__c[] repairs = [ SELECT id, Return_Without_Repair_Reason__c, SAP_Transfer_time__c FROM Repair__c WHERE AWS_Data_Id__c = :awsDataId ]; if (!updateRepairCheck) { repairInfo.put('Return_Without_Repair_Reason__c', repairs[0].Return_Without_Repair_Reason__c); } if (repairs != null && repairs[0] != null) { repairInfo.put('SAP_Transfer_time__c', repairs[0].SAP_Transfer_time__c); } System.debug('repairs[0].id = ' + repairs[0].id); repairInfo.put('Id', repairs[0].id); //For testing; update repairInfo; } rid = repairInfo.Id; PIHelper.saveTransLog(sobjectTypeValue, (String) repairInfo.get('AWS_Data_Id__c'), rid, transId, repairJson, status, ''); resp.recordId = repairInfo.Id; resp.message = ''; resp.status = status; System.debug('resp from sfdx back-end' + resp); return resp; } catch (DmlException e) { rid = repairInfo.Id; Integer index = 0; System.debug(e.getNumDml()); System.debug(e.getDmlFields(index)); System.debug(e.getDmlId(index)); System.debug(e.getDmlIndex(index)); System.debug(e.getDmlMessage(index)); System.debug(e.getDmlStatusCode(index)); System.debug(e.getDmlType(index)); system.debug(e.getMessage()); system.debug(e.getStackTraceString()); System.debug('into catch' + e.getMessage()); Database.rollback(sp); resp.status = 'Exception'; resp.message = '保存失败,原因:' + e.getDmlMessage(index); PIHelper.saveTransLog( sobjectTypeValue, (String) repairInfo.get('AWS_Data_Id__c'), rid, transId, repairJson, status, e.getMessage() + e.getStackTraceString() ); return resp; } catch (Exception e) { System.debug('into catch' + e.getMessage()); Database.rollback(sp); status = 'fail'; PIHelper.saveTransLog( sobjectTypeValue, (String) repairInfo.get('AWS_Data_Id__c'), rid, transId, repairJson, status, e.getMessage() + e.getStackTraceString() ); resp.message = e.getMessage(); resp.status = status; return resp; } } // 从url参数赋值到当前页面 public static void AssignValueFromUrl(Map mso, sobject sobj) { String sobject_name = sobj.getSObjectType().getDescribe().getName(); Map temp = new Map(); Map fdm = new Map(); List fds = [ SELECT Id, DurableId, QualifiedApiName, ValueTypeId, EntityDefinitionId, NamespacePrefix, EntityDefinition.NamespacePrefix, DeveloperName, MasterLabel, Label FROM FieldDefinition WHERE EntityDefinition.QualifiedApiName = :sobject_name ]; for (FieldDefinition fd : fds) { //system.debug(fd.DurableId); fdm.put(fd.DurableId.split('\\.')[1], fd); } for (string key : mso.keySet()) { if (key.toLowerCase() == 'id') { System.debug('skip id assign'); continue; } string new_key = key; system.debug('new_key=' + new_key); if (new_key.contains('_lkid')) { new_key = new_key.replace('_lkid', ''); new_key = new_key.substring(2); } else { if (temp.containsKey(new_key)) { continue; } } system.debug('now new_key=' + new_key); if (fdm.containsKey(new_key)) { system.debug('fdm.get(new_key)=' + fdm.get(new_key)); string val_str = mso.get(key); system.debug('val_str=' + val_str); /*无需做decode,sf内部已经做好 try{ val_str = EncodingUtil.urlDecode(mso.get(key),'UTF-8'); }catch(Exception e){ continue; system.debug('Exception from get Key:'+e.getMessage()); system.debug(e.getStackTraceString()); } */ object val = null; string type_id = fdm.get(new_key).ValueTypeId; // address, boolean, date, datetime, double, id, location, string, time if (string.isBlank(val_str)) { val = null; } else if (type_id == 'boolean') { if (val_str == '1') { val = true; } else { val = boolean.valueOf(val_str); } } else if (type_id == 'date') { // try { val = date.parse(val_str); } catch (Exception e) { system.debug('val_str=' + val_str); system.debug(e.getMessage()); system.debug(e.getStackTraceString()); try { val = date.valueOf(val_str); } catch (Exception ee) { system.debug('val_str=' + val_str); system.debug(ee.getMessage()); system.debug(ee.getStackTraceString()); continue; } } } else if (type_id == 'datetime') { // try { val = datetime.parse(val_str); } catch (Exception e) { system.debug('val_str=' + val_str); system.debug(e.getMessage()); system.debug(e.getStackTraceString()); try { val = datetime.valueOf(val_str); } catch (Exception ee) { system.debug('val_str=' + val_str); system.debug(ee.getMessage()); system.debug(ee.getStackTraceString()); continue; } } } else if (type_id == 'double' || type_id == 'number') { try { val = decimal.valueOf(val_str.replace(',', '')); } catch (Exception ee) { system.debug('val_str=' + val_str); system.debug(ee.getMessage()); system.debug(ee.getStackTraceString()); continue; } } else if (type_id == 'id' || type_id == 'string') { val = val_str; } else { system.debug('type_id=' + type_id + ' is not support to convert'); continue; } temp.put(fdm.get(new_key).QualifiedApiName, val); } else { system.debug(key + ' is not in fdm'); } } for (string key : temp.keySet()) { system.debug('assign ' + key + '=' + temp.get(key)); try { sobj.put(key, temp.get(key)); } catch (Exception e) { system.debug(e.getMessage()); system.debug(e.getStackTraceString()); } } } }