From 4cf305347ea6f6a73e03fa9427a3de80ca35ae7a Mon Sep 17 00:00:00 2001
From: buli <137736985@qq.com>
Date: 星期一, 25 四月 2022 14:37:30 +0800
Subject: [PATCH] SSBGEnhancement0425
---
force-app/main/default/classes/NewAndEditBaseController.cls | 193 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 191 insertions(+), 2 deletions(-)
diff --git a/force-app/main/default/classes/NewAndEditBaseController.cls b/force-app/main/default/classes/NewAndEditBaseController.cls
index 49ce172..1b59edd 100644
--- a/force-app/main/default/classes/NewAndEditBaseController.cls
+++ b/force-app/main/default/classes/NewAndEditBaseController.cls
@@ -109,6 +109,9 @@
}else{
rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
}
+
+ AssignValueFromUrl(ApexPages.currentPage().getParameters(),obj);
+
PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo(sobjectTypeValue);
//layoutEncryptedAPIList = piIntegration.PIFields;
encryptedAPIList = piIntegration.PIFields;
@@ -119,6 +122,7 @@
SaveAndNewButtonUrl = String.format('/setup/ui/recordtypeselect.jsp?ent={0}&retURL=/{1}/o&save_new_url=/{1}/e?retURL=%2F{1}%2Fo', new String[]{sobjectTypeValue,sobjectPrefix});
}
+ system.debug('piIntegration.PIDetails='+piIntegration.PIDetails);
for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) {
AWSToSobjectNonEncryptedMap.put(PIDetail.AWS_Field_API__c, PIDetail.SF_Field_API_Name__c);
@@ -127,6 +131,7 @@
System.debug(new List<string>(AWSToSobjectNonEncryptedMap.keySet()));
system.debug('AWSToSobjectNonEncryptedMapJson=');
system.debug(AWSToSobjectNonEncryptedMapJson);
+ system.debug('AWSToSobjectEncryptedMap='+AWSToSobjectEncryptedMap);
try{
LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, sobjectTypeValue,'classic');
layoutSections = LayoutWrapperValue.layoutSections;
@@ -158,6 +163,147 @@
layoutEncryptedAPIList = piIntegration.PIFields;
system.debug('Exception from get layout service:'+e.getmessage());
}
+ }
+
+ // 浠巙rl鍙傛暟璧嬪�煎埌褰撳墠椤甸潰
+ public static void AssignValueFromUrl(Map<string,string> mso, sobject sobj){
+
+ String sobject_name = sobj.getSObjectType().getDescribe().getName();
+ Map<string,object> temp = new Map<string,object>();
+ Map<string,FieldDefinition> fdm = new Map<string,FieldDefinition>();
+ List<FieldDefinition> fds = [SELECT Id, DurableId, QualifiedApiName,ValueTypeId , EntityDefinitionId, NamespacePrefix,EntityDefinition.NamespacePrefix, DeveloperName, MasterLabel, Label FROM FieldDefinition where EntityDefinition.QualifiedApiName = :sobject_name];
+ for(FieldDefinition fd : fds){
+ //system.debug(fd.DurableId);
+ fdm.put(fd.DurableId.split('\\.')[1],fd);
+ }
+
+ for(string key : mso.keySet()){
+ if (key.toLowerCase() == 'id') {
+ System.debug('skip id assign');
+ continue;
+ }
+ string new_key = key;
+ system.debug('new_key='+new_key);
+ if(new_key.contains('_lkid')){
+ new_key = new_key.replace('_lkid', '');
+ new_key = new_key.substring(2);
+ }else{
+ if(temp.containsKey(new_key)){
+ continue;
+ }
+ }
+
+ system.debug('now new_key='+new_key);
+ if(fdm.containsKey(new_key)){
+ system.debug('fdm.get(new_key)='+fdm.get(new_key));
+ string val_str = mso.get(key);
+ system.debug('val_str='+val_str);
+ /*鏃犻渶鍋歞ecode锛宻f鍐呴儴宸茬粡鍋氬ソ
+ try{
+ val_str = EncodingUtil.urlDecode(mso.get(key),'UTF-8');
+ }catch(Exception e){
+ continue;
+ system.debug('Exception from get Key:'+e.getMessage());
+ system.debug(e.getStackTraceString());
+ } */
+ object val = null;
+ string type_id = fdm.get(new_key).ValueTypeId;
+ // address, boolean, date, datetime, double, id, location, string, time
+ if(string.isBlank(val_str)){
+ val = null;
+ }else if(type_id == 'boolean'){
+ if(val_str == '1'){
+ val = true;
+ }else{
+ val = boolean.valueOf(val_str);
+ }
+ }else if(type_id == 'date'){
+ //
+ try{
+ val = date.parse(val_str);
+ }catch(Exception e){
+ system.debug('val_str='+val_str);
+ system.debug(e.getMessage());
+ system.debug(e.getStackTraceString());
+ try{
+ val = date.valueOf(val_str);
+ }catch(Exception ee){
+ system.debug('val_str='+val_str);
+ system.debug(ee.getMessage());
+ system.debug(ee.getStackTraceString());
+ continue;
+ }
+ }
+ }else if(type_id == 'datetime'){
+ //
+ try{
+ val = datetime.parse(val_str);
+ }catch(Exception e){
+ system.debug('val_str='+val_str);
+ system.debug(e.getMessage());
+ system.debug(e.getStackTraceString());
+ try{
+ val = datetime.valueOf(val_str);
+ }catch(Exception ee){
+ system.debug('val_str='+val_str);
+ system.debug(ee.getMessage());
+ system.debug(ee.getStackTraceString());
+ continue;
+ }
+ }
+ }else if(type_id == 'double' || type_id == 'number'){
+ try{
+ val = decimal.valueOf(val_str.replace(',', ''));
+ }catch(Exception ee){
+ system.debug('val_str='+val_str);
+ system.debug(ee.getMessage());
+ system.debug(ee.getStackTraceString());
+ continue;
+ }
+
+ }else if(type_id == 'id' || type_id == 'string'){
+ val = val_str;
+ }else{
+ system.debug('type_id='+type_id+' is not support to convert');
+ continue;
+ }
+ temp.put(fdm.get(new_key).QualifiedApiName,val);
+ }else{
+ system.debug(key+' is not in fdm');
+ }
+ }
+
+ for(string key : temp.keySet()){
+ system.debug('assign '+key+'='+temp.get(key));
+ try{
+ sobj.put(key, temp.get(key));
+ }catch(Exception e){
+ system.debug(e.getMessage());
+ system.debug(e.getStackTraceString());
+ }
+ }
+ }
+
+ public static boolean IsCurrentUserAdministrator()
+ {
+ return IsAdministrator(UserInfo.getUserId());
+ }
+
+
+ public static boolean IsAdministrator(Id user_id)
+ {
+ return IsAdministrator(new List<id>{user_id}).get(user_id);
+ }
+
+ public static Map<id,boolean> IsAdministrator(List<id> user_ids)
+ {
+ Map<id,User> pfs = new Map<id,User>([select id from User where id in :user_ids and profileid in ( SELECT profileId FROM PermissionSet WHERE IsOwnedByProfile = true AND IsCustom = false and permissionsmanageusers = true)]);
+
+ Map<id,boolean> res = new Map<id,boolean>();
+ for(Id uid: user_ids){
+ res.put(uid, pfs.containsKey(uid));
+ }
+ return res;
}
public static string GetReferenceField(string f){
@@ -198,7 +344,12 @@
Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe().fields.getMap();
Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(leadJson);
-
+ string rtid = null;
+ if (fieldValueMap.containsKey('RecordTypeId')) {
+ rtid = String.valueOf(fieldValueMap.get('RecordTypeId'));
+ }
+ List<string> invalid_fields = GetInvalidFieldFromLayout(rtid,sobjectTypeValue);
+
Boolean isClone = false;
//2. Save Record Process
String status = 'success';
@@ -210,6 +361,12 @@
for (String fieldAPI: fieldValueMap.keySet()) {
system.debug('field API='+fieldAPI);
+
+ if(invalid_fields.contains(fieldAPI) && !IsCurrentUserAdministrator()){
+ system.debug(fieldAPI+' is invalid');
+ continue;
+ }
+
if(!fieldAPIToTypeMap.containskey(fieldAPI)){
continue;
}
@@ -238,7 +395,7 @@
leadInfo.put(fieldAPI,fieldValue);
}
}
-
+
system.debug('for (String fieldAPI: fieldValueMap.keySet()) end');
awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
if (string.isBlank(awsDataId)) {
@@ -312,4 +469,36 @@
}
}
+ public static List<string> GetInvalidFieldFromLayout(string rtid, string sobject_name){
+
+ List<Metadata.LayoutSection> sections = MetaDataUtility.GetRecordTypePageLayout(rtid, sobject_name);
+ List<string> ls = new List<string>();
+ if (sections == null) {
+ System.debug('sections=null');
+ return ls;
+ }
+
+ system.debug(Json.serialize(sections));
+
+ for (Metadata.LayoutSection section : sections) {
+ if (section.layoutColumns != null) {
+ for (Metadata.LayoutColumn layoutColumn : section.layoutColumns) {
+ if(layoutColumn.layoutItems != null){
+ for (Metadata.LayoutItem item : layoutColumn.layoutItems) {
+
+ System.debug(item);
+ if(item.field==null)continue;
+ if (item.behavior == Metadata.UiBehavior.READONLY ) {
+ ls.add(item.field);
+ }
+ }
+ }
+
+ }
+ }
+
+ }
+ return ls;
+ }
+
}
\ No newline at end of file
--
Gitblit v1.9.1