/*  * Author: Zhang,Heyang  * Created Date: 2023/08/07  * Purpose: get page layout and record data * Test Class: LexNewAndEditQISPIPLControllerTest  *  * */ public with sharing class LexNewAndEditQISPIPLController { public static Map schemaMap = Schema.getGlobalDescribe(); // 字段信息 public static Map fieldMap = new Map(); @AuraEnabled public static ResponseBodyLWC initData(Id rid, String recordTypeId, String sobjectType) { System.debug('enter LexNewAndEditQISPIPLController initData'); System.debug('start recordTypeId = ' + recordTypeId); fieldMap = schemaMap.get(sobjectType).getDescribe().fields.getMap(); ResponseBodyLWC res = new ResponseBodyLWC(); Map data = new Map(); res.entity = data; //deloitte-zhj 20231116 PIPL还原 start if (String.isBlank(recordTypeId)) { String recordTypeIdTemp = LayoutDescriberHelper.getDefaultRecordType(sobjectType); System.debug('recordTypeIdTemp = ' + recordTypeIdTemp); if(recordTypeIdTemp != System.Label.target_customer){ data.put('recordTypeId',recordTypeIdTemp); recordTypeId = recordTypeIdTemp; } else { data.put('recordTypeId',null); recordTypeId = null; } }else { data.put('recordTypeId',recordTypeId); } //deloitte-zhj 2023/07/31 自定义元数据配置titleMap start Map> titleMap = new Map>(); List piLayoutConfigList = [SELECT id,DeveloperName, Layout_Header__c, Sobject_Type__c FROM LEX_PIPL_Layout_Config__mdt]; if(piLayoutConfigList.size() > 0){ for(LEX_PIPL_Layout_Config__mdt piLayoutConfig : piLayoutConfigList){ //titleMap.put(piLayoutConfig.Sobject_Type__c,JSON.deserialize(piLayoutConfig.Layout_Header__c, Map.class)); Map tempMap = (Map)JSON.deserializeUntyped(piLayoutConfig.Layout_Header__c); Map innerMap = new Map(); for (String key : tempMap.keySet()) { innerMap.put(key, (String)tempMap.get(key)); } titleMap.put(piLayoutConfig.Sobject_Type__c, innerMap); } } //编辑 if(!String.isBlank(rid)){ //获取对应对象的字段 List lso = Database.query('select id from RecordType where SobjectType = :sobjectType'); String sql = 'select '; DescribeSObjectResult objectType = rid.getSobjectType().getDescribe(); List objectFields = new List(objectType.fields.getMap().keySet()); sql += String.join(objectFields, ',') +' from '+sobjectType+' where id =\''+rid+'\' limit 1'; System.debug('sql = ' + sql); Sobject leadData = Database.query(sql); System.debug('leadData_20230711 = ' + leadData); if(leadData == null){ return new ResponseBodyLWC('Error',500, 'id不存在', ''); } if(objectFields.contains('recordtypeid')){ recordTypeId = (String)leadData.get('RecordTypeId'); System.debug('recordTypeId_20230711_Debug = ' + recordTypeId); } List layout = MetaDataUtility.GetRecordTypePageLayout(recordTypeId, sobjectType); System.debug('layout=' + layout); for (Metadata.LayoutSection section : layout) { if(titleMap.containsKey(sobjectType) && titleMap.get(sobjectType).containsKey(section.label)){ section.label = titleMap.get(sobjectType).get(section.label); } } data.put('layout', Json.serialize(reviseMetaLayouts(layout))); data.put('recordTypeId', recordTypeId); System.debug('data.recordTypeId: ' + data.get('recordTypeId')); //获取值 System.debug('leadData = ' + JSON.serialize(leadData)); data.put('data', leadData); }else { List layout = MetaDataUtility.GetRecordTypePageLayout(recordTypeId, sobjectType); System.debug('layout = ' + JSON.serialize(layout)); for (Metadata.LayoutSection section : layout) { if(titleMap.containsKey(sobjectType) && titleMap.get(sobjectType).containsKey(section.label)){ section.label = titleMap.get(sobjectType).get(section.label); } } System.debug('leadPIPL还原 layout = ' + JSON.serialize(layout)); data.put('layout', Json.serialize(reviseMetaLayouts(layout))); System.debug('leadPIPLreviseMetaLayouts还原 layout = ' + data.get('layout')); } //deloitte-zhj 20231116 PIPL还原 end res.status = 'Success'; res.code = 200; res.msg = ''; return res; } /** *@description 转换layout *@param sections 默认metalayout *@return List 标准metalayout */ public static List reviseMetaLayouts(List sections) { List result = new List(); if (sections == null) { return null; } for (Metadata.LayoutSection s : sections) { Metadata.LayoutSection section = new Metadata.LayoutSection(); section.customLabel = s.customLabel; section.detailHeading = s.detailHeading; section.editHeading = s.editHeading; section.label = s.label; section.style = s.style; result.add(section); for (Metadata.LayoutColumn c : s.layoutColumns) { if (c.layoutItems == null) { break; } Metadata.LayoutColumn col = new Metadata.LayoutColumn(); col.reserved = col.reserved; section.layoutColumns.add(col); for (Metadata.layoutItem item : c.layoutItems) { if(item.field == 'Consum_Apply_Equipment_Set__c'){ col.layoutItems.add(item); } if (item.emptySpace != true && (!fieldMap.containsKey(item.field) || !isUpdateable(fieldMap.get(item.field).getDescribe())) && item.field != 'IsJump_Rental__c' && item.field != 'JumpCause_Rental__c') { continue; } col.layoutItems.add(item); } } } return result; } private static Boolean isUpdateable(Schema.DescribeFieldResult dfr) { return (new List{ 'Id', 'Name' }).contains(dfr.getName()) || dfr.isUpdateable(); } }