public without sharing class LexNewAndEditBasePIPLController {
|
public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
|
// 字段信息
|
public static Map<string, SObjectField> fieldMap = new Map<string, SObjectField>();
|
|
public static ResponseBodyLWC initData(Id rid, String recordTypeId, String sobjectType) {
|
try {
|
System.debug('rid = ' + rid);
|
System.debug('recordTypeId = ' + recordTypeId);
|
System.debug('sobjectType = ' + sobjectType);
|
fieldMap = schemaMap.get(sobjectType).getDescribe().fields.getMap();
|
ResponseBodyLWC res = new ResponseBodyLWC();
|
Map<String, object> data = new Map<String, object>();
|
res.entity = data;
|
|
if (String.isBlank(recordTypeId)) {
|
data.put('recordTypeId', LayoutDescriberHelper.getDefaultRecordType(sobjectType));
|
}
|
|
//编辑
|
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);
|
if (leadData == null) {
|
return new ResponseBodyLWC('Error', 500, 'id不存在', '');
|
}
|
if (objectFields.contains('recordtypeid')) {
|
recordTypeId = (String) leadData.get('RecordTypeId');
|
System.debug('recordTypeId: ' + recordTypeId);
|
}
|
List<Metadata.LayoutSection> layout = MetaDataUtility.GetRecordTypePageLayout(recordTypeId, sobjectType);
|
data.put('layout', Json.serialize(reviseMetaLayouts(layout)));
|
data.put('recordTypeId', recordTypeId);
|
System.debug('data.recordTypeId: ' + data.get('recordTypeId'));
|
data.put('AWSDataId', (String) leadData.get('AWS_Data_Id__c'));
|
//获取值
|
System.debug('leadData = ' + JSON.serialize(leadData));
|
data.put('data', leadData);
|
} else {
|
List<Metadata.LayoutSection> layout = MetaDataUtility.GetRecordTypePageLayout(recordTypeId, sobjectType);
|
data.put('layout', Json.serialize(reviseMetaLayouts(layout)));
|
}
|
//获取PI字段
|
PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo(sobjectType);
|
Map<String, String> AWSToSobjectNonEncryptedMap = new Map<String, String>();
|
List<String> AWSToSobjectNonEncryptedMapKeySet = new List<String>();
|
for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) {
|
AWSToSobjectNonEncryptedMap.put(PIDetail.AWS_Field_API__c, PIDetail.SF_Field_API_Name__c);
|
AWSToSobjectNonEncryptedMapKeySet.add(PIDetail.AWS_Field_API__c);
|
}
|
data.put('AWSToSobjectNonEncryptedMap', AWSToSobjectNonEncryptedMap);
|
data.put('AWSToSobjectNonEncryptedMapKeySet', AWSToSobjectNonEncryptedMapKeySet);
|
data.put('staticResource', Json.serialize(PIHelper.getPIIntegrationInfo(sobjectType)));
|
res.status = 'Success';
|
res.code = 200;
|
res.msg = '';
|
return res;
|
} catch (Exception e) {
|
System.debug('error = ' + e.getMessage() + ' line = ' + e.getLineNumber());
|
return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), '');
|
}
|
}
|
|
public static ResponseBodyLWC queryAccount(String accountTypes, String accountId) {
|
ResponseBodyLWC res = new ResponseBodyLWC();
|
Map<String, object> data = new Map<String, object>();
|
res.entity = data;
|
System.debug('accountType = ' + accountTypes);
|
System.debug('accountId = ' + accountId);
|
try {
|
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);
|
}
|
}
|
System.debug('m=' + m);
|
data.put('m', m);
|
data.put('account', account);
|
res.status = 'Success';
|
res.code = 200;
|
res.msg = '';
|
return res;
|
} catch (Exception e) {
|
return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), '');
|
}
|
}
|
|
public static ResponseBodyLWC searchContactInit(String accountId, String searchKeyWord) {
|
ResponseBodyLWC res = new ResponseBodyLWC();
|
Map<String, object> data = new Map<String, object>();
|
res.entity = data;
|
System.debug('accountId = ' + accountId);
|
System.debug('searchKeyWord = ' + searchKeyWord);
|
try {
|
List<Contact> conList = new List<Contact>();
|
List<Contact> noPIContactList = new List<Contact>();
|
if (checkNullString(accountId) && checkNullString(searchKeyWord)) {
|
conList = new List<Contact>();
|
} else {
|
if (checkNullString(accountId)) {
|
conList = new List<Contact>();
|
} else {
|
//2022-5-12 yjk 将科室匹配改为医院匹配查询联系人 statt
|
Account act = [SELECT id, Hospital__c FROM Account WHERE id = :accountId];
|
conList = new List<Contact>(
|
[
|
SELECT Id, AWS_Data_Id__c, Account.Name
|
FROM Contact
|
WHERE Account.Hospital__c = :act.Hospital__c AND AWS_Data_Id__c != ''
|
]
|
);
|
noPIContactList = AWSServiceTool.getNoPIContact(searchKeyWord, accountId);
|
//2022-5-12 yjk 将科室匹配改为医院匹配查询联系人 end
|
}
|
}
|
Map<String, Contact> awsIdToContactMap = new Map<String, Contact>();
|
List<String> conAWSIds = new List<String>();
|
for (Contact con : conList) {
|
conAWSIds.add(con.AWS_Data_Id__c);
|
awsIdToContactMap.put(con.AWS_Data_Id__c, con);
|
}
|
data.put('awsIdToContactMap', awsIdToContactMap);
|
data.put('conAWSIds', conAWSIds);
|
data.put('noPIContactList', noPIContactList);
|
data.put('contactStaticResource', JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')));
|
res.status = 'Success';
|
res.code = 200;
|
res.msg = '';
|
return res;
|
} catch (Exception e) {
|
return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), '');
|
}
|
}
|
|
public static Boolean checkNullString(String inputString) {
|
if (String.isEmpty(inputString) || String.isBlank(inputString)) {
|
return true;
|
}
|
return false;
|
}
|
|
/**
|
*@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 (!fieldMap.containsKey(item.field) || !isUpdateable(fieldMap.get(item.field).getDescribe())) {
|
System.debug(item.field);
|
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();
|
}
|
}
|