public with sharing class LookupController { /* 调用此公用页面的思路 1.url需要传 对象名 2.根据 对象名 去判断 检索的字段 limit 注意分页 3.页面上根据对象名 去判断显示的内容 4.需要修改的地方 请检索 PleaseJudge 即检索的字段? where ? 分页? 前台显示 ? 5.对于后面所有调整 请在ModelLendingProduct__c 后面进行分支判断 ,不要修改 请在ModelLendingProduct__c的内容 因为此自定义元数据 有很多标准对象没有 修改时请考虑 请在ModelLendingProduct__c 功能可以正常使用! */ //页面循环遍历 public List activities { get; set; } //参数值 //模糊检索框 public string SObjectName {get; set;} //定义 本次使用的 对象 public List results {get; set;} //模糊检索框 public string searchString {get; set;} //分页用 private integer totalRecs = 0; private integer OffsetSize = 0; private integer LimitSize {get; set;} //公用标题 public String title {get; set;} //公用搜索名称 public String searchLabel {get; set;} //初始化无参方法 public LookupController() { // 筛选条件搜索框 //SObjectName SObjectName = System.currentPageReference().getParameters().get('SObjectName'); //模型出借型号 searchString = System.currentPageReference().getParameters().get('searchLike'); //暂定一个标题 未来改成公共的 请再此基础上增加判断 //PleaseJudge 下次调用时,需判断 if(SObjectName.equals('ModelLendingProduct__c')){ title = '模型出借型号检索'; LimitSize = 20; searchLabel = '型号or产品名称'; }else{ title = '请自定义内容'; //自定义 10条 LimitSize = 10; searchLabel = 'Name'; } runSearch(); } // 模糊检索方法 精琢技术 wql 20210401 start ---------------------------------- public PageReference search() { runSearch(); return null; } private void runSearch() { //检索数据 results = performSearch(searchString); //动态拼接传递前台 setActivities(results); System.debug('results:'+results); } private List performSearch(string searchString) { String sql = soql(SObjectName,searchString); //考虑超50001 限制 String totalSQL = sql + ' limit 2000 '; String soql = sql; //按创建时间 倒序 soql = soql + ' order by createdDate desc'; soql = soql + ' limit ' + LimitSize; System.debug(soql); // if (searchString != '' && searchString != null) { // totalRecs = database.query(sql).size(); // OffsetSize= 0; // }else{ // //总条数 // totalRecs = database.query(sql).size(); // } OffsetSize= 0; totalRecs = database.query(totalSQL).size(); System.debug('totalRecs:' + totalRecs); return database.query(soql); } //自定义 soql public String soql (string SObjectName,string searchString){ //定义sql 前半部分 ------------------------------------------------- String soql = 'select id,name '; //检索字段集 //中间字段 String fieldList = ',Product__c,productName__c,ModelAndProductName__c,createdDate '; //如果是查找 自定义元数据 则拼接查找字段 //PleaseJudge 下次调用时,需判断 if(SObjectName.equals('ModelLendingProduct__c')){ soql = soql + fieldList; } soql = soql + ' from '+ SObjectName; //用于区分 是否有筛选条件的 数据list if (searchString != '' && searchString != null){ //PleaseJudge 下次调用时,需判断 if(SObjectName.equals('ModelLendingProduct__c')){ soql = soql + ' where ModelAndProductName__c LIKE \'%' + searchString + '%\'' ; }else{ soql = soql + ' where name LIKE \'%' + searchString + '%\''; } } return soql; } //检索出的数据 动态构造 传递前台 private void setActivities(List results) { //动态赋值 传到前台遍历 if(results.size()>0){ activities = new List(); for(Sobject s :results ){ LookUpLine c = new LookUpLine(SObjectName, s); if(c!=null){ activities.add(c); } } } } // 模糊检索方法 精琢技术 wql 20210401 end ---------------------------------- //分页 精琢技术 wql 20210401 start ------------------------------------------------- public List getModelCode() { if (results == null) { results = new list (); //用于区分 是否有筛选条件的 数据list satrt String soql2 = soql(SObjectName,searchString); //检索后应该重新给总条数赋值 // if (searchString != '' && searchString != null) { // totalRecs = database.query(soql2).size(); // }else{ // //总条数 // //PleaseJudge 下次调用时,需判断 // totalRecs = database.query(soql2).size(); // } //考虑超50001 限制 String totalSQL = soql2 + ' limit 2000 '; totalRecs = database.query(totalSQL).size(); //用于区分 是否有筛选条件的 数据list end System.debug('totalRecs2:' + totalRecs); //遍历分页显示的list for (SObject pl : Database.Query(soql2+' LIMIT :LimitSize OFFSET :OffsetSize')) { results.add(pl); } } //动态传值到前台 setActivities(results); return activities; } //首页 public PageReference FirstPage() { OffsetSize = 0; results = null; return null; } //上一页 public PageReference previous() { OffsetSize = OffsetSize - LimitSize; results = null; return null; } //下一页 public PageReference next() { OffsetSize = OffsetSize + LimitSize; results = null; return null; } //尾页 public PageReference LastPage() { OffsetSize = totalrecs - math.mod(totalRecs, LimitSize); results = null; return null; } //disabled 样式 首页+上一页 public boolean getprev() { if (OffsetSize > 0) return false; else return true; } //disabled 样式 尾页+下一页 public boolean getnxt() { if ((OffsetSize + LimitSize) < totalRecs){ System.debug('totalRecs2:'+totalRecs); System.debug('OffsetSize2:'+OffsetSize); System.debug('false1'); return false; }else{ System.debug('false2'); return true; } } //获取页码 public Integer getPageNumber() { //限制最多检索2000条时有问题 integer osCount = 0; if(OffsetSize == 2000){ osCount = OffsetSize / LimitSize; }else{ osCount = OffsetSize / LimitSize + 1; } return osCount; //原逻辑 //return OffsetSize / LimitSize + 1; } //获取总页数 public Integer getTotalPages() { if (math.mod(totalRecs, LimitSize) > 0) { return totalRecs / LimitSize + 1; } else { return (totalRecs / LimitSize); } } //分页 精琢技术 wql 20210401 end ------------------------------------------------- //发现 action的执行先后顺序有问题 使用actionFunction 强行将 分页按钮刷新的顺序排在最后 satrt public PageReference loadPage() { getprev(); getnxt(); getPageNumber(); getTotalPages(); return null; } //发现 action的执行先后顺序有问题 使用actionFunction 强行将 分页按钮刷新的顺序排在最后 end //封装类 自定义 字段 用于前台遍历 public class LookUpLine { //标准id字段 public Id Id { get; set; } //String 自定义字段 public String Lid{ get; set; } public String Name { get; set; } public String LName { get; set; } //有参构造 //PleaseJudge 下次调用时,需判断 public LookUpLine(String SObjectName,SObject so) { if(SObjectName.equals('ModelLendingProduct__c')){ this.Id = (Id)so.get('id'); this.Name =(String)so.get('name'); this.Lid =(String)so.get('Product__c'); this.LName =(String)so.get('productName__c'); }else{ this.Id = (Id)so.get('id'); this.Name =(String)so.get('name'); } } } }