From 410599fdf4f96d7f19b51bc28e544fa4e8780a1e Mon Sep 17 00:00:00 2001 From: binxie <137736985@qq.com> Date: 星期一, 26 六月 2023 14:06:00 +0800 Subject: [PATCH] backup --- force-app/main/default/classes/LayoutDescriberHelper.cls | 1335 +++++---------------- .sf/config.json | 4 manifest/package.xml | 7 force-app/main/default/classes/LayoutDescriberHelperTest.cls | 206 ++- force-app/main/default/classes/NewAndEditLeadController.cls | 1699 +++++++++------------------- force-app/main/default/classes/NewAndEditLeadControllerTest.cls | 348 +++++ 6 files changed, 1,332 insertions(+), 2,267 deletions(-) diff --git a/.sf/config.json b/.sf/config.json index 3debff0..5b4e627 100644 --- a/.sf/config.json +++ b/.sf/config.json @@ -1,3 +1,3 @@ { - "target-org": "OlympusStageEnv" -} \ No newline at end of file + "target-org": "OlympusDev" +} diff --git a/force-app/main/default/classes/LayoutDescriberHelper.cls b/force-app/main/default/classes/LayoutDescriberHelper.cls index ec17bad..388a57d 100644 --- a/force-app/main/default/classes/LayoutDescriberHelper.cls +++ b/force-app/main/default/classes/LayoutDescriberHelper.cls @@ -3,1009 +3,362 @@ * Created Date: 01/19/2022 * Purpose: Utility class for describe layouts * Test Class: LayoutDescriberHelper_Test - * History: + * History: * 01/19/2022 - Bubba Li - Initial Code. - * + * * */ public class LayoutDescriberHelper { - public static String urlPrefixToUse {get;set;} - public static List<String> requiredFieldAPIList{set;get;} - public static Map<String,String> fieldAPIToLabelMap{set;get;} - public static Set<String> CaseWebFields = new Set<String>{'SuppliedCompany','SuppliedName','SuppliedEmail','SuppliedPhone'}; - public static Set<String> ConcatenationNameSType = new Set<String>{'Lead','Contact'}; - public static LayoutWrapper describeSectionWithFieldsWrapper(Id recordTypeId, String objectType,String userMode){ - if(String.isEmpty(recordTypeId)){ - //Assign default record type for sobject - recordTypeId = getDefaultRecordType(objectType); - } - List<LayoutSection> layoutSections = null; - if(Test.isRunningTest()){ - layoutSections = (List<LayoutSection>)Json.deserialize('[{"useHeader":true,"name":"Information","layoutFields":[{"isRequired":false,"isPlaceHolder":false,"fieldType":"reference","fieldLabel":"Owner","fieldAPI":"OwnerId","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"鏂囦欢鍚�","fieldAPI":"FileName__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"picklist","fieldLabel":"Currency","fieldAPI":"CurrencyIsoCode","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"棰勮閾炬帴","fieldAPI":"ViewLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"涓嬭浇閾炬帴","fieldAPI":"DownloadLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"鐖剁骇鐩綍","fieldAPI":"ParentRecordId__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"AWS File Key","fieldAPI":"AWS_File_Key__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null}],"columns":2,"allowCollapse":false}]', List<LayoutSection>.class); - }else{ - layoutSections = describeSectionWithFields(recordTypeId,objectType,userMode); - } - - LayoutWrapper layoutWrapperValue = new LayoutWrapper(); - layoutWrapperValue.layoutSections = layoutSections; - layoutWrapperValue.requiredFieldAPIList = requiredFieldAPIList; - layoutWrapperValue.fieldAPIToLabelMap = fieldAPIToLabelMap; - system.debug('required API List:'+JSON.serialize(layoutWrapperValue)); - return layoutWrapperValue; + public static String urlPrefixToUse { get; set; } + public static List<String> requiredFieldAPIList { get; set; } + public static Map<String, String> fieldAPIToLabelMap { get; set; } + public static Set<String> CaseWebFields = new Set<String>{ + 'SuppliedCompany', + 'SuppliedName', + 'SuppliedEmail', + 'SuppliedPhone' + }; + public static Set<String> ConcatenationNameSType = new Set<String>{ + 'Lead', + 'Contact' + }; + public static LayoutWrapper describeSectionWithFieldsWrapper( + Id recordTypeId, + String objectType, + String userMode + ) { + if (String.isEmpty(recordTypeId)) { + //Assign default record type for sobject + recordTypeId = getDefaultRecordType(objectType); } - public static List<LayoutSection> describeSectionWithFields(Id recordTypeId, String objectType,String userMode){ - system.debug('record type id ===>'+ recordTypeId+' object type===>'+objectType + ' userMode===>'+userMode); - List<LayoutSection> layoutSections; - Map<String,List<LayoutField>> layoutFields; - requiredFieldAPIList = new List<String>(); - fieldAPIToLabelMap = new Map<String,String>(); - layoutSections = new List<LayoutSection>(); - String theRespBody = getLayoutSchema(recordTypeId, objectType,userMode); - Map<String, Object> layoutSection = (Map<String, Object>) JSON.deserializeUntyped(theRespBody); - Map<String,object> m = new Map<String,object>(); - if(String.isBlank(recordTypeId)){ - List<object> pageLayoutDetail = (List<object>)layoutSection.get('layouts'); - System.debug('Page Layout Section Detail:'+JSON.serialize(pageLayoutDetail[0])); - m = (Map<String,object>) pageLayoutDetail[0]; - }else{ - m = layoutSection; - } - if(m.containsKey('editLayoutSections')){ - List<object > targetLayout = (List<object>) m.get('editLayoutSections'); - for(object sectionObject: targetLayout){ - Map<String,object> section = (Map<String,object>) sectionObject; - String sectionH = (String)section.get('heading'); - boolean useH = (boolean)section.get('useHeading'); - integer columns = (integer)section.get('columns'); - boolean useCollapse = (boolean)section.get('useCollapsibleSection'); - LayoutSection ls = new LayoutSection(); - ls.Name = sectionH; - ls.useHeader = useH; - ls.columns = columns; - ls.allowCollapse = useCollapse; - ls.layoutFields = new List<LayoutField>(); - layoutSections.add(ls); - List<object> layoutRows = (List<object>) section.get('layoutRows'); - system.debug('layout rows ====> '+layoutRows); - for(Object itemObject : layoutRows ){ - Map<String,object> item = (Map<String,object>) itemObject; - List<object> layoutItem = (List<object>)item.get('layoutItems'); - boolean priorFieldLayoutAdded = true;//initially true - for(object fieldItemObject : layoutItem){ - Map<String, object> fields = (Map<String,object>) fieldItemObject; - List<object> layoutComponents = (List<object>) fields.get('layoutComponents'); - String apiName = ''; - String fieldType = ''; - String fieldTypeDetail = ''; - for(Object layoutComponent: layoutComponents){ - Map<String, object> componentMap = (Map<String,object>)layoutComponent; - if(componentMap.containsKey('value')){ - apiName = (String) componentMap.get('value'); - } - - if(componentMap.containsKey('type')){ - fieldType = (String) componentMap.get('type'); - } - - if(componentMap.containsKey('details')){ - Map<String,object> detailsMap = (Map<String,object>) componentMap.get('details'); - boolean calculatedField = (boolean)detailsMap.get('calculated'); - boolean autoNumberField = (boolean)detailsMap.get('autoNumber'); - if(calculatedField || autoNumberField){ - apiName = ''; - } - fieldTypeDetail = (String)detailsMap.get('type'); - } - } - /*Map<String, object> nameDetails = (Map<String,object>) layoutComponents.get('Name');*/ - String fieldLabel = (String) fields.get('label'); - boolean placeholderF = (boolean) fields.get('placeholder'); - boolean isEditable = (boolean) fields.get('editableForUpdate')||(boolean)fields.get('editableForNew'); // Check the editable prop - if( (apiName != '' && fieldType =='Field') || (placeholderF)){ - if(userMode == 'classic' && fieldTypeDetail == 'address'){ - String fieldLabelPrefix = fieldLabel.split(' ')[0] == 'Address'?'':fieldLabel.split(' ')[0]; - List<String> addressDetail = new List<String>{'Country','PostalCode','State','City','Street'}; - for(String addressType:addressDetail){ - LayoutField lf = new LayoutField(); - lf.isRequired = (Boolean)fields.get('required'); - lf.isPlaceHolder = placeholderF; - lf.editableField = isEditable; - lf.fieldAPI = fieldLabelPrefix+addressType; - - lf.fieldLabel = fieldLabelPrefix+' '+addressType; - lf.fieldType = 'string'; - if(ls.Name != '' || layoutSections.size() == 1){ - ls.layoutFields.add(lf); - }else if(layoutSections.size() - 2 >= 0){ - layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf); - } - if(lf.isRequired){ - system.debug(lf.fieldAPI+' is required'); - requiredFieldAPIList.add(lf.fieldAPI); - } - if(string.isBlank(lf.fieldAPI)){ - system.debug('==================================2'); - continue; - }else{ - fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel); - } - } - continue; - } - if(userMode == 'classic' && apiName == 'Name' && ConcatenationNameSType.contains(objectType)){ - List<String> nameDetail = new List<String>{'Salutation','LastName'}; - for(String nameField:nameDetail){ - LayoutField lf = new LayoutField(); - lf.isRequired = (Boolean)fields.get('required'); - if(nameField == 'Salutation'){ - lf.isRequired = false; - } - lf.isPlaceHolder = placeholderF; - lf.editableField = isEditable; - lf.fieldAPI = nameField; - lf.fieldLabel = nameField; - lf.fieldType = 'string'; - if(ls.Name != '' || layoutSections.size() == 1){ - ls.layoutFields.add(lf); - }else if(layoutSections.size() - 2 >= 0){ - layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf); - } - if(lf.isRequired){ - system.debug(lf.fieldAPI+' is required'); - requiredFieldAPIList.add(lf.fieldAPI); - } - if(string.isBlank(lf.fieldAPI)){ - system.debug('==================================3'); - continue; - }else{ - fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel); - } - } - continue; - } - if(objectType == 'Case' && CaseWebFields.contains(apiName)){ - continue; - } - LayoutField lf = new LayoutField(); - lf.isRequired = (Boolean)fields.get('required'); - lf.isPlaceHolder = placeholderF; - lf.editableField = isEditable; - lf.fieldAPI = apiName; - lf.fieldLabel = fieldLabel; - lf.fieldType = fieldTypeDetail; - if(ls.Name != '' || layoutSections.size() == 1){ - ls.layoutFields.add(lf); - }else if(layoutSections.size() - 2 >= 0){ - layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf); - } - if(lf.isRequired){ - system.debug(lf.fieldAPI+' is required'); - requiredFieldAPIList.add(lf.fieldAPI); - } - if(string.isBlank(lf.fieldAPI)){ - system.debug('==================================1'); - continue; - }else{ - fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel); - } - - priorFieldLayoutAdded = true; - }else - priorFieldLayoutAdded = false; - } + List<LayoutSection> layoutSections = null; + if (Test.isRunningTest()) { + layoutSections = (List<LayoutSection>) Json.deserialize( + '[{"useHeader":true,"name":"Information","layoutFields":[{"isRequired":false,"isPlaceHolder":false,"fieldType":"reference","fieldLabel":"Owner","fieldAPI":"OwnerId","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"鏂囦欢鍚�","fieldAPI":"FileName__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"picklist","fieldLabel":"Currency","fieldAPI":"CurrencyIsoCode","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"棰勮閾炬帴","fieldAPI":"ViewLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"涓嬭浇閾炬帴","fieldAPI":"DownloadLink__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"鐖剁骇鐩綍","fieldAPI":"ParentRecordId__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null},{"isRequired":false,"isPlaceHolder":false,"fieldType":"string","fieldLabel":"AWS File Key","fieldAPI":"AWS_File_Key__c","editableField":true,"defaultValue":null},{"isRequired":false,"isPlaceHolder":true,"fieldType":"","fieldLabel":"","fieldAPI":"","editableField":false,"defaultValue":null}],"columns":2,"allowCollapse":false}]', + List<LayoutSection>.class + ); + } else { + layoutSections = describeSectionWithFields( + recordTypeId, + objectType, + userMode + ); + } + + LayoutWrapper layoutWrapperValue = new LayoutWrapper(); + layoutWrapperValue.layoutSections = layoutSections; + layoutWrapperValue.requiredFieldAPIList = requiredFieldAPIList; + layoutWrapperValue.fieldAPIToLabelMap = fieldAPIToLabelMap; + system.debug('required API List:' + JSON.serialize(layoutWrapperValue)); + return layoutWrapperValue; + } + public static List<LayoutSection> describeSectionWithFields( + Id recordTypeId, + String objectType, + String userMode + ) { + system.debug( + 'record type id ===>' + + recordTypeId + + ' object type===>' + + objectType + + ' userMode===>' + + userMode + ); + List<LayoutSection> layoutSections; + Map<String, List<LayoutField>> layoutFields; + requiredFieldAPIList = new List<String>(); + fieldAPIToLabelMap = new Map<String, String>(); + layoutSections = new List<LayoutSection>(); + String theRespBody = getLayoutSchema(recordTypeId, objectType, userMode); + System.debug('theRespBody = ' + theRespBody); + Map<String, Object> layoutSection = (Map<String, Object>) JSON.deserializeUntyped( + theRespBody + ); + Map<String, object> m = new Map<String, object>(); + if (String.isBlank(recordTypeId)) { + List<object> pageLayoutDetail = (List<object>) layoutSection.get( + 'layouts' + ); + System.debug( + 'Page Layout Section Detail:' + JSON.serialize(pageLayoutDetail[0]) + ); + m = (Map<String, object>) pageLayoutDetail[0]; + } else { + m = layoutSection; + } + if (m.containsKey('editLayoutSections')) { + List<object> targetLayout = (List<object>) m.get('editLayoutSections'); + for (object sectionObject : targetLayout) { + Map<String, object> section = (Map<String, object>) sectionObject; + String sectionH = (String) section.get('heading'); + boolean useH = (boolean) section.get('useHeading'); + integer columns = (integer) section.get('columns'); + boolean useCollapse = (boolean) section.get('useCollapsibleSection'); + LayoutSection ls = new LayoutSection(); + ls.Name = sectionH; + ls.useHeader = useH; + ls.columns = columns; + ls.allowCollapse = useCollapse; + ls.layoutFields = new List<LayoutField>(); + layoutSections.add(ls); + List<object> layoutRows = (List<object>) section.get('layoutRows'); + system.debug('layout rows ====> ' + layoutRows); + for (Object itemObject : layoutRows) { + Map<String, object> item = (Map<String, object>) itemObject; + List<object> layoutItem = (List<object>) item.get('layoutItems'); + boolean priorFieldLayoutAdded = true; //initially true + for (object fieldItemObject : layoutItem) { + Map<String, object> fields = (Map<String, object>) fieldItemObject; + List<object> layoutComponents = (List<object>) fields.get( + 'layoutComponents' + ); + String apiName = ''; + String fieldType = ''; + String fieldTypeDetail = ''; + for (Object layoutComponent : layoutComponents) { + Map<String, object> componentMap = (Map<String, object>) layoutComponent; + if (componentMap.containsKey('value')) { + apiName = (String) componentMap.get('value'); + } + + if (componentMap.containsKey('type')) { + fieldType = (String) componentMap.get('type'); + } + + if (componentMap.containsKey('details')) { + Map<String, object> detailsMap = (Map<String, object>) componentMap.get( + 'details' + ); + boolean calculatedField = (boolean) detailsMap.get( + 'calculated' + ); + boolean autoNumberField = (boolean) detailsMap.get( + 'autoNumber' + ); + if (calculatedField || autoNumberField) { + apiName = ''; } - if(layoutSections.get(layoutSections.size() -1).layoutFields.size() <= 0) { - layoutSections.remove(layoutSections.size() - 1); - } + fieldTypeDetail = (String) detailsMap.get('type'); + } } - } - System.debug('Layout Section Result:'+JSon.serialize(layoutSections)); - system.debug('required API List:'+JSON.serialize(requiredFieldAPIList)); - return layoutSections; - } - public static String getUrlPrefix(){ - String baseurl= System.URL.getOrgDomainUrl().getHost(); - system.debug('original url ===>'+ baseurl); - return baseurl; - } + /*Map<String, object> nameDetails = (Map<String,object>) layoutComponents.get('Name');*/ + String fieldLabel = (String) fields.get('label'); + boolean placeholderF = (boolean) fields.get('placeholder'); + boolean isEditable = + (boolean) fields.get('editableForUpdate') || + (boolean) fields.get('editableForNew'); // Check the editable prop + if ((apiName != '' && fieldType == 'Field') || (placeholderF)) { + if (userMode == 'classic' && fieldTypeDetail == 'address') { + String fieldLabelPrefix = fieldLabel.split(' ')[0] == 'Address' + ? '' + : fieldLabel.split(' ')[0]; + List<String> addressDetail = new List<String>{ + 'Country', + 'PostalCode', + 'State', + 'City', + 'Street' + }; + for (String addressType : addressDetail) { + LayoutField lf = new LayoutField(); + lf.isRequired = (Boolean) fields.get('required'); + lf.isPlaceHolder = placeholderF; + lf.editableField = isEditable; + lf.fieldAPI = fieldLabelPrefix + addressType; - public static String getLayoutSchema(Id recordTypeId, String objectType,String userMode){ - String urlPost = '/services/data/v53.0/sobjects/'+objectType+'/describe/layouts/'; - if(String.isNotEmpty(recordTypeId) && String.isNotBlank(recordTypeId)){ - urlPost = urlPost + recordTypeId; - } - String urlForClassic = 'https://'+getUrlPrefix()+urlPost; - - system.debug('URL Post:'+urlForClassic); - HttpResponse resp = null; - HttpRequest req = new HttpRequest(); - req.setMethod('GET'); - if(userMode =='lightning'){ - req.setEndPoint('callout:SF_Rest_API'+urlPost); - system.debug('callout:SF_Rest_API'+urlPost); - }else if(userMode == 'classic'){ - req.setEndpoint(urlForClassic); - req.setHeader('Authorization', 'Bearer ' + UserInfo.getsessionid()); - } - Http client = new Http(); - resp = client.send(req); - system.debug('Schema Body:'+JSON.serialize(resp.getBody())); - return resp.getBody(); - } + lf.fieldLabel = fieldLabelPrefix + ' ' + addressType; + lf.fieldType = 'string'; + if (ls.Name != '' || layoutSections.size() == 1) { + ls.layoutFields.add(lf); + } else if (layoutSections.size() - 2 >= 0) { + layoutSections.get(layoutSections.size() - 2) + .layoutFields.add(lf); + } + if (lf.isRequired) { + system.debug(lf.fieldAPI + ' is required'); + requiredFieldAPIList.add(lf.fieldAPI); + } + if (string.isBlank(lf.fieldAPI)) { + system.debug('==================================2'); + continue; + } else { + fieldAPIToLabelMap.put(lf.fieldAPI, lf.fieldLabel); + } + } + continue; + } + if ( + userMode == 'classic' && + apiName == 'Name' && + ConcatenationNameSType.contains(objectType) + ) { + List<String> nameDetail = new List<String>{ + 'Salutation', + 'LastName' + }; + for (String nameField : nameDetail) { + LayoutField lf = new LayoutField(); + lf.isRequired = (Boolean) fields.get('required'); + if (nameField == 'Salutation') { + lf.isRequired = false; + } + lf.isPlaceHolder = placeholderF; + lf.editableField = isEditable; + lf.fieldAPI = nameField; + lf.fieldLabel = nameField; + lf.fieldType = 'string'; + if (ls.Name != '' || layoutSections.size() == 1) { + ls.layoutFields.add(lf); + } else if (layoutSections.size() - 2 >= 0) { + layoutSections.get(layoutSections.size() - 2) + .layoutFields.add(lf); + } + if (lf.isRequired) { + system.debug(lf.fieldAPI + ' is required'); + requiredFieldAPIList.add(lf.fieldAPI); + } + if (string.isBlank(lf.fieldAPI)) { + system.debug('==================================3'); + continue; + } else { + fieldAPIToLabelMap.put(lf.fieldAPI, lf.fieldLabel); + } + } + continue; + } + if (objectType == 'Case' && CaseWebFields.contains(apiName)) { + continue; + } + LayoutField lf = new LayoutField(); + lf.isRequired = (Boolean) fields.get('required'); + lf.isPlaceHolder = placeholderF; + lf.editableField = isEditable; + lf.fieldAPI = apiName; + lf.fieldLabel = fieldLabel; + lf.fieldType = fieldTypeDetail; + if (ls.Name != '' || layoutSections.size() == 1) { + ls.layoutFields.add(lf); + } else if (layoutSections.size() - 2 >= 0) { + layoutSections.get(layoutSections.size() - 2) + .layoutFields.add(lf); + } + if (lf.isRequired) { + system.debug(lf.fieldAPI + ' is required'); + requiredFieldAPIList.add(lf.fieldAPI); + } + if (string.isBlank(lf.fieldAPI)) { + system.debug('==================================1'); + continue; + } else { + fieldAPIToLabelMap.put(lf.fieldAPI, lf.fieldLabel); + } - public static Id getDefaultRecordType(String ObjectName) { - Map<String, Schema.SObjectType> GlobalDescribeMap = Schema.getGlobalDescribe(); - Schema.SObjectType obj = GlobalDescribeMap.get(ObjectName); - Schema.DescribeSObjectResult describeResult = obj.getDescribe(); - List<Schema.RecordTypeInfo> rtInfos = describeResult.getRecordTypeInfos(); - for(Schema.RecordTypeInfo rtInfo : rtInfos) { - if(rtInfo.DefaultRecordTypeMapping) { - return rtInfo.getRecordTypeId(); - } + priorFieldLayoutAdded = true; + } else + priorFieldLayoutAdded = false; + } } - return null; + if ( + layoutSections.get(layoutSections.size() - 1).layoutFields.size() <= 0 + ) { + layoutSections.remove(layoutSections.size() - 1); + } + } } - public class LayoutWrapper{ - @AuraEnabled public List<LayoutSection> layoutSections{set;get;} - @AuraEnabled public List<String> requiredFieldAPIList{set;get;} - @AuraEnabled public Map<String,String> fieldAPIToLabelMap{set;get;} + System.debug('Layout Section Result:' + JSon.serialize(layoutSections)); + system.debug('required API List:' + JSON.serialize(requiredFieldAPIList)); + return layoutSections; + } + public static String getUrlPrefix() { + String baseurl = System.URL.getOrgDomainUrl().getHost(); + system.debug('original url ===>' + baseurl); + return baseurl; + } + + public static String getLayoutSchema( + Id recordTypeId, + String objectType, + String userMode + ) { + String urlPost = + '/services/data/v53.0/sobjects/' + + objectType + + '/describe/layouts/'; + if (String.isNotEmpty(recordTypeId) && String.isNotBlank(recordTypeId)) { + urlPost = urlPost + recordTypeId; } - public class LayoutSection{ - @AuraEnabled public boolean useHeader {get;set;} - @AuraEnabled public String name {get;set;} - @AuraEnabled public boolean allowCollapse {get;set;} - @AuraEnabled public integer columns {get;set;} - @AuraEnabled public List<LayoutField> layoutFields {get;set;} + String urlForClassic = 'https://' + getUrlPrefix() + urlPost; + + system.debug('URL Post:' + urlForClassic); + HttpResponse resp = null; + HttpRequest req = new HttpRequest(); + req.setMethod('GET'); + if (userMode == 'lightning') { + req.setEndPoint('callout:SF_Rest_API' + urlPost); + system.debug('callout:SF_Rest_API' + urlPost); + } else if (userMode == 'classic') { + req.setEndpoint(urlForClassic); + req.setHeader('Authorization', 'Bearer ' + UserInfo.getsessionid()); } - - public class LayoutField{ - @AuraEnabled public String fieldAPI {get;set;} - @AuraEnabled public String fieldLabel{set;get;} - @AuraEnabled public String fieldType{set;get;} - @AuraEnabled public boolean editableField {get;set;} - @AuraEnabled public boolean isRequired {get; set;} - @AuraEnabled public boolean isPlaceHolder {get;set;} - @AuraEnabled public String defaultValue{set;get;} + Http client = new Http(); + System.debug('req = ' + req); + resp = client.send(req); + system.debug('Schema Body:' + JSON.serialize(resp.getBody())); + return resp.getBody(); + } + + public static Id getDefaultRecordType(String ObjectName) { + Map<String, Schema.SObjectType> GlobalDescribeMap = Schema.getGlobalDescribe(); + Schema.SObjectType obj = GlobalDescribeMap.get(ObjectName); + Schema.DescribeSObjectResult describeResult = obj.getDescribe(); + List<Schema.RecordTypeInfo> rtInfos = describeResult.getRecordTypeInfos(); + for (Schema.RecordTypeInfo rtInfo : rtInfos) { + if (rtInfo.DefaultRecordTypeMapping) { + return rtInfo.getRecordTypeId(); + } } -public static Integer ControllerUtil() { -Integer i = 0; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -i++; -return i; + return null; + } + public class LayoutWrapper { + @AuraEnabled + public List<LayoutSection> layoutSections { get; set; } + @AuraEnabled + public List<String> requiredFieldAPIList { get; set; } + @AuraEnabled + public Map<String, String> fieldAPIToLabelMap { get; set; } + } + public class LayoutSection { + @AuraEnabled + public boolean useHeader { get; set; } + @AuraEnabled + public String name { get; set; } + @AuraEnabled + public boolean allowCollapse { get; set; } + @AuraEnabled + public integer columns { get; set; } + @AuraEnabled + public List<LayoutField> layoutFields { get; set; } + } + + public class LayoutField { + @AuraEnabled + public String fieldAPI { get; set; } + @AuraEnabled + public String fieldLabel { get; set; } + @AuraEnabled + public String fieldType { get; set; } + @AuraEnabled + public boolean editableField { get; set; } + @AuraEnabled + public boolean isRequired { get; set; } + @AuraEnabled + public boolean isPlaceHolder { get; set; } + @AuraEnabled + public String defaultValue { get; set; } + } + public static Integer ControllerUtil() { + Integer i = 0; + return i; + } } - -} \ No newline at end of file diff --git a/force-app/main/default/classes/LayoutDescriberHelperTest.cls b/force-app/main/default/classes/LayoutDescriberHelperTest.cls index 2915d9a..4cd2167 100644 --- a/force-app/main/default/classes/LayoutDescriberHelperTest.cls +++ b/force-app/main/default/classes/LayoutDescriberHelperTest.cls @@ -1,90 +1,128 @@ @isTest private class LayoutDescriberHelperTest { - static testMethod void testMethod1() { - String userMode = 'classic';//classic lightning - String objectType = 'Contact'; - String recordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName().get('Doctor').getRecordTypeId(); + static testMethod void testMethod1() { + String userMode = 'classic'; //classic lightning + String objectType = 'Contact'; + String recordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByDeveloperName() + .get('Doctor') + .getRecordTypeId(); + System.debug( + 'record type id ===>' + + recordTypeId + + ' object type===>' + + objectType + + ' userMode===>' + + userMode + ); + boolean useHeader = false; + String baseurl = System.URL.getOrgDomainUrl().getHost(); + Map<String, object> detailsMap = new Map<String, object>(); + Map<String, object> detailsMap2 = new Map<String, object>(); + Map<String, object> detailsMap3 = new Map<String, object>(); + detailsMap.put('calculated', true); + detailsMap.put('autoNumber', false); + detailsMap.put('type', 'address'); + detailsMap2.put('calculated', false); + detailsMap2.put('autoNumber', false); + detailsMap2.put('type', 'repair'); + detailsMap3.put('calculated', false); + detailsMap3.put('autoNumber', false); + detailsMap3.put('type', 'repair'); + String fieldTypeDetail = (String) detailsMap.get('type'); - Map<String,object> detailsMap = new Map<String,object>(); - Map<String,object> detailsMap2 = new Map<String,object>(); - Map<String,object> detailsMap3 = new Map<String,object>(); - detailsMap.put('calculated',true); - detailsMap.put('autoNumber',false); - detailsMap.put('type','address'); - detailsMap2.put('calculated',false); - detailsMap2.put('autoNumber',false); - detailsMap2.put('type','repair'); - detailsMap3.put('calculated',false); - detailsMap3.put('autoNumber',false); - detailsMap3.put('type','repair'); + List<Map<String, object>> componentMapList = new List<Map<String, object>>(); + List<Map<String, object>> componentMapList2 = new List<Map<String, object>>(); + List<Map<String, object>> componentMapList3 = new List<Map<String, object>>(); + Map<String, object> componentMap = new Map<String, object>(); + Map<String, object> componentMap2 = new Map<String, object>(); + Map<String, object> componentMap3 = new Map<String, object>(); + componentMap.put('value', 'Name'); + componentMap.put('type', 'Field'); + componentMap.put('details', detailsMap); + componentMapList.add(componentMap); + componentMap2.put('value', 'Name'); + componentMap2.put('type', 'Field'); + componentMap2.put('details', detailsMap2); + componentMapList2.add(componentMap2); + componentMap3.put('value', 'LastName'); + componentMap3.put('type', 'Field'); + componentMap3.put('details', detailsMap3); + componentMapList3.add(componentMap3); + String apiName = (String) componentMap.get('value'); + String fieldType = (String) componentMap.get('type'); - List<Map<String, object>> componentMapList = new List<Map<String, object>>(); - List<Map<String, object>> componentMapList2 = new List<Map<String, object>>(); - List<Map<String, object>> componentMapList3 = new List<Map<String, object>>(); - Map<String, object> componentMap = new Map<String, object>(); - Map<String, object> componentMap2 = new Map<String, object>(); - Map<String, object> componentMap3 = new Map<String, object>(); - componentMap.put('value','Name'); - componentMap.put('type','Field'); - componentMap.put('details',detailsMap); - componentMapList.add(componentMap); - componentMap2.put('value','Name'); - componentMap2.put('type','Field'); - componentMap2.put('details',detailsMap2); - componentMapList2.add(componentMap2); - componentMap3.put('value','LastName'); - componentMap3.put('type','Field'); - componentMap3.put('details',detailsMap3); - componentMapList3.add(componentMap3); + List<Map<String, object>> layoutComponentsList = new List<Map<String, object>>(); + Map<String, object> layoutComponents = new Map<String, object>(); + layoutComponents.put('layoutComponents', componentMapList); + layoutComponents.put('label', 'Address'); + layoutComponents.put('placeholder', true); + layoutComponents.put('editableForNew', true); + layoutComponents.put('editableForUpdate', true); + layoutComponents.put('required', false); + layoutComponentsList.add(layoutComponents); + Map<String, object> layoutComponents2 = new Map<String, object>(); + layoutComponents2.put('layoutComponents', componentMapList2); + layoutComponents2.put('label', 'Repair'); + layoutComponents2.put('placeholder', true); + layoutComponents2.put('editableForNew', true); + layoutComponents2.put('editableForUpdate', true); + layoutComponents2.put('required', false); + layoutComponentsList.add(layoutComponents2); + Map<String, object> layoutComponents3 = new Map<String, object>(); + layoutComponents3.put('layoutComponents', componentMapList3); + layoutComponents3.put('label', 'Repair'); + layoutComponents3.put('placeholder', true); + layoutComponents3.put('editableForNew', true); + layoutComponents3.put('editableForUpdate', true); + layoutComponents3.put('required', false); + layoutComponentsList.add(layoutComponents3); - List<Map<String, object>> layoutComponentsList = new List<Map<String, object>>(); - Map<String, object> layoutComponents = new Map<String, object>(); - layoutComponents.put('layoutComponents',componentMapList); - layoutComponents.put('label','Address'); - layoutComponents.put('placeholder',true); - layoutComponents.put('editableForNew',true); - layoutComponents.put('required',false); - layoutComponentsList.add(layoutComponents); - Map<String, object> layoutComponents2 = new Map<String, object>(); - layoutComponents2.put('layoutComponents',componentMapList2); - layoutComponents2.put('label','Repair'); - layoutComponents2.put('placeholder',true); - layoutComponents2.put('editableForNew',true); - layoutComponents2.put('required',false); - layoutComponentsList.add(layoutComponents2); - Map<String, object> layoutComponents3 = new Map<String, object>(); - layoutComponents3.put('layoutComponents',componentMapList3); - layoutComponents3.put('label','Repair'); - layoutComponents3.put('placeholder',true); - layoutComponents3.put('editableForNew',true); - layoutComponents3.put('required',false); - layoutComponentsList.add(layoutComponents3); + boolean placeholderF = (boolean) layoutComponents.get('placeholder'); + boolean isEditable = + (boolean) layoutComponents.get('editableForUpdate') || + (boolean) layoutComponents.get('editableForNew'); + System.debug('isEditable ===>' + isEditable); + List<Map<String, object>> itemList = new List<Map<String, object>>(); + Map<String, object> item = new Map<String, object>(); + item.put('layoutItems', layoutComponentsList); + itemList.add(item); + useHeader = true; + List<Map<String, object>> sectionList = new List<Map<String, object>>(); + Map<String, object> section = new Map<String, object>(); + section.put('heading', ''); + section.put('useHeading', useHeader); + section.put('columns', 1); + section.put('useCollapsibleSection', true); + section.put('layoutRows', itemList); + sectionList.add(section); - - List<Map<String,object>> itemList = new List<Map<String,object>>(); - Map<String,object> item = new Map<String,object>(); - item.put('layoutItems',layoutComponentsList); - itemList.add(item); - - List<Map<String,object>> sectionList = new List<Map<String,object>>(); - Map<String,object> section = new Map<String,object>(); - section.put('heading',''); - section.put('useHeading',true); - section.put('columns',1); - section.put('useCollapsibleSection',true); - section.put('layoutRows',itemList); - sectionList.add(section); - - Map<String, Object> layoutSection = new Map<String,Object>(); - layoutSection.put('layouts','123'); - layoutSection.put('editLayoutSections',sectionList); - String layoutSectionJson = JSON.serialize(layoutSection); - LayoutDescriberHelper.ControllerUtil(); - Test.setMock(HttpCalloutMock.class, new TestDataUtility.BaseHttpMock(layoutSectionJson,'OK','200')); - - Test.startTest(); - LayoutDescriberHelper.describeSectionWithFieldsWrapper(recordTypeId,objectType,userMode); - LayoutDescriberHelper.describeSectionWithFieldsWrapper(null,objectType,userMode); - Test.stopTest(); - } -} \ No newline at end of file + Map<String, Object> layoutSection = new Map<String, Object>(); + layoutSection.put('layouts', '123'); + layoutSection.put('editLayoutSections', sectionList); + String layoutSectionJson = JSON.serialize(layoutSection); + LayoutDescriberHelper.ControllerUtil(); + Test.setMock( + HttpCalloutMock.class, + new TestDataUtility.BaseHttpMock(layoutSectionJson, 'OK', '200') + ); + Test.startTest(); + LayoutDescriberHelper.describeSectionWithFieldsWrapper( + recordTypeId, + objectType, + userMode + ); + LayoutDescriberHelper.describeSectionWithFieldsWrapper( + null, + objectType, + userMode + ); + LayoutDescriberHelper.describeSectionWithFields( + recordTypeId, + objectType, + userMode + ); + LayoutDescriberHelper.getLayoutSchema(recordTypeId, objectType, userMode); + LayoutDescriberHelper.getUrlPrefix(); + Test.stopTest(); + } +} diff --git a/force-app/main/default/classes/NewAndEditLeadController.cls b/force-app/main/default/classes/NewAndEditLeadController.cls index c5db97e..023e13b 100644 --- a/force-app/main/default/classes/NewAndEditLeadController.cls +++ b/force-app/main/default/classes/NewAndEditLeadController.cls @@ -3,1162 +3,575 @@ * Created Date: 01/19/2022 * Purpose: Utility class for describe layouts * Test Class: NewAndEditLeadController - * History: + * History: * 01/19/2022 - Bubba Li - Initial Code. - * + * * */ global without sharing class NewAndEditLeadController { - public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;} - public String awsToken{set;get;} - public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe(); - public static String sobjectTypeValue = 'Lead'; - public Boolean isNewMode{set;get;} - public Boolean isCloneMode{protected set;get;} - public String rtTypeId {get; set;} - public String AWSDataId{set;get;} - public String AWSDataIdInquiryForm{set;get;} - public String contactId{set;get;}//For Lookup field - public List<String> encryptedAPIList{set;get;} - public String staticResource {get; set;} - public String staticResourceContact {get; set;} - public String staticResourceInquiryForm{get; set;} - public String requiredFieldAPIListStr {get; set;} - public String fieldAPIToLabelMapStr {get; set;} - public String Input_Required_Field_Msg{set;get;} - public String PIPL_Name_Label{set;get;} - public String PIPL_Input_Account_Error_Msg{set;get;} - public String sobjectPrefix{set;get;} - public String sobjecttypeForFrontEnd{set;get;} - public String contactsInfo {set;get;}//key sfid;value awsid - public Inquiry_form__c ifc{get; private set;} - public String contactDataId{get; set;} - public String layoutSectionsStr {get; set;} - public String isDecryptContact {get; set;} - public final string ApiPrefix{get;private set;} //Add By Li Jun 20220403 - public Map<string,string> AWSToSobjectEncryptedMap{get;private set;} - public string AWSToSobjectEncryptedMapJson{get{return JSON.serialize(AWSToSobjectEncryptedMap);}} - public String LeadCreatedDate { get; set; } // XLIU-CFE8M7 20220624 ssm - public String VLookUpFieldsJson{get;private set;} + public List<LayoutDescriberHelper.LayoutSection> layoutSections { get; set; } + public String awsToken { get; set; } + public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe(); + public static String sobjectTypeValue = 'Lead'; + public Boolean isNewMode { get; set; } + public Boolean isCloneMode { get; protected set; } + public String rtTypeId { get; set; } + public String AWSDataId { get; set; } + public String AWSDataIdInquiryForm { get; set; } + public String contactId { get; set; } //For Lookup field + public List<String> encryptedAPIList { get; set; } + public String staticResource { get; set; } + public String staticResourceContact { get; set; } + public String staticResourceInquiryForm { 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 contactsInfo { get; set; } //key sfid;value awsid + public Inquiry_form__c ifc { get; private set; } + public String contactDataId { get; set; } + public String layoutSectionsStr { get; set; } + public String isDecryptContact { get; set; } + public final string ApiPrefix { get; private set; } //Add By Li Jun 20220403 + public Map<string, string> AWSToSobjectEncryptedMap { get; private set; } + public string AWSToSobjectEncryptedMapJson { + get { + return JSON.serialize(AWSToSobjectEncryptedMap); + } + } + public String LeadCreatedDate { get; set; } // XLIU-CFE8M7 20220624 ssm + public String VLookUpFieldsJson { get; private set; } + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start + public String staticResourceV2 { get; set; } + //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end + + public NewAndEditLeadController(ApexPages.StandardController controller) { + ApiPrefix = 'PIBackApi'; + isDecryptContact = '0'; + isNewMode = true; + isCloneMode = false; + 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; + Map<string, string> mso = ApexPages.currentPage().getParameters(); + if (mso != null && mso.containsKey('newclone')) { + isCloneMode = true; + } + //鑾峰彇鎵�鏈夊瓧娈� + List<String> fieldList = new List<String>( + Schema.getGlobalDescribe() + .get('Lead') + .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(); + + // XLIU-CFE8M7 20220624 ssm + this.LeadCreatedDate = obj.get('CreatedDate') != null + ? Date.newInstance( + ((Datetime) obj.get('CreatedDate')).year(), + ((Datetime) obj.get('CreatedDate')).month(), + ((Datetime) obj.get('CreatedDate')).day() + ) + .format() + : Date.today().format(); + // this.LeadCreatedDate = Date.today().format(); + + if ( + ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid') != + null + ) { + System.debug('CF00N1000000962np_lkid'); + //浜у搧鍜ㄨ鍗曡繃鏉ョ殑 + String InquiryFormId = ApexPages.currentPage() + .getParameters() + .get('CF00N1000000962np_lkid'); + ifc = [ + SELECT + Id, + AWS_Data_Id__c, + Contact_Name__c, + Contact_Id__c, + Hospital_Name__c, + Hospital_ID__c, + Department_Class__c, + Department_ID__c, + Opp_Name_Search__c, + Opp_Name_Search_ID__c, + Campaign__c, + Campaign_ID__c, + Name, + Cancel_Reason__c, + Phone__c, + Email__c, + Last_Name__c, + LeadSource__c, + Opportunity_Division__c, + Request1__c, + Urgent__c, + Inquiry_Num__c, + Product_Owner__c + FROM Inquiry_form__c + WHERE id = :InquiryFormId + ]; + System.debug('ifc = ' + ifc); + if (ifc.Contact_Id__c != null && ifc.Contact_Id__c != '') { + Contact c = [ + SELECT AWS_Data_Id__c + FROM Contact + WHERE id = :ifc.Contact_Id__c + ]; + contactDataId = c.AWS_Data_Id__c; + } + AWSDataIdInquiryForm = ifc.AWS_Data_Id__c; + System.debug('ifc = ' + ifc); + rtTypeId = ApexPages.currentPage().getParameters().get('RecordType'); + obj.put('OwnerId', UserInfo.getUserId()); + obj.put('Inquiry_Num__c', ifc.Inquiry_Num__c); // 20220413 SWAG-CBUB2W you + obj.put('owner_not_automatically_update__c', ifc.Product_Owner__c); + controller.getRecord().put('LeadSource', ifc.LeadSource__c); + // controller.getRecord().put('Lead_Inquiry_form__c', ifc.Id); + } else if (obj.Id != null) { + //鏇存柊 + isNewMode = false; + Lead leadData = [ + SELECT + Id, + RecordTypeId, + AWS_Data_Id__c, + Contact_Name__r.Id, + Contact_Name__r.AWS_Data_Id__c + FROM Lead + WHERE id = :obj.Id + ]; + rtTypeId = leadData.RecordTypeId; + AWSDataId = leadData.AWS_Data_Id__c; + Map<String, String> sfIdToAWSIdMap = new Map<String, String>(); + if (leadData.Contact_Name__r.Id != null) { + sfIdToAWSIdMap.put( + String.valueof(leadData.Contact_Name__r.Id).subString(0, 15), + leadData.Contact_Name__r.AWS_Data_Id__c + ); + } + contactsInfo = JSON.serialize(sfIdToAWSIdMap); + } else { + //鐪嬮摼鎺ヤ腑鏈夋棤甯﹁繃鏉ョ殑鍙傛暟(瀹㈡埛浜哄憳) + // Map<string,string> mso = ApexPages.currentPage().getParameters(); + for (String key : mso.keySet()) { + System.debug('key=' + key + ',value=' + mso.get(key)); + } + //鑱旂郴浜� + if (mso.containsKey('CF00N10000006ps6f_lkid')) { + isDecryptContact = '1'; + String contactId = mso.get('CF00N10000006ps6f_lkid'); + //鏌ヨAWS_Data_Id__c + List<Contact> contactList = new List<Contact>( + [SELECT AWS_Data_Id__c FROM Contact WHERE id = :contactId] + ); + Contact c = new Contact(); + if (contactList != null && contactList.size() > 0) { + c = contactList[0]; + } + if (c != null && c.AWS_Data_Id__c != '') { + contactDataId = c.AWS_Data_Id__c; + } + //鏌ヨ鎴樼暐绉戝鍒嗙被 + List<Contact> cs = [ + SELECT Account.Department_Class__c + FROM Contact + WHERE id = :contactId + ]; + if (cs.size() > 0) { + controller.getRecord() + .put('Department_Class__c', cs[0].Account.Department_Class__c); + } + controller.getRecord() + .put('Contact_Name__c', mso.get('CF00N10000006ps6f_lkid')); + } + //鍖婚櫌鍚� + if (mso.containsKey('CF00N10000002CvC5_lkid')) { + controller.getRecord() + .put('Hospital_Name__c', mso.get('CF00N10000002CvC5_lkid')); + //閫氳繃鍖婚櫌id鏌ヨ鎴樼暐绉戝鍒嗙被 + String hospitalId = mso.get('CF00N10000002CvC5_lkid'); + List<Account> hospitalAccount = [ + SELECT Department_Class__c + FROM Account + WHERE Id = :hospitalId + ]; + if (hospitalAccount.size() > 0) { + List<Account> departmentAccount = [ + SELECT Id + FROM Account + WHERE Id = :hospitalAccount[0].Department_Class__c + ]; + if (departmentAccount.size() > 0) { + System.debug('Department_Class__c = ' + departmentAccount[0].Id); + controller.getRecord() + .put('Department_Class__c', departmentAccount[0].Id); + } + } + } + //鍏徃锛堢瀹わ級 + if (mso.containsKey('CF00N10000002CvC5')) { + controller.getRecord().put('Company', mso.get('CF00N10000002CvC5')); + } + //鎴樼暐绉戝CF00N10000006qNtt_lkid + // if(mso.containsKey('CF00N10000006qNtt_lkid ')){ + // controller.getRecord().put('Department_Class__c',mso.get('CF00N10000006qNtt_lkid ')); + // } + // 2022-04-13 鏉ユ簮 jz start 0414 lt + if (mso.containsKey('LeadSource')) { + controller.getRecord().put('LeadSource', mso.get('LeadSource')); + } + if (mso.containsKey(System.Label.Opportunity_stage)) { + controller.getRecord() + .put('Opportunity_stage__c', mso.get(System.Label.Opportunity_stage)); + } + //20220505 lt 娉ㄩ噴鎺� + // if (mso.containsKey('00N10000006qOF0')) { + // controller.getRecord().put('Close_Forecasted_Date__c', Date.parse(mso.get('00N10000006qOF0'))); + // } + if (mso.containsKey(System.Label.Opp_Name)) { + controller.getRecord() + .put('Opp_Name__c', mso.get(System.Label.Opp_Name)); + } + // if (mso.containsKey('00N100000048UBf')) { + // controller.getRecord().put('Contact__c', mso.get('00N100000048UBf')); + // } + if (mso.containsKey(System.Label.Purchase_Reason)) { + controller.getRecord() + .put('Purchase_Reason__c', mso.get(System.Label.Purchase_Reason)); + } + if (mso.containsKey(System.Label.Fund_Basis)) { + controller.getRecord() + .put('Fund_Basis__c', mso.get(System.Label.Fund_Basis)); + } + if (mso.containsKey(System.Label.Purchase_Type)) { + controller.getRecord() + .put('Purchase_Type__c', mso.get(System.Label.Purchase_Type)); + } + //20220427 + if (mso.containsKey(System.Label.Tender_information)) { + //鎷涙爣椤圭洰Id + controller.getRecord() + .put( + 'Tender_information__c', + mso.get(System.Label.Tender_information) + ); + } + if (mso.containsKey(System.Label.Agency_Opportunity)) { + //缁忛攢鍟嗚浠稩d + controller.getRecord() + .put( + 'Agency_Opportunity__c', + mso.get(System.Label.Agency_Opportunity) + ); + } + if (mso.containsKey(System.Label.Sales_Method)) { + //缁忛攢鍟嗚浠�--鎷涙爣鏂瑰紡 + controller.getRecord() + .put('Sales_Method__c', mso.get(System.Label.Sales_Method)); + } + if (mso.containsKey(System.Label.Request)) { + controller.getRecord().put('Request__c', mso.get(System.Label.Request)); + } + if (mso.containsKey(System.Label.Request_Detail)) { + controller.getRecord() + .put('Request_Detail__c', mso.get(System.Label.Request_Detail)); + } + // 2022-04-13 鏉ユ簮 jz end 0414 lt + rtTypeId = ApexPages.currentPage().getParameters().get('RecordType'); + // 20220420 lt OBSAP start + if (String.isBlank(rtTypeId) && mso.containsKey('RecordTypeId')) { + rtTypeId = mso.get('RecordTypeId'); + } + // 20220420 lt OBSAP end + obj.put('OwnerId', UserInfo.getUserId()); + } + system.debug('RecordTypeId:' + rtTypeId); + LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper( + rtTypeId, + 'Lead', + 'classic' + ); + layoutSections = LayoutWrapperValue.layoutSections; + List<String> requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList; + Map<String, String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap; + requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList); + fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap); + PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo( + 'Lead' + ); + staticResource = JSON.serialize(piIntegration); + staticResourceContact = JSON.serialize( + PIHelper.getPIIntegrationInfo('Contact') + ); + staticResourceInquiryForm = JSON.serialize( + PIHelper.getPIIntegrationInfo('Inquiry_form__c') + ); //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start - public String staticResourceV2 {get; set;} + staticResourceV2 = JSON.serialize(PIHelper.getPIIntegrationInfo('LeadV2')); //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end + encryptedAPIList = piIntegration.PIFields; + sobjectPrefix = piIntegration.sobjectPrefix; + layoutSectionsStr = JSON.serialize(layoutSections); + AWSToSobjectEncryptedMap = new Map<String, String>(); + for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) { + AWSToSobjectEncryptedMap.put( + PIDetail.AWS_Field_API__c, + PIDetail.SF_Field_API_Name__c + ); + } + //鑾峰彇lookup瀛楁 + List<String> VLookUpFields = new List<String>(); + 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); + } - public NewAndEditLeadController(ApexPages.StandardController controller) { - ApiPrefix = 'PIBackApi'; - isDecryptContact = '0'; - isNewMode = true; - isCloneMode = false; - 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; - Map<string,string> mso = ApexPages.currentPage().getParameters(); - if(mso != null && mso.containsKey('newclone')){ - isCloneMode = true; - } - //鑾峰彇鎵�鏈夊瓧娈� - List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Lead').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(); + global class Response { + public String recordId { get; set; } + public String message { get; set; } + public String status { get; set; } + } - // XLIU-CFE8M7 20220624 ssm - this.LeadCreatedDate = obj.get('CreatedDate') != null ? Date.newInstance(((Datetime)obj.get('CreatedDate')).year(), ((Datetime)obj.get('CreatedDate')).month(), ((Datetime)obj.get('CreatedDate')).day()).format() : Date.today().format(); - // this.LeadCreatedDate = Date.today().format(); - - if(ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid') != null){ - System.debug('CF00N1000000962np_lkid'); - //浜у搧鍜ㄨ鍗曡繃鏉ョ殑 - String InquiryFormId = ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid'); - ifc = [select Id,AWS_Data_Id__c,Contact_Name__c,Contact_Id__c,Hospital_Name__c,Hospital_ID__c,Department_Class__c, - Department_ID__c,Opp_Name_Search__c,Opp_Name_Search_ID__c,Campaign__c, - Campaign_ID__c,Name,Cancel_Reason__c,Phone__c,Email__c,Last_Name__c,LeadSource__c,Opportunity_Division__c,Request1__c, - Urgent__c,Inquiry_Num__c,Product_Owner__c from Inquiry_form__c where id = :InquiryFormId]; - System.debug('ifc = ' + ifc); - if(ifc.Contact_Id__c !=null && ifc.Contact_Id__c != ''){ - Contact c = [select AWS_Data_Id__c from Contact where id = :ifc.Contact_Id__c]; - contactDataId = c.AWS_Data_Id__c; - } - AWSDataIdInquiryForm = ifc.AWS_Data_Id__c; - System.debug('ifc = ' + ifc); - rtTypeId = ApexPages.currentPage().getParameters().get('RecordType'); - obj.put('OwnerId',UserInfo.getUserId()); - obj.put('Inquiry_Num__c',ifc.Inquiry_Num__c);// 20220413 SWAG-CBUB2W you - obj.put('owner_not_automatically_update__c',ifc.Product_Owner__c); - controller.getRecord().put('LeadSource', ifc.LeadSource__c); - // controller.getRecord().put('Lead_Inquiry_form__c', ifc.Id); - }else if(obj.Id != null){ - //鏇存柊 - isNewMode = false; - Lead leadData = [select Id,RecordTypeId,AWS_Data_Id__c,Contact_Name__r.Id,Contact_Name__r.AWS_Data_Id__c from Lead where id =: obj.Id]; - rtTypeId = leadData.RecordTypeId; - AWSDataId = leadData.AWS_Data_Id__c; - Map<String,String> sfIdToAWSIdMap = new Map<String,String>(); - if(leadData.Contact_Name__r.Id != null){ - sfIdToAWSIdMap.put(String.valueof(leadData.Contact_Name__r.Id).subString(0,15),leadData.Contact_Name__r.AWS_Data_Id__c); - } - contactsInfo = JSON.serialize(sfIdToAWSIdMap); - }else{ - //鐪嬮摼鎺ヤ腑鏈夋棤甯﹁繃鏉ョ殑鍙傛暟(瀹㈡埛浜哄憳) - // Map<string,string> mso = ApexPages.currentPage().getParameters(); - for(String key : mso.keySet()){ - System.debug('key=' + key + ',value=' + mso.get(key)); - } - //鑱旂郴浜� - if(mso.containsKey('CF00N10000006ps6f_lkid')){ - isDecryptContact = '1'; - String contactId = mso.get('CF00N10000006ps6f_lkid'); - //鏌ヨAWS_Data_Id__c - List<Contact> contactList = new List<Contact>([select AWS_Data_Id__c from Contact where id=:contactId]); - Contact c = new Contact(); - if(contactList!=null&&contactList.size()>0){ - c = contactList[0]; - } - if (c != null&&c.AWS_Data_Id__c!='') { - contactDataId = c.AWS_Data_Id__c; - } - //鏌ヨ鎴樼暐绉戝鍒嗙被 - List<Contact> cs = [select Account.Department_Class__c from Contact where id=:contactId]; - if(cs.size()>0){ - controller.getRecord().put('Department_Class__c',cs[0].Account.Department_Class__c); - } - controller.getRecord().put('Contact_Name__c',mso.get('CF00N10000006ps6f_lkid')); - } - //鍖婚櫌鍚� - if(mso.containsKey('CF00N10000002CvC5_lkid')){ - controller.getRecord().put('Hospital_Name__c',mso.get('CF00N10000002CvC5_lkid')); - //閫氳繃鍖婚櫌id鏌ヨ鎴樼暐绉戝鍒嗙被 - String hospitalId = mso.get('CF00N10000002CvC5_lkid'); - List<Account> hospitalAccount = [select Department_Class__c from Account where Id=:hospitalId]; - if(hospitalAccount.size()>0){ - List<Account> departmentAccount = [select Id from Account where Id=:hospitalAccount[0].Department_Class__c]; - if (departmentAccount.size()>0) { - System.debug('Department_Class__c = ' + departmentAccount[0].Id); - controller.getRecord().put('Department_Class__c',departmentAccount[0].Id); - } - } - } - //鍏徃锛堢瀹わ級 - if(mso.containsKey('CF00N10000002CvC5')){ - controller.getRecord().put('Company',mso.get('CF00N10000002CvC5')); - } - //鎴樼暐绉戝CF00N10000006qNtt_lkid - // if(mso.containsKey('CF00N10000006qNtt_lkid ')){ - // controller.getRecord().put('Department_Class__c',mso.get('CF00N10000006qNtt_lkid ')); - // } - // 2022-04-13 鏉ユ簮 jz start 0414 lt - if (mso.containsKey('LeadSource')) { - controller.getRecord().put('LeadSource', mso.get('LeadSource')); - } - if (mso.containsKey(System.Label.Opportunity_stage)) { - controller.getRecord().put('Opportunity_stage__c', mso.get(System.Label.Opportunity_stage)); - } - //20220505 lt 娉ㄩ噴鎺� - // if (mso.containsKey('00N10000006qOF0')) { - // controller.getRecord().put('Close_Forecasted_Date__c', Date.parse(mso.get('00N10000006qOF0'))); - // } - if (mso.containsKey(System.Label.Opp_Name)) { - controller.getRecord().put('Opp_Name__c', mso.get(System.Label.Opp_Name)); - } - // if (mso.containsKey('00N100000048UBf')) { - // controller.getRecord().put('Contact__c', mso.get('00N100000048UBf')); - // } - if (mso.containsKey(System.Label.Purchase_Reason)) { - controller.getRecord().put('Purchase_Reason__c', mso.get(System.Label.Purchase_Reason)); - } - if (mso.containsKey(System.Label.Fund_Basis)) { - controller.getRecord().put('Fund_Basis__c', mso.get(System.Label.Fund_Basis)); - } - if (mso.containsKey(System.Label.Purchase_Type)) { - controller.getRecord().put('Purchase_Type__c', mso.get(System.Label.Purchase_Type)); - } - //20220427 - if (mso.containsKey(System.Label.Tender_information)) { //鎷涙爣椤圭洰Id - controller.getRecord().put('Tender_information__c', mso.get(System.Label.Tender_information)); - } - if (mso.containsKey(System.Label.Agency_Opportunity)) { //缁忛攢鍟嗚浠稩d - controller.getRecord().put('Agency_Opportunity__c', mso.get(System.Label.Agency_Opportunity)); - } - if (mso.containsKey(System.Label.Sales_Method)) { //缁忛攢鍟嗚浠�--鎷涙爣鏂瑰紡 - controller.getRecord().put('Sales_Method__c', mso.get(System.Label.Sales_Method)); - } - if (mso.containsKey(System.Label.Request)) { - controller.getRecord().put('Request__c', mso.get(System.Label.Request)); - } - if (mso.containsKey(System.Label.Request_Detail)) { - controller.getRecord().put('Request_Detail__c', mso.get(System.Label.Request_Detail)); - } - // 2022-04-13 鏉ユ簮 jz end 0414 lt - rtTypeId = ApexPages.currentPage().getParameters().get('RecordType'); - // 20220420 lt OBSAP start - if (String.isBlank(rtTypeId) && mso.containsKey('RecordTypeId')) { - rtTypeId = mso.get('RecordTypeId'); - } - // 20220420 lt OBSAP end - obj.put('OwnerId',UserInfo.getUserId()); + @RemoteAction + global static Response saveLead( + String leadJson, + String transId, + Boolean isNew + ) { + System.debug('Lead Info:' + JSON.serialize(leadJson)); + //1. Prepare the payload for Lead + Schema.SObjectType leadSchema = schemaMap.get(sobjectTypeValue); + Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe() + .fields.getMap(); + Map<String, Object> fieldValueMap = (Map<String, Object>) JSON.deserializeUntyped( + leadJson + ); + Lead leadInfo = new Lead(); + String status = 'success'; + Response resp = new Response(); + Savepoint sp = Database.setSavepoint(); + Boolean isClone = false; + String rid = ''; + String awsDataId = ''; + try { + //鑷畾涔夋牸寮忚浆鎹� + for (String fieldAPI : fieldValueMap.keySet()) { + system.debug('field API=' + fieldAPI); + if (!fieldAPIToTypeMap.containskey(fieldAPI)) { + continue; } - system.debug('RecordTypeId:'+rtTypeId); - LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Lead','classic'); - layoutSections = LayoutWrapperValue.layoutSections; - List<String> requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList; - Map<String,String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap; - requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList); - fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap); - PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Lead'); - staticResource = JSON.serialize(piIntegration); - staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')); - staticResourceInquiryForm = JSON.serialize(PIHelper.getPIIntegrationInfo('Inquiry_form__c')); - //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 start - staticResourceV2 = JSON.serialize(PIHelper.getPIIntegrationInfo('LeadV2')); - //zhj MEBG鏂版柟妗堟敼閫� 2022-11-29 end - encryptedAPIList = piIntegration.PIFields; - sobjectPrefix = piIntegration.sobjectPrefix; - layoutSectionsStr = JSON.serialize(layoutSections); - AWSToSobjectEncryptedMap = new Map<String,String>(); - for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) { - AWSToSobjectEncryptedMap.put(PIDetail.AWS_Field_API__c, PIDetail.SF_Field_API_Name__c); + Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI) + .getDescribe() + .getType(); + String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI)); + system.debug( + 'Field Type:' + fielddataType + ' field Value=' + fieldValue + ); + if (String.valueOf(fielddataType) == 'DATE') { + leadInfo.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', ' '); + leadInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue)); + } else { + leadInfo.put(fieldAPI, null); + } + } else if ( + String.valueof(fielddataType) == 'CURRENCY' || + String.valueof(fielddataType) == 'PERCENT' || + String.valueOf(fielddataType) == 'Number' || + String.valueOf(fielddataType) == 'DOUBLE' + ) { + leadInfo.put( + fieldAPI, + (String.isBlank(fieldValue) || String.isEmpty(fieldValue)) + ? null + : Decimal.valueOf(fieldValue.replace(',', '')) + ); + } else if (String.valueof(fielddataType) == 'BOOLEAN') { + leadInfo.put(fieldAPI, fieldValueMap.get(fieldAPI)); + } else { + leadInfo.put(fieldAPI, fieldValue); } - //鑾峰彇lookup瀛楁 - List<String> VLookUpFields = new List<String>(); - for (LayoutDescriberHelper.LayoutSection ls : layoutSections) { - for (LayoutDescriberHelper.LayoutField lf : ls.layoutFields) { - if (lf.fieldAPI != '' && lf.fieldType == 'reference') { - VLookUpFields.add(lf.fieldAPI); - } - } + } + + //2. Save Record Process + + System.debug('abcde'); + awsDataId = (String) leadInfo.get('AWS_Data_Id__c'); + System.debug('awsDataId = ' + awsDataId); + Lead[] leads = [SELECT id FROM Lead WHERE AWS_Data_Id__c = :awsDataId]; + + if (!isNew) { + isClone = leads.size() == 0; + } + System.debug('isClone---------' + isClone); + //2022-6-10 yjk SWAG-CEY8GZ start + if (leadInfo.Hospital_Name__c != null) { + Account acc = [ + SELECT id, Hospital__c + FROM Account + WHERE id = :leadInfo.Hospital_Name__c + ]; + leadInfo.hospital__c = acc.Hospital__c; + } + //2022-6-10 yjk SWAG-CEY8GZ end + if (isNew || isClone) { + System.debug('leadInfozhj = ' + leadInfo); + if (!Test.isRunningTest()) { + insert leadInfo; } - VLookUpFieldsJson = Json.serialize(VLookUpFields); + } else { + System.debug('into update'); + // String awsDataId = (String)leadInfo.get('AWS_Data_Id__c'); + // System.debug('awsDataId = ' + awsDataId); + // Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId]; + System.debug('leads[0].id = ' + leads[0].id); + leadInfo.put('Id', leads[0].id); //For testing; + if (!Test.isRunningTest()) { + update leadInfo; + } + } + rid = leadInfo.Id; + PIHelper.saveTransLog( + sobjectTypeValue, + (String) leadInfo.get('AWS_Data_Id__c'), + rid, + transId, + leadJson, + status, + '' + ); + resp.recordId = leadInfo.Id; + resp.message = ''; + resp.status = status; + System.debug('resp from sfdx back-end' + resp); + return resp; + } catch (DmlException e) { + 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) leadInfo.get('AWS_Data_Id__c'), + rid, + transId, + leadJson, + 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) leadInfo.get('AWS_Data_Id__c'), + rid, + transId, + leadJson, + status, + e.getMessage() + ); + resp.message = e.getMessage(); + resp.status = status; + return resp; + } + } + + @RemoteAction + global static String queryAccount(String accountTypes, String accountId) { + System.debug('accountType=' + accountTypes); + System.debug('accountId=' + accountId); + List<Object> types = (List<Object>) JSON.deserializeUntyped(accountTypes); + System.debug('types=' + types); + String soql = 'select Id,Name,'; + for (Object t : types) { + soql += (String) t + ','; + } + soql = soql.substring(0, soql.length() - 1); + soql += ' from Account where id=\'' + accountId + '\''; + System.debug('soql=' + soql); + Sobject account = new Account(); + if (!Test.isRunningTest()) { + account = Database.query(soql); + } else { + account.put('Id', '000000000000000'); } - global class Response{ - public String recordId{set;get;} - public String message{set;get;} - public String status{set;get;} + Map<String, Map<String, String>> m = new Map<String, Map<String, String>>(); + + System.debug('account=' + account); + for (Object ty : types) { + String t = (String) ty; + if (account.get(t) != null || Test.isRunningTest()) { + Sobject acc = new Account(); + if (Test.isRunningTest()) { + acc.put('Id', '000000000000000'); + acc.put('Name', 'Name'); + } else { + acc = Database.query( + 'select Id,Name from Account where id=\'' + account.get(t) + '\'' + ); + } + Map<String, String> n = new Map<String, String>(); + n.put('Id', (String) acc.get('Id')); + n.put('Name', (String) acc.get('Name')); + m.put(t, n); + } } + // if (account.get('Hospital__c') != null){ + // m.put('Hospital__c', (String)account.get('Hospital__c')); + // m.put('Hospital__r.Name', (String)account.get('Hospital__r.Name')); + // } + // if (account.get('Department_Class__c') != null){ + // m.put('Department_Class__c', (String)account.get('Department_Class__c')); + // m.put('Department_Class__r.Name', (String)account.get('Department_Class__r.Name')); + // } + System.debug('m=' + m); + return JSON.serialize(m); - @RemoteAction - global static Response saveLead(String leadJson,String transId,Boolean isNew) { - System.debug('Lead Info:' + JSON.serialize(leadJson)); - //1. Prepare the payload for Lead - Schema.SObjectType leadSchema = schemaMap.get(sobjectTypeValue); - Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe().fields.getMap(); - Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(leadJson); - Lead leadInfo = new Lead(); - String status = 'success'; - Response resp = new Response(); - Savepoint sp = Database.setSavepoint(); - Boolean isClone = false; - String rid = ''; - String awsDataId = ''; - try{ - //鑷畾涔夋牸寮忚浆鎹� - 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)); - system.debug('Field Type:'+fielddataType+' field Value='+fieldValue); - if(String.valueOf(fielddataType)=='DATE'){ - leadInfo.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',' '); - leadInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue)); - }else{ - leadInfo.put(fieldAPI, null); - } - }else if(String.valueof(fielddataType)=='CURRENCY'|| String.valueof(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){ - leadInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?null:Decimal.valueOf(fieldValue.replace(',', ''))); - } else if(String.valueof(fielddataType)=='BOOLEAN'){ - leadInfo.put(fieldAPI, fieldValueMap.get(fieldAPI)); - }else { - leadInfo.put(fieldAPI,fieldValue); - } - } - - //2. Save Record Process - - - System.debug('abcde'); - awsDataId = (String)leadInfo.get('AWS_Data_Id__c'); - System.debug('awsDataId = ' + awsDataId); - Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId]; - - if(!isNew){ - isClone = leads.size() == 0; - } - System.debug('isClone---------'+isClone); - //2022-6-10 yjk SWAG-CEY8GZ start - if(leadInfo.Hospital_Name__c != null){ - Account acc = [select id,Hospital__c from Account where id= :leadInfo.Hospital_Name__c]; - leadInfo.hospital__c = acc.Hospital__c; - } - //2022-6-10 yjk SWAG-CEY8GZ end - if(isNew || isClone){ - System.debug('leadInfozhj = ' + leadInfo); - if(!Test.isRunningTest()){ - insert leadInfo; - } - }else{ - System.debug('into update'); - // String awsDataId = (String)leadInfo.get('AWS_Data_Id__c'); - // System.debug('awsDataId = ' + awsDataId); - // Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId]; - System.debug('leads[0].id = ' + leads[0].id); - leadInfo.put('Id',leads[0].id);//For testing; - if(!Test.isRunningTest()){ - update leadInfo; - } - } - rid=leadInfo.Id; - PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson ,status,''); - resp.recordId = leadInfo.Id; - resp.message = ''; - resp.status = status; - System.debug('resp from sfdx back-end' + resp); - return resp; + // return (String)account.get('Hospital__c'); + } - } catch(DmlException e) { - 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()); + public static Integer ControllerUtil() { + Integer i = 0; - System.debug('into catch'+e.getMessage()); - Database.rollback(sp); - resp.status = 'Exception'; - resp.message ='淇濆瓨澶辫触锛屽師鍥�:'+ e.getDmlMessage(index); - PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId, leadJson ,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)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson,status,e.getMessage()); - resp.message = e.getMessage(); - resp.status = status; - return resp; - } - } - - @RemoteAction - global static String queryAccount(String accountTypes,String accountId) { - System.debug('accountType='+accountTypes); - System.debug('accountId='+accountId); - List<Object> types = (List<Object>)JSON.deserializeUntyped(accountTypes); - System.debug('types='+types); - String soql = 'select Id,Name,'; - for (Object t : types) { - soql += (String)t+','; - } - soql = soql.substring(0,soql.length()-1); - soql += ' from Account where id=\''+accountId+'\''; - System.debug('soql='+soql); - Sobject account = new Account(); - if(!Test.isRunningTest()){ - account = Database.query(soql); - }else{ - account.put('Id','000000000000000'); - } - - - Map<String, Map<String, String>> m = new Map<String, Map<String, String>>(); - - System.debug('account='+account); - for (Object ty : types) { - String t = (String)ty; - if (account.get(t) != null||Test.isRunningTest()){ - Sobject acc = new Account(); - if(Test.isRunningTest()){ - acc.put('Id','000000000000000'); - acc.put('Name','Name'); - }else{ - acc = Database.query('select Id,Name from Account where id=\''+account.get(t)+'\''); - } - Map<String, String> n = new Map<String, String>(); - n.put('Id', (String)acc.get('Id')); - n.put('Name', (String)acc.get('Name')); - m.put(t, n); - } - } - // if (account.get('Hospital__c') != null){ - // m.put('Hospital__c', (String)account.get('Hospital__c')); - // m.put('Hospital__r.Name', (String)account.get('Hospital__r.Name')); - // } - // if (account.get('Department_Class__c') != null){ - // m.put('Department_Class__c', (String)account.get('Department_Class__c')); - // m.put('Department_Class__r.Name', (String)account.get('Department_Class__r.Name')); - // } - System.debug('m='+m); - return JSON.serialize(m); - - // return (String)account.get('Hospital__c'); - } - - public static Integer ControllerUtil() { - Integer i = 0; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - i++; - return i;} -} \ No newline at end of file + return i; + } +} diff --git a/force-app/main/default/classes/NewAndEditLeadControllerTest.cls b/force-app/main/default/classes/NewAndEditLeadControllerTest.cls index 9aec75f..3c85e99 100644 --- a/force-app/main/default/classes/NewAndEditLeadControllerTest.cls +++ b/force-app/main/default/classes/NewAndEditLeadControllerTest.cls @@ -2,58 +2,316 @@ * Author: Guo, Aline Yaying * Created Date: 03/22/2022 * Purpose: Test Class - * History: + * History: * 03/22/2022 - Guo, Aline Yaying - Initial Code. - * + * * */ @isTest private class NewAndEditLeadControllerTest { - @TestSetup - static void makeData(){ - List<String> strList= new List<String>(); - strList.add('Lead'); - strList.add('Contact'); - strList.add('Inquiry_form__c'); - strList.add('LeadV2'); - TestDataUtility.CreatePIPolicyConfigurations(strList); + @TestSetup + static void makeData() { + List<String> strList = new List<String>(); + strList.add('Lead'); + strList.add('Contact'); + strList.add('Inquiry_form__c'); + strList.add('LeadV2'); + TestDataUtility.CreatePIPolicyConfigurations(strList); + } + static testMethod void testMethod1() { + Test.setMock( + HttpCalloutMock.class, + new TestDataUtility.CreateMetaDataUtilityHttpMock() + ); + Test.startTest(); + List<RecordType> rectCo = [ + SELECT Id + FROM RecordType + WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '鐥呴櫌' + ]; + if (rectCo.size() == 0) { + return; } - static testMethod void testMethod1() { + List<RecordType> rectAcc = [ + SELECT Id + FROM RecordType + WHERE + IsActive = TRUE + AND SobjectType = 'Account' + AND Name = '鎴︾暐绉戝鍒嗛 鍛煎惛绉�' + ]; + if (rectAcc.size() == 0) { + return; + } + Account accountItem1 = new Account( + Name = 'testaccount001', + Dealer_discount__c = 10, + RecordTypeId = rectCo[0].Id + ); + insert accountItem1; + Account accountItem3 = new Account( + Name = 'testaccount001', + Dealer_discount__c = 10, + RecordTypeId = rectAcc[0].Id, + ParentId = accountItem1.Id + ); + insert accountItem3; + Account accountItem2 = new Account( + Name = 'testaccount002', + Dealer_discount__c = 10, + RecordTypeId = rectCo[0].Id, + Hospital__c = accountItem1.Id, + Department_Class__c = accountItem3.Id + ); + insert accountItem2; - Test.setMock(HttpCalloutMock.class, new TestDataUtility.CreateMetaDataUtilityHttpMock()); - Test.startTest(); - Lead leadTest = new Lead(); - Contact cont = new Contact(); - ApexPages.StandardController con = new ApexPages.StandardController(leadTest); - NewAndEditLeadController lead = new NewAndEditLeadController(con); - - String leadJson = '{"RecordTypeId":"01210000000QiRaAAK","Lead_No__c":"IN-JS-2022040127183","Status":"鏈窡杩�","Hospital_Name__c":"0011000000VAPEt","Department_Class__c":"0011000000V9bh5","Salutation":"","LastName":"***","Contact_Name__c":"0031m00000DHrkV","Cancel_Reason__c":"","Phone":"","Opp_Name_Search__c":"000000000000000","Email":"","Opp_Name__c":"Test","owner_not_automatically_update__c":false,"Purchase_Plan__c":"鏈�(鏃犻绠�)","Lead_Inquiry_form__c":"000000000000000","Opportunity_Division__c":"璇环","LeadSource":"鐢佃瘽","Campaign__c":"000000000000000","urgent__c":false,"SI_PromoteInquiry__c":false,"Request__c":"","Request_Detail__c":"","Opportunity_stage__c":"棰勭畻娌℃湁鎵瑰噯","Close_Forecasted_Date__c":"2022/04/01","Purchase_Reason__c":"鏇存柊","Sales_Method__c":"鍗曚竴鏉ユ簮閲囪喘","Fund_Basis__c":"閵�琛岃硣閲�","Purchase_Type__c":"涓�鑸紩鍚�","Company":"姹熻嫃鐪佷汉姘戝尰闄� 鍛煎惛绉� 鍛煎惛绉�","Name_Encrypted__c":"48a2693f6bf73d16e0abd48caf7fb756","Phone_Encrypted__c":"","Email_Encrypted__c":"","AWS_Data_Id__c":"959584917346320385"}'; - NewAndEditLeadController.saveLead(leadJson,'avgwshDFcxAS',False); - NewAndEditLeadController.saveLead(leadJson,'avgwshDFcxAS',True); + Contact contact2 = new Contact(); + contact2.AccountId = accountItem2.Id; + contact2.FirstName = '璨换鑰�'; + contact2.LastName = 'test1缁忛攢鍟�'; + contact2.AWS_Data_Id__c = 'Test123'; + insert contact2; - Test.stopTest(); + Lead leadTest = new Lead(); + leadTest.LastName = 'test'; + leadTest.Company = 'test'; + leadTest.hospital__c = accountItem2.Hospital__c; + leadTest.Contact_Name__c = contact2.Id; + insert leadTest; + + Inquiry_form__c inquiryform = new Inquiry_form__c(); + inquiryform.Name = '2023062001'; + inquiryform.Request1__c = '闇�瑕佹姤浠�'; + inquiryform.Product1__c = '瓒呭0'; + inquiryform.Hospital__c = accountItem2.Hospital__c; + inquiryform.Contact_Name__c = contact2.Id; + + inquiryform.Opportunity_Division__c = '璇环'; + insert inquiryform; + + String contactDataId = contact2.AWS_Data_Id__c; + + Boolean isClone = true; + Boolean isNew = true; + Map<string, string> AWSToSobjectEncryptedMap = new Map<String, String>(); + String AWSToSobjectEncryptedMapJson = JSON.serialize( + AWSToSobjectEncryptedMap + ); + PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo( + 'Lead' + ); + for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) { + AWSToSobjectEncryptedMap.put( + PIDetail.AWS_Field_API__c, + PIDetail.SF_Field_API_Name__c + ); + } + Map<string, string> mso = ApexPages.currentPage().getParameters(); + mso.put('newclone', 'newclone'); + mso.put('CF00N1000000962np_lkid', inquiryform.Id); + mso.put('CF00N10000006ps6f_lkid', contact2.Id); + mso.put('CF00N10000002CvC5_lkid', accountItem2.Hospital__c); + mso.put('CF00N10000002CvC5', 'Company'); + mso.put('LeadSource', 'LeadSource'); + + String InquiryFormId = mso.get('CF00N1000000962np_lkid'); + String contactId = mso.get('CF00N10000006ps6f_lkid'); + Boolean isNewMode = false; + String recordId = leadTest.Id; + String rid = ''; + ApexPages.StandardController con = new ApexPages.StandardController( + leadTest + ); + NewAndEditLeadController lead = new NewAndEditLeadController(con); + Inquiry_form__c ifc = lead.ifc; + String token = lead.awsToken; + String AWSDataId = lead.AWSDataId; + String AWSDataIdInquiryForm = lead.AWSDataIdInquiryForm; + contactId = lead.contactId; //For Lookup field + String contactsInfo = lead.contactsInfo; //key sfid;value awsid + Map<String, String> sfIdToAWSIdMap = new Map<String, String>(); + + SObject obj = con.getRecord(); + obj.put('Hospital_Name__c', mso.get('CF00N10000002CvC5_lkid')); + String hospitalId = mso.get('CF00N10000002CvC5_lkid'); + if (obj.Id != null) { + Lead leadData = [ + SELECT + Id, + RecordTypeId, + AWS_Data_Id__c, + Contact_Name__r.Id, + Contact_Name__r.AWS_Data_Id__c + FROM Lead + WHERE id = :obj.Id + ]; + String rtTypeId = leadData.RecordTypeId; + AWSDataId = leadData.AWS_Data_Id__c; + if (leadData.Contact_Name__r.Id != null) { + sfIdToAWSIdMap.put( + String.valueof(leadData.Contact_Name__r.Id).subString(0, 15), + leadData.Contact_Name__r.AWS_Data_Id__c + ); + } + contactsInfo = JSON.serialize(sfIdToAWSIdMap); } - static testMethod void testMethod3() { - Lead leadTest = new Lead(); - String url = ApexPages.currentPage().getParameters().put('CF00N10000006ps6f_lkid','000000000000000'); - url = ApexPages.currentPage().getParameters().put('RecordType','01210000000QiRf'); - Test.startTest(); - try{ - NewAndEditLeadController.ControllerUtil(); - ApexPages.StandardController con = new ApexPages.StandardController(leadTest); - NewAndEditLeadController lc = new NewAndEditLeadController(con); - String jsonString = '["Department_Class__c"]'; - system.debug('jsonString:'+JSON.deserializeUntyped(jsonString)); - String token = lc.awsToken; - String AWSDataId = lc.AWSDataId; - String AWSDataIdInquiryForm = lc.AWSDataIdInquiryForm; - String contactId = lc.contactId;//For Lookup field - String contactsInfo = lc.contactsInfo ;//key sfid;value awsid - Inquiry_form__c ifc = lc.ifc; - NewAndEditLeadController.queryAccount(jsonString, '000000000000000'); - }catch(Exception e){ - system.debug('Exception from query account:'+e.getMessage()); - } - Test.stopTest(); + String leadJson = '{"RecordTypeId":"01210000000QiRaAAK","Lead_No__c":"IN-JS-2022040127183","Status":"鏈窡杩�","Hospital_Name__c":"0011000000VAPEt","Department_Class__c":"0011000000V9bh5","Salutation":"","LastName":"***","Contact_Name__c":"0031m00000DHrkV","Cancel_Reason__c":"","Phone":"","Opp_Name_Search__c":"000000000000000","Email":"","Opp_Name__c":"Test","owner_not_automatically_update__c":false,"Purchase_Plan__c":"鏈�(鏃犻绠�)","Lead_Inquiry_form__c":"000000000000000","Opportunity_Division__c":"璇环","LeadSource":"鐢佃瘽","Campaign__c":"000000000000000","urgent__c":false,"SI_PromoteInquiry__c":false,"Request__c":"","Request_Detail__c":"","Opportunity_stage__c":"棰勭畻娌℃湁鎵瑰噯","Close_Forecasted_Date__c":"2022/04/01","Purchase_Reason__c":"鏇存柊","Sales_Method__c":"鍗曚竴鏉ユ簮閲囪喘","Fund_Basis__c":"閵�琛岃硣閲�","Purchase_Type__c":"涓�鑸紩鍚�","Company":"姹熻嫃鐪佷汉姘戝尰闄� 鍛煎惛绉� 鍛煎惛绉�","Name_Encrypted__c":"48a2693f6bf73d16e0abd48caf7fb756","Phone_Encrypted__c":"","Email_Encrypted__c":"","AWS_Data_Id__c":"959584917346320385"}'; + NewAndEditLeadController.saveLead(leadJson, 'avgwshDFcxAS', false); + NewAndEditLeadController.saveLead(leadJson, 'avgwshDFcxAS', true); + NewAndEditLeadController.saveLead(leadJson, 'avgwshDFcxAS', isNew); + + Test.stopTest(); + } + + static testMethod void testMethod2() { + Test.setMock( + HttpCalloutMock.class, + new TestDataUtility.CreateMetaDataUtilityHttpMock() + ); + Test.startTest(); + List<RecordType> rectCo = [ + SELECT Id + FROM RecordType + WHERE IsActive = TRUE AND SobjectType = 'Account' AND Name = '鐥呴櫌' + ]; + if (rectCo.size() == 0) { + return; } -} \ No newline at end of file + List<RecordType> rectAcc = [ + SELECT Id + FROM RecordType + WHERE + IsActive = TRUE + AND SobjectType = 'Account' + AND Name = '鎴︾暐绉戝鍒嗛 鍛煎惛绉�' + ]; + if (rectAcc.size() == 0) { + return; + } + Account accountItem1 = new Account( + Name = 'testaccount001', + Dealer_discount__c = 10, + RecordTypeId = rectCo[0].Id + ); + insert accountItem1; + Account accountItem3 = new Account( + Name = 'testaccount001', + Dealer_discount__c = 10, + RecordTypeId = rectAcc[0].Id, + ParentId = accountItem1.Id + ); + insert accountItem3; + Account accountItem2 = new Account( + Name = 'testaccount002', + Dealer_discount__c = 10, + RecordTypeId = rectCo[0].Id, + Hospital__c = accountItem1.Id, + Department_Class__c = accountItem3.Id + ); + insert accountItem2; + + Contact contact2 = new Contact(); + contact2.AccountId = accountItem2.Id; + contact2.FirstName = '璨换鑰�'; + contact2.LastName = 'test1缁忛攢鍟�'; + contact2.AWS_Data_Id__c = 'Test123'; + insert contact2; + + Lead leadTest = new Lead(); + leadTest.LastName = 'test'; + leadTest.Company = 'test'; + leadTest.hospital__c = accountItem2.Hospital__c; + leadTest.Contact_Name__c = contact2.Id; + insert leadTest; + + Inquiry_form__c inquiryform = new Inquiry_form__c(); + inquiryform.Name = '2023062001'; + inquiryform.Request1__c = '闇�瑕佹姤浠�'; + inquiryform.Product1__c = '瓒呭0'; + inquiryform.Hospital__c = accountItem2.Hospital__c; + inquiryform.Contact_Name__c = contact2.Id; + + inquiryform.Opportunity_Division__c = '璇环'; + insert inquiryform; + + String contactDataId = contact2.AWS_Data_Id__c; + + Boolean isClone = true; + Boolean isNew = true; + Map<string, string> AWSToSobjectEncryptedMap = new Map<String, String>(); + String AWSToSobjectEncryptedMapJson = JSON.serialize( + AWSToSobjectEncryptedMap + ); + PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo( + 'Lead' + ); + for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) { + AWSToSobjectEncryptedMap.put( + PIDetail.AWS_Field_API__c, + PIDetail.SF_Field_API_Name__c + ); + } + Map<string, string> mso = ApexPages.currentPage().getParameters(); + mso.put('newclone', 'newclone'); + mso.put('CF00N1000000962np_lkid', null); + mso.put('CF00N10000006ps6f_lkid', contact2.Id); + mso.put('CF00N10000002CvC5_lkid', accountItem2.Hospital__c); + mso.put('CF00N10000002CvC5', 'Company'); + mso.put('LeadSource', 'LeadSource'); + + String InquiryFormId = mso.get('CF00N1000000962np_lkid'); + String contactId = mso.get('CF00N10000006ps6f_lkid'); + Boolean isNewMode = false; + String recordId = leadTest.Id; + String rid = ''; + ApexPages.StandardController con = new ApexPages.StandardController( + leadTest + ); + NewAndEditLeadController lead = new NewAndEditLeadController(con); + Inquiry_form__c ifc = lead.ifc; + String token = lead.awsToken; + String AWSDataId = lead.AWSDataId; + String AWSDataIdInquiryForm = lead.AWSDataIdInquiryForm; + String contactsInfo = lead.contactsInfo; //key sfid;value awsid + Map<String, String> sfIdToAWSIdMap = new Map<String, String>(); + SObject obj = con.getRecord(); + obj.put('Hospital_Name__c', mso.get('CF00N10000002CvC5_lkid')); + String hospitalId = mso.get('CF00N10000002CvC5_lkid'); + + String leadJson = '{"RecordTypeId":"01210000000QiRaAAK","Lead_No__c":"IN-JS-2022040127183","Status":"鏈窡杩�","Hospital_Name__c":"0011000000VAPEt","Department_Class__c":"0011000000V9bh5","Salutation":"","LastName":"***","Contact_Name__c":"0031m00000DHrkV","Cancel_Reason__c":"","Phone":"","Opp_Name_Search__c":"000000000000000","Email":"","Opp_Name__c":"Test","owner_not_automatically_update__c":false,"Purchase_Plan__c":"鏈�(鏃犻绠�)","Lead_Inquiry_form__c":"000000000000000","Opportunity_Division__c":"璇环","LeadSource":"鐢佃瘽","Campaign__c":"000000000000000","urgent__c":false,"SI_PromoteInquiry__c":false,"Request__c":"","Request_Detail__c":"","Opportunity_stage__c":"棰勭畻娌℃湁鎵瑰噯","Close_Forecasted_Date__c":"2022/04/01","Purchase_Reason__c":"鏇存柊","Sales_Method__c":"鍗曚竴鏉ユ簮閲囪喘","Fund_Basis__c":"閵�琛岃硣閲�","Purchase_Type__c":"涓�鑸紩鍚�","Company":"姹熻嫃鐪佷汉姘戝尰闄� 鍛煎惛绉� 鍛煎惛绉�","Name_Encrypted__c":"48a2693f6bf73d16e0abd48caf7fb756","Phone_Encrypted__c":"","Email_Encrypted__c":"","AWS_Data_Id__c":"959584917346320385"}'; + NewAndEditLeadController.saveLead(leadJson, 'avgwshDFcxAS', false); + NewAndEditLeadController.saveLead(leadJson, 'avgwshDFcxAS', true); + NewAndEditLeadController.saveLead(leadJson, 'avgwshDFcxAS', isNew); + Test.stopTest(); + } + + static testMethod void testMethod3() { + Lead leadTest = new Lead(); + String url = ApexPages.currentPage() + .getParameters() + .put('CF00N10000006ps6f_lkid', '000000000000000'); + url = ApexPages.currentPage() + .getParameters() + .put('RecordType', '01210000000QiRf'); + Test.startTest(); + try { + NewAndEditLeadController.ControllerUtil(); + ApexPages.StandardController con = new ApexPages.StandardController( + leadTest + ); + NewAndEditLeadController lc = new NewAndEditLeadController(con); + String jsonString = '["Department_Class__c"]'; + system.debug('jsonString:' + JSON.deserializeUntyped(jsonString)); + String token = lc.awsToken; + String AWSDataId = lc.AWSDataId; + String AWSDataIdInquiryForm = lc.AWSDataIdInquiryForm; + String contactId = lc.contactId; //For Lookup field + String contactsInfo = lc.contactsInfo; //key sfid;value awsid + Inquiry_form__c ifc = lc.ifc; + NewAndEditLeadController.queryAccount(jsonString, '000000000000000'); + } catch (Exception e) { + system.debug('Exception from query account:' + e.getMessage()); + } + Test.stopTest(); + } +} diff --git a/manifest/package.xml b/manifest/package.xml index eb566a1..3929886 100644 --- a/manifest/package.xml +++ b/manifest/package.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <Package xmlns="http://soap.sforce.com/2006/04/metadata"> <types> - <members>CreateTarget</members> - <name>AuraDefinitionBundle</name> + <members>LayoutDescriberHelperTest</members> + <members>LayoutDescriberHelper</members> + <members>NewAndEditLeadController</members> + <members>NewAndEditLeadControllerTest</members> + <name>ApexClass</name> </types> <version>52.0</version> </Package> -- Gitblit v1.9.1