public without sharing class ConSearchAgencyPlace { public List results {get; private set;} public Boolean getIsOverLimit() { if (results != null && results.size() > 50) { return true; } return false; } public ConSearchAgencyPlace () { this.results = new List(); } public void search() { String query = System.currentPageReference().getParameters().get('q'); String agency = System.currentPageReference().getParameters().get('r'); this.search(query, agency); } public void search(String query, String reporterState) { //List qwordstmp = query.split(' '); // nameCondition 用于拼接用户输入内容,做模糊查询 String nameCondition = ''; nameCondition += '%' + String.escapeSingleQuotes(query.replaceAll('%', '\\%')) + '%'; /*for (String qword : qwordstmp) { if (String.isBlank(qword) == false) { qwords.add('%' + String.escapeSingleQuotes(qword.replaceAll('%', '')) + '%'); nameCondition += ' Name like \'' + qwords[qwords.size() - 1] + '\' and'; } }*/ /*if(qwords.size() < 2 && query.length() < 3) { return; }*/ // system.debug('query.length=' + query + '===' + query.length()); // if (String.isBlank(reporterState)) { // return; // } // if( query.length() < 2) { // return; // } List accs; // 查询符合条件的特约经销商 // 直接使用SOQL的方式进行模糊查询时不需要对引号进行转义 // 如果使用DataBase类的query方法则传入的字符串中如果有引号需要对其进行转义 accs = [SELECT id,Parentid FROM Account WHERE Parent.Name like :nameCondition AND Contract_Decide_Start_Date__c <= :Date.Today() AND Contract_Decide_End_Date__c >= :Date.Today()]; // 用于保存特约经销商匹配到的其父类的id Set pids = new Set(); for (Account acc : accs) { pids.add(acc.Parentid); } // 検索 // String queryString = 'select Id, Name, Department_Class__c, Department_Class__r.Name, Hospital__c, Hospital__r.Name from Account where id in' + qwords + ' and RecordType.DeveloperName = \'Agency\' and Is_Active__c <> \'無効\' order by Name limit 51'; // system.debug('queryString=' + queryString); // Map accMap = new Map((List) Database.query(queryString)); // if (accMap.size() <= 50) { // // さらに省単位のデータを検索 // nameCondition += ' and RecordType.DeveloperName = \'Agency\' and '; // Map stateDepartmentMap = ControllerUtil.selectDepartByHospitalState(nameCondition, reporterState, 51 - accMap.size()); // if (stateDepartmentMap.size() > 0) { // for (Id accId : stateDepartmentMap.keySet()) { // if (!accMap.containsKey(accId)) { // accMap.put(accId, stateDepartmentMap.get(accId)); // } // } // } // } // 検索,查询到最终匹配的经销商名单 accs = [ SELECT Id, Name, Department_Class__c, Department_Class__r.Name, Hospital__c, Hospital__r.Name FROM Account WHERE (Id IN :pids OR (Name = '奥林巴斯(北京)销售服务有限公司' AND Name like : nameCondition)) AND RecordType.DeveloperName = 'Agency' AND Is_Active__c <> '無効' order by Name limit 51 ]; Map accMap = new Map(accs); this.results = accMap.values(); // values()の場合、順序わからないです this.results.sort(); // order by Name } }