public with sharing class LookupController {
|
|
/*
|
调用此公用页面的思路
|
1.url需要传 对象名
|
2.根据 对象名 去判断 检索的字段 limit 注意分页
|
3.页面上根据对象名 去判断显示的内容
|
4.需要修改的地方 请检索 PleaseJudge 即检索的字段? where ? 分页? 前台显示 ?
|
5.对于后面所有调整 请在ModelLendingProduct__c 后面进行分支判断 ,不要修改 请在ModelLendingProduct__c的内容
|
因为此自定义元数据 有很多标准对象没有 修改时请考虑 请在ModelLendingProduct__c 功能可以正常使用!
|
*/
|
|
//页面循环遍历
|
public List<LookUpLine> activities { get; set; }
|
|
//参数值
|
//模糊检索框
|
public string SObjectName {get; set;}
|
|
//定义 本次使用的 对象
|
public List<SObject> 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<SObject> 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<SObject> results) {
|
//动态赋值 传到前台遍历
|
if(results.size()>0){
|
activities = new List<LookUpLine>();
|
for(Sobject s :results ){
|
LookUpLine c = new LookUpLine(SObjectName, s);
|
if(c!=null){
|
activities.add(c);
|
}
|
|
}
|
|
}
|
}
|
|
// 模糊检索方法 精琢技术 wql 20210401 end ----------------------------------
|
|
//分页 精琢技术 wql 20210401 start -------------------------------------------------
|
public List<LookUpLine> getModelCode() {
|
if (results == null) {
|
results = new list<SObject> ();
|
//用于区分 是否有筛选条件的 数据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');
|
}
|
|
}
|
|
}
|
|
|
|
|
}
|