/*
|
* Author: Zhang,Heyang
|
* Created Date: 2023/08/07
|
* Purpose: get page layout and record data
|
* Test Class: LexNewAndEditInquiryPIPLControllerTest
|
*
|
* */
|
public with sharing class LexNewAndEditInquiryPIPLController {
|
public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
|
// 字段信息
|
public static Map<string, SObjectField> fieldMap = new Map<string, SObjectField>();
|
|
@AuraEnabled
|
public static ResponseBodyLWC initData(Id rid, String recordTypeId, String sobjectType) {
|
System.debug('enter LexNewAndEditInquiryPIPLController initData');
|
System.debug('start recordTypeId = ' + recordTypeId);
|
fieldMap = schemaMap.get(sobjectType).getDescribe().fields.getMap();
|
ResponseBodyLWC res = new ResponseBodyLWC();
|
Map<String, object> data = new Map<String, object>();
|
res.entity = data;
|
//deloitte-zhj 20231116 PIPL还原 start
|
// ResponseBodyLWC rbl = LexNewAndEditBasePIPLController.initData(rid, recordTypeId, sobjectType);
|
// data = (Map<String,Object>)rbl.entity;
|
//data.put('staticResourceContact', Json.serialize(PIHelper.getPIIntegrationInfo('Contact')));
|
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<String, Map<String, String>> titleMap = new Map<String, Map<String, String>>();
|
List<LEX_PIPL_Layout_Config__mdt> 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<String, String>.class));
|
Map<String, Object> tempMap = (Map<String, Object>)JSON.deserializeUntyped(piLayoutConfig.Layout_Header__c);
|
Map<String, String> innerMap = new Map<String, String>();
|
for (String key : tempMap.keySet()) {
|
innerMap.put(key, (String)tempMap.get(key));
|
}
|
titleMap.put(piLayoutConfig.Sobject_Type__c, innerMap);
|
}
|
}
|
//deloitte-zhj 2023/07/31 自定义元数据配置titleMap end
|
//编辑
|
if(!String.isBlank(rid)){
|
//获取对应对象的字段 List<Sobject> lso = Database.query('select id from RecordType where SobjectType = :sobjectType');
|
String sql = 'select ';
|
DescribeSObjectResult objectType = rid.getSobjectType().getDescribe();
|
List<String> objectFields = new List<String>(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<Metadata.LayoutSection> 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<Metadata.LayoutSection> 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
|
String LeadCreatedDate =Date.today().format();
|
if(String.isNotBlank(rid)){
|
String sql = 'select '; //deloitte-zhj 20231116 PIPL还原
|
DescribeSObjectResult objectType = rid.getSobjectType().getDescribe();
|
List<String> objectFields = new List<String>(objectType.fields.getMap().keySet());
|
sql += String.join(objectFields, ',') +' from '+sobjectType+' where id =\''+rid+'\' limit 1';
|
Sobject leadData = Database.query(sql);
|
LeadCreatedDate = leadData.get('CreatedDate')!= null ? Date.newInstance(((Datetime)leadData.get('CreatedDate')).year(), ((Datetime)leadData.get('CreatedDate')).month(), ((Datetime)leadData.get('CreatedDate')).day()).format() : Date.today().format();
|
data.put('data',leadData);
|
}
|
data.put('LeadCreatedDate',LeadCreatedDate);
|
res.status = 'Success';
|
res.code = 200;
|
res.msg = '';
|
return res;
|
}
|
|
@AuraEnabled
|
public static Map<String, Object> getAccountByHospitalName(String hosName){
|
Map<String, Object> resultMap = new Map<String, Object>();
|
Account departmentInfo = [SELECT Id,name,ParentId,Parent.Name,Parent.Parent.Name,Parent.ParentId FROM Account where Id=: hosName Limit 1];
|
if(departmentInfo == null){
|
resultMap.put('departmentInfo', new Account());
|
}else{
|
resultMap.put('departmentInfo', departmentInfo);
|
}
|
return resultMap;
|
}
|
|
@AuraEnabled
|
public static Map<String, Object> getContactById(String contactId){
|
Map<String, Object> resultMap = new Map<String, Object>();
|
Contact contactInfo = [SELECT Id,MobilePhone,Email FROM Contact where Id=: contactId Limit 1];
|
if(contactInfo == null){
|
resultMap.put('contactInfo', new Contact());
|
}else{
|
resultMap.put('contactInfo', contactInfo);
|
}
|
return resultMap;
|
}
|
|
/**
|
*@description 转换layout
|
*@param sections 默认metalayout
|
*@return List<Metadata.LayoutSection> 标准metalayout
|
*/
|
public static List<Metadata.LayoutSection> reviseMetaLayouts(List<Metadata.LayoutSection> sections) {
|
List<Metadata.LayoutSection> result = new List<Metadata.LayoutSection>();
|
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<String>{ 'Id', 'Name' }).contains(dfr.getName()) || dfr.isUpdateable();
|
}
|
}
|