From 5c01ebbfddb6b8674430b47c22977bea2e350084 Mon Sep 17 00:00:00 2001
From: Li Jun <buli@deloitte.com.cn>
Date: 星期三, 13 四月 2022 10:58:46 +0800
Subject: [PATCH] BackupPIPLFunction0413

---
 force-app/main/default/classes/LayoutDescriberHelper.cls |  831 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 821 insertions(+), 10 deletions(-)

diff --git a/force-app/main/default/classes/LayoutDescriberHelper.cls b/force-app/main/default/classes/LayoutDescriberHelper.cls
index 8231dd8..ec17bad 100644
--- a/force-app/main/default/classes/LayoutDescriberHelper.cls
+++ b/force-app/main/default/classes/LayoutDescriberHelper.cls
@@ -10,11 +10,35 @@
 
 public class LayoutDescriberHelper {
     public static String urlPrefixToUse {get;set;}
-    public static Set<String> ConcatenationNameSType = new Set<String>{'Lead','Contact'};  
+    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 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);
@@ -76,7 +100,7 @@
                         /*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('editableForNew'); // Check the editable prop
+                        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];
@@ -87,21 +111,35 @@
                                     lf.isPlaceHolder = placeholderF;
                                     lf.editableField = isEditable;
                                     lf.fieldAPI = fieldLabelPrefix+addressType;
+                                    
                                     lf.fieldLabel = fieldLabelPrefix+' '+addressType;
-                                    lf.fieldType = 'string';
+                                    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>{'LastName'};
+                                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;
@@ -111,8 +149,21 @@
                                         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();
@@ -126,7 +177,18 @@
                                 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;
@@ -138,6 +200,7 @@
             }
         }
         System.debug('Layout Section Result:'+JSon.serialize(layoutSections));
+        system.debug('required API List:'+JSON.serialize(requiredFieldAPIList));
         return layoutSections;
     }
     public static String getUrlPrefix(){
@@ -159,6 +222,7 @@
         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());
@@ -169,8 +233,10 @@
         return resp.getBody();
     }
 
-    public static Id  getDefaultRecordType(SObject obj) {
-        Schema.DescribeSObjectResult describeResult = obj.getsObjectType().getDescribe();
+    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) {              
@@ -179,7 +245,11 @@
         }
         return null;
     }
-    
+    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;}
+    }
     public class LayoutSection{
         @AuraEnabled public boolean useHeader {get;set;}
         @AuraEnabled public String name {get;set;}
@@ -197,4 +267,745 @@
         @AuraEnabled public boolean isPlaceHolder {get;set;}      
         @AuraEnabled public String defaultValue{set;get;}      
     }
+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;
+}
+
 }
\ No newline at end of file

--
Gitblit v1.9.1