public with sharing class CommonUtils { //查询 医院下的科室 包括战略和普通科室 // content 查询内容 // ParentId 父ID public static string GetYYChilders(String content,String ParentId) { String sql = 'select '; String props = GetSqlToPorps(account.SObjectType); sql += props; sql += ' from account'; if(ParentId != null && ParentId != '') { sql += ' where (Parentid = :ParentId or Parent.Parentid = :ParentId)'; } if(content != null && content != '') { content = '%'+content+'%'; sql += ' and Name like :content '; } sql += ' limit 5 '; List arrays = Database.query(sql); return JSON.serialize(arrays); } //查询 普通科室 public static string GetPTKS(String content, List ParentIds, Boolean checkOwner) { String paramYy = 'HP'; String sql = 'select '; String props = GetSqlToPorps(account.SObjectType); sql += props; sql += ' from account'; sql += ' where Parent.Parent.RecordType_DeveloperName__c = :paramYy'; if(content != null && content != '') { content = '%'+content+'%'; sql += ' and Name like :content '; } if(ParentIds != null && ParentIds.size() > 0) { sql += ' and Parent.Parentid in :ParentIds '; } if (checkOwner) { String userId = UserInfo.getUserId(); sql += ' and OwnerId = :userId'; } sql += ' limit 5 '; List arrays = Database.query(sql); return JSON.serialize(arrays); } //查询 普通科室 // public static string GetPTKSByYYParent(String content,String ParentId) // { // List listTemp = new List(); // listTemp.add('Department_Class_OTH'); // listTemp.add('Department_Class_BF'); // listTemp.add('Department_Class_GYN'); // listTemp.add('Department_Class_GS'); // listTemp.add('Department_Class_URO'); // listTemp.add('Department_Class_GI'); // listTemp.add('Department_Class_ENT'); // listTemp.add('Department_Class_ET'); // String sql = 'select '; // String props = GetSqlToPorps(account.SObjectType); // sql += props; // sql += ' from account'; // sql += ' where Parent.RecordType_DeveloperName__c in :listTemp'; // if(content != null && content != '') // { // content = '%'+content+'%'; // sql += ' and Name like :content '; // } // if(ParentId != null && ParentId != '') // { // sql += ' and Parent.Parentid = :ParentId '; // } // sql += ' limit 5 '; // List arrays = Database.query(sql); // return JSON.serialize(arrays); // } //查询 战略科室 // content 查询内容 // ParentId 父ID public static string GetZLKS(String content,String[] ParentId) { String paramYy = 'HP'; String sql = 'select '; String props = GetSqlToPorps(account.SObjectType); sql += props; sql += ' from account'; sql += ' where Parent.RecordType_DeveloperName__c = :paramYy'; if(content != null && content != '') { content = '%'+content+'%'; sql += ' and Name like :content '; } if(ParentId != null && ParentId.size() > 0) { sql += ' and Parentid in :ParentId '; } sql += ' limit 8 '; List arrays = Database.query(sql); return JSON.serialize(arrays); } //查询 医院 // content 查询内容 public static string GetYY(String content) { List listTemp = new List(); listTemp.add('HP'); String sql = 'select '; String props = GetSqlToPorps(account.SObjectType); sql += props; sql += ' from account'; sql += ' where RecordType_DeveloperName__c in :listTemp and Is_Active__c = \'有効\' '; if(content != null && content != '') { content = '%'+content+'%'; sql += ' and Name like :content '; } sql += ' limit 5 '; List arrays = Database.query(sql); return JSON.serialize(arrays); } // ParentId 父ID public static String GetAccountPrentID(String Id) { string sql = 'SELECT Id from account where parentId = :Id limit 100 '; List arrays = Database.query(sql); return JSON.serialize(arrays); } //获取父节点 // ID 客户的ID public static string GetParent(String Id) { Schema.SObjectType type = account.SObjectType; QueryWrapper query = new QueryWrapper(type); query.eq('Id', Id); List arrays = DataBasePlus.listPlus(query); ParentAccount account = new ParentAccount(); // return JSON.serialize(arrays); if(arrays[0].ParentId == null || arrays[0].RecordType_DeveloperName__c == 'HP') { return JSON.serialize(account); } QueryWrapper querytemp = new QueryWrapper(type); querytemp.eq('Id',arrays[0].Parentid); List arraysTemp = DataBasePlus.listPlus(querytemp); if(arraysTemp[0].ParentId == null || arraysTemp[0].RecordType_DeveloperName__c == 'HP' ) { account.yy = arraysTemp[0]; return JSON.serialize(account); }else { QueryWrapper queryTest = new QueryWrapper(type); queryTest.eq('Id',arraysTemp[0].Parentid); List arraysTest = DataBasePlus.listPlus(queryTest); account.zlxs = arraysTemp[0]; account.yy = arraysTest[0]; return JSON.serialize(account); } } //定义动态获取选项值的构造类 public class ParentAccount { public account zlxs; public account yy; } // 查询改对象的所有有权限的属性 // type 对象类型 public static string GetSqlToPorps(Schema.SObjectType type) { Schema.DescribeSObjectResult results = type.getDescribe(); String sql = ''; //获取表中所有列的字段 Map fieldMap = results.fields.getMap(); //字段拼接成字符串 for(String keyset : fieldMap.keySet()) { Schema.DescribeFieldResult checksObjectField=fieldMap.get(keyset).getDescribe(); if(checksObjectField.isAccessible()==true){ if(checksObjectField.isAccessible()){ if(sql == ''){ sql = keyset; }else{ sql = sql + ',' + keyset; } } } } return sql; } //查询对象上所有的 列表类型的对象的 所有值 // taskStatusfieldResult 对象上的列表的字段类型 public static string GetSelectedValues( Schema.DescribeFieldResult taskStatusfieldResult ) { map> pickerFields = new map>(); list taskStatusOptions = new list(); // Schema.DescribeFieldResult taskStatusfieldResult = Product_Score_Table_History__c.Id.getDescribe(); List taskStatusple = taskStatusfieldResult.getPicklistValues(); for ( Schema.PicklistEntry pickListVal : taskStatusple) { pickerWrapper temppickerWrapper = new pickerWrapper(pickListVal.getLabel(), pickListVal.getValue()); taskStatusOptions.add(temppickerWrapper); } pickerFields.put('taskStatusOptions', taskStatusOptions); List pickerWrapperList = pickerFields.get('taskStatusOptions'); String TempStr = Json.serialize(pickerWrapperList); return TempStr; } //定义动态获取选项值的构造类 public class pickerWrapper { @AuraEnabled public string label; @AuraEnabled public string value; public pickerWrapper(string label, string value) { this.label = label; this.value = value; } } // ==========PICK List ============= //查询 对象的依赖字段 // objApiName 查询的对象名 // controlField 控制字段名 // dependentField 依赖字段名 @AuraEnabled(cacheable = true) public static List getPicklistValues(String objApiName, String controlField, String dependentField){ List pickListValues = new List(); // if(String.isBlank(objApiName) || String.isBlank(controlField) || String.isBlank(dependentField)) { // return null; // } //Identify the sobject type from the object name using global schema describe function Schema.SObjectType targetType = Schema.getGlobalDescribe().get(objApiName); //Create an empty object based up on the above the sobject type to get all the field names Schema.sObjectType objType = targetType.newSObject().getSobjectType(); //fetch the all fields defined in the sobject Map objFieldMap = objType.getDescribe().fields.getMap(); //Get the controlling and dependent picklist values from the objFieldMap List controlledPLEntries = objFieldMap.get(controlField).getDescribe().getPicklistValues(); List dependentPLEntries = objFieldMap.get(dependentField).getDescribe().getPicklistValues(); // Wrap the picklist values using custom wrapper class – PicklistValue for (Schema.PicklistEntry entry : controlledPLEntries) { PicklistValue picklistValue = new PicklistValue(entry.isActive(), entry.isDefaultValue(), entry.getLabel(), entry.getValue()); pickListValues.add(picklistValue); } //ValidFor is an indicator value for the controlling field which is base64 encrypted //base64 value should be convered to 6bit grouped binary and 1 indicate the controlling field in a certain order //Also,validFor value only be shown when it is serialized so it should be serialized then deserialized using PicklistValue wrapper class for(PicklistValue plVal : deserializePLEntries(dependentPLEntries)) { String decodedInBits = base64ToBits(plVal.validFor); for(Integer i = 0; i< decodedInBits.length(); i++) { // For each bit, in order: if it's a 1, add this label to the dependent list for the corresponding controlling value String bit = decodedInBits.mid(i, 1); if (bit == '1') { PicklistValue dependentPLValue = new PicklistValue(plVal.active, plVal.defaultValue, plVal.label, plVal.value); //Dependent picklist value is mapped to its parent controlling value through 'dependents' attribute in the PicklistValue wrapper class if(pickListValues.get(i).dependents == null ) { pickListValues.get(i).dependents = new List{dependentPLValue}; }else{ pickListValues.get(i).dependents.add(dependentPLValue); } } } } return pickListValues; } private static List deserializePLEntries(List plEntries) { return (List) JSON.deserialize(JSON.serialize(plEntries), List.class); } //Available base64 charecters private static final String BASE_64_CHARS = '' +'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +'abcdefghijklmnopqrstuvwxyz' +'0123456789+/'; // Convert decimal to binary representation (alas, Apex has no native method 🙁 // eg. 4 => '100', 19 => '10011', etc. // Method: Divide by 2 repeatedly until 0. At each step note the remainder (0 or 1). // These, in reverse order, are the binary. private static String decimalToBinary(Integer val) { String bits = ''; while (val > 0) { Integer remainder = Math.mod(val, 2); val = Integer.valueOf(Math.floor(val / 2)); bits = String.valueOf(remainder) + bits; } return bits; } // Convert a base64 token into a binary/bits representation // e.g. 'gAAA' => '100000000000000000000' private static String base64ToBits(String validFor) { if (String.isEmpty(validFor)) { return ''; } String validForBits = ''; for (Integer i = 0; i < validFor.length(); i++) { String thisChar = validFor.mid(i, 1); Integer val = BASE_64_CHARS.indexOf(thisChar); String bits = decimalToBinary(val).leftPad(6, '0'); validForBits += bits; } return validForBits; } //Wrapper class public class PicklistValue { @AuraEnabled public Boolean active { get; set; } @AuraEnabled public Boolean defaultValue { get; set; } @AuraEnabled public String label { get; set; } @AuraEnabled public String validFor { get; set; } @AuraEnabled public String value { get; set; } @AuraEnabled public List dependents {get; set;} public PicklistValue(){} public PicklistValue(Boolean active, Boolean defaultValue, String label, String validFor, String value) { this.active = active; this.defaultValue = defaultValue; this.label = label; this.validFor = validFor; this.value = value; } public PicklistValue(Boolean active, Boolean defaultValue, String label, String value) { this.active = active; this.defaultValue = defaultValue; this.label = label; this.validFor = validFor; this.value = value; } public PicklistValue(String label, String value) { this.label = label; this.value = value; } } }