------------------------------------------------------------------------------------------------------------
Vf page
------------------------------------------------------------------------------------------------------------
<apex:page controller="FeedbackUserSelectionController1">
<apex:sectionHeader title="Feedback Form" subtitle="User Selection Page" />
<style type="text/css">
.loading-icon {
background-image: url(/img/loading.gif);
width: 16px;
height: 16px;
}
a.alpha-link {
font-weight: normal;
font-size: 91%;
padding: 0 4px;
color: #015BA7 !important;
}
a.alpha-link+a.alpha-link {
border-left: 1px solid #CFCECE;
}
a.alpha-link:hover {
background-color: #e0f5fc !important;
}
a.alpha-select {
font-weight: bold;
text-decoration: none;
background-color: #C6E1FF;
color: #000000 !important;
}
.search-block {
text-align: center;
}
.search-block input {
margin: 0px 15px 0px 5px;
}
.search-block-button {
min-width: 110px;
}
.process-block {
text-align: center;
margin-top: 10px;
}
.process-block input {
margin: 0px 15px;
}
.process-block-button {
min-width: 110px;
}
.page-buttons input {
min-width: 110px;
}
</style>
<apex:form id="TheForm">
<!-- ***************************** -->
<!-- Search Criteria -->
<apex:pageBlock mode="maindetail" >
<div class="search-block">
<div style="display: inline-table">
<span>Name:</span>
<apex:inputText value="{!SearchName}" />
</div>
<div style="display: inline-table">
<span>Department:</span>
<apex:inputText value="{!Searchdepartment}" />
</div>
<apex:commandButton styleClass="search-block-button" value="Search" action="{!Searchuser}" rerender="TablePanel"
status="TableUpdateStatus" />
</div>
<div class="process-block">
<apex:actionStatus id="ProcessButtonStatus">
<apex:facet name="stop">
<apex:outputPanel >
<apex:commandButton styleClass="process-block-button" value="Process Selected" action="{!DoSomethingMany}"
status="ProcessButtonStatus" rerender="nothing" />
<apex:commandButton styleClass="process-block-button" value="Clear All" action="{!ClearAll}"
rerender="TheForm,TablePanel" />
</apex:outputPanel>
</apex:facet>
<apex:facet name="start">
<apex:outputPanel >
<apex:commandButton styleClass="process-block-button" value="Processing..." disabled="true" />
<apex:commandButton styleClass="process-block-button" value="Processing..." disabled="true" />
</apex:outputPanel>
</apex:facet>
</apex:actionStatus>
</div>
</apex:pageBlock>
<!-- ************************* -->
<!-- search results table -->
<apex:pageBlock id="TablePanel" title="Select Users to Give feedback ">
<div>
<span class="page-buttons" style="float: left; margin-bottom: 5px;"> <apex:commandButton disabled="{!!StdSetControllerUser.hasprevious}" value="Previous" action="{!StdSetControllerUser.previous}"
rerender="TablePanel" /> <apex:commandButton disabled="{!!StdSetControllerUser.hasnext}" value="Next"
action="{!StdSetControllerUser.next}" rerender="TablePanel" />
</span>
<!-- alphabet selection -->
<span style="float: right; margin: 5px 5px 5px 5px;"> <apex:repeat value="{!AlphaList}" var="a">
<apex:commandLink value="{!a}" action="{!BuildQuery}" rerender="TablePanel"
styleClass="alpha-link{!if(AlphaFilter=a,' alpha-select','')}" status="TableUpdateStatus">
<apex:param name="AlphaFilter" value="{!a}" assignTo="{!AlphaFilter}" />
</apex:commandLink>
</apex:repeat>
</span>
</div>
<div style="clear: both;"></div>
<apex:actionStatus id="TableUpdateStatus">
<apex:inputHidden value="{!AlphaFilter}" id="hiddenField" />
<!-- loading message -->
<apex:facet name="start">
<apex:outputPanel layout="block" styleClass="message infoM4">
<apex:panelGrid columns="2" styleClass="messageTable" columnClasses="messageCell" style="padding:0px;margin:0px;">
<apex:panelGroup >
<img class="loading-icon" src="/s.gif" />
</apex:panelGroup>
<apex:panelGroup >
<div class="messageText">Please wait...</div>
</apex:panelGroup>
</apex:panelGrid>
</apex:outputPanel>
</apex:facet>
<!-- user table -->
<apex:facet name="stop">
<apex:pageBlockTable value="{!CurrentUserList}" var="a">
<apex:column >
<apex:facet name="header">
<apex:outputPanel id="SelectedCount">
<div style="text-align: center;">
<apex:outputText value="Selected" />
<br />
<apex:outputText value="{!UserSelectedCount}" />
</div>
</apex:outputPanel>
</apex:facet>
<div style="text-align: center;">
<apex:inputCheckBox value="{!a.aCheckBox}" id="check-box">
<apex:actionSupport event="onchange" rerender="SelectedCount" action="{!UpdateUserSelectedSet}" />
</apex:inputcheckbox>
</div>
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="Name" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.Name.Label}{!IF(SortField=='Name',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputLink value="/{!a.aUser.Id}" target="_blank">{!a.aUser.Name}</apex:outputlink>
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="Department" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.Department.Label}{!IF(SortField=='Department',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputField value="{!a.aUser.Department}" />
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="CompanyName" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.CompanyName.Label}{!IF(SortField=='CompanyName',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputField value="{!a.aUser.CompanyName}" />
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="Email" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.Email.Label}{!IF(SortField=='Email',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputField value="{!a.aUser.Email}" />
</apex:column>
</apex:pageBlockTable>
</apex:facet>
</apex:actionStatus>
<div style="margin-top: 5px;">
<apex:outputText value="Number of Records per Page: " />
<apex:selectList value="{!RecPerPage}" size="1">
<apex:selectOptions value="{!RecPerPageOption}" />
<apex:actionSupport event="onchange" action="{!BuildQuery}" reRender="TablePanel" status="TableUpdateStatus" />
</apex:selectList>
</div>
</apex:pageBlock>
</apex:form>
</apex:page>
------------------------------------------------------------------------------------------------------------
Controller...
------------------------------------------------------------------------------------------------------------
public with sharing class FeedbackUserSelectionController1 {
// User and selection set/variables
private list<UserSubclass> Userlist {get; set;}
private set<Id> UserSelectedSet;
public Integer UserSelectedCount {get; set;}
public String SelectedOneUser {get; set;}
// selection and filter
public list<String> AlphaList {get; set;}
public String AlphaFilter {get; set;}
public String SearchName {get; set;}
public String Searchdepartment {get; set;}
private String SaveSearchName;
private String SaveSearchdepartment;
private String Queryuser;
// display sort and number
public String RecPerPage {get; set;}
public list<SelectOption> RecPerPageOption {get; set;}
public String SortFieldSave;
/***
* FeedbackUserSelectionController - Constructor initialization
***/
public FeedbackUserSelectionController1(){
Userlist = new list<UserSubclass>();
UserSelectedSet = new set<Id>();
//records for page initialization
RecPerPageOption = new list<SelectOption>();
RecPerPageOption.add(new SelectOption('10','10'));
RecPerPageOption.add(new SelectOption('25','25'));
RecPerPageOption.add(new SelectOption('50','50'));
RecPerPageOption.add(new SelectOption('100','100'));
RecPerPageOption.add(new SelectOption('200','200'));
RecPerPage = '10'; //default records per page
// initialization alpha list
AlphaList = new list<String> {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Other', 'All'};
SortFieldSave = SortField;
// alpha filter, use page parameter or set default to all
if (apexpages.currentpage().getparameters().get('alpha') == null) {
AlphaFilter = 'All';
} else {
AlphaFilter = apexpages.currentpage().getparameters().get('alpha');
}
// list generation
BuildQuery();
}
/***
* StdSetControllerUser - paging through the User list
***/
public ApexPages.StandardSetController StdSetControllerUser {
get {
if(StdSetControllerUser == null) {
StdSetControllerUser = new ApexPages.StandardSetController(Database.getQueryLocator(Queryuser));
// sets the number of records in each page set
StdSetControllerUser.setPageSize(Integer.valueOf(RecPerPage));
}
return StdSetControllerUser;
}
set;
}
/***
* getCurrentUserlist - return an User list for the table
***/
public list<UserSubclass> getCurrentUserlist() {
UpdateUserSelectedSet();
Userlist = new list<UserSubclass>();
for (User a : (list<User>)StdSetControllerUser.getRecords()) {
Userlist.add(new UserSubclass(a, UserSelectedSet.contains(a.Id)));
}
return Userlist;
}
/***
* UpdateUserSelectedSet - add/remove Users from the selected User id list
***/
public void UpdateUserSelectedSet(){
for(UserSubclass a : Userlist ){
if(a.aCheckBox == true) {
UserSelectedSet.add(a.aUser.Id);
} else {
if(UserSelectedSet.contains(a.aUser.Id)) {
UserSelectedSet.remove(a.aUser.Id);
}
}
}
UserSelectedCount = UserSelectedSet.size();
}
/***
* ClearUserSelectedSet - remove selected Users and initialize counter
***/
public PageReference ClearAll(){
Userlist.clear();
UserSelectedSet.clear();
UserSelectedCount = 0;
SearchName = '';
Searchdepartment = '';
SaveSearchName = '';
SaveSearchdepartment = '';
AlphaFilter = 'All';
BuildQuery();
return null;
}
/***
* Searchuser - set search criteria fields and refresh User table
***/
public PageReference Searchuser() {
SaveSearchName = SearchName;
SaveSearchdepartment = Searchdepartment;
BuildQuery();
return null;
}
/***
* BuildQuery - build query command for list selection change
***/
public void BuildQuery() {
StdSetControllerUser = null;
String QueryWhere = '';
if (AlphaFilter == null || AlphaFilter.trim().length() == 0) {
AlphaFilter = 'All';
}
Queryuser = 'SELECT Department,FirstName,LastName,Name , CompanyName, Email, LOB__c ' +
' FROM User';
if (AlphaFilter == 'Other') {
QueryWhere = BuildWhere(QueryWhere, '(' + String.escapeSingleQuotes(SortField) + ' < \'A\' OR ' +
String.escapeSingleQuotes(SortField) + ' > \'Z\') AND (NOT ' +
String.escapeSingleQuotes(SortField) + ' LIKE \'Z%\') ');
} else if (AlphaFilter != 'All') {
QueryWhere = BuildWhere(QueryWhere, '(' + String.escapeSingleQuotes(SortField) + ' LIKE \'' + String.escapeSingleQuotes(AlphaFilter) + '%\')' );
}
if (SaveSearchName != null) {
QueryWhere = BuildWhere(QueryWhere, ' (Name LIKE \'%' + String.escapeSingleQuotes(SaveSearchName) + '%\')');
}
if (SaveSearchdepartment != null) {
QueryWhere = BuildWhere(QueryWhere, ' (Department LIKE \'%' + String.escapeSingleQuotes(SaveSearchdepartment) + '%\')');
}
Queryuser += QueryWhere;
Queryuser += ' ORDER BY ' + String.escapeSingleQuotes(SortField) + ' ' + String.escapeSingleQuotes(SortDirection) + ' LIMIT 10000';
system.debug('Queryuser:' + Queryuser);
}
/***
* BuildWhere - build soql string for where criteria
***/
public String BuildWhere(String QW, String Cond) {
if (QW == '') {
return ' WHERE ' + Cond;
} else {
return QW + ' AND ' + Cond;
}
}
/***
* SortDirection - return sort direction. Default ascending(asc)
***/
public String SortDirection {
get { if (SortDirection == null) { SortDirection = 'asc'; } return SortDirection; }
set;
}
/***
* SortField - return sort by field. Default to Name
***/
public String SortField {
get { if (SortField == null) {SortField = 'Name'; } return SortField; }
set;
}
/***
* SortToggle - toggles the sorting of query from asc<-->desc
***/
public void SortToggle() {
SortDirection = SortDirection.equals('asc') ? 'desc NULLS LAST' : 'asc';
// reset alpha filter and sort sequence when sorted field is changed
if (SortFieldSave != SortField) {
SortDirection = 'asc';
AlphaFilter = 'All';
SortFieldSave = SortField;
}
// run the query again
BuildQuery();
}
/***
* DoSomethingOne - do something with one selected User
***/
public PageReference DoSomethingOne() {
system.debug('SelectedOneUser: ' + SelectedOneUser);
return null;
}
/***
* DoSomethingMany - do something with many selected Users
***/
public PageReference DoSomethingMany() {
for (Id UserId : UserSelectedSet) {
system.debug('Checked: ' + UserId);
}
return null;
}
public class UserSubclass {
public Boolean aCheckBox {get;set;}
public User aUser {get;set;}
// sub-class initialization
public UserSubclass(User a, Boolean chk){
aUser = a;
aCheckBox = chk;
}
}
}
Vf page
------------------------------------------------------------------------------------------------------------
<apex:page controller="FeedbackUserSelectionController1">
<apex:sectionHeader title="Feedback Form" subtitle="User Selection Page" />
<style type="text/css">
.loading-icon {
background-image: url(/img/loading.gif);
width: 16px;
height: 16px;
}
a.alpha-link {
font-weight: normal;
font-size: 91%;
padding: 0 4px;
color: #015BA7 !important;
}
a.alpha-link+a.alpha-link {
border-left: 1px solid #CFCECE;
}
a.alpha-link:hover {
background-color: #e0f5fc !important;
}
a.alpha-select {
font-weight: bold;
text-decoration: none;
background-color: #C6E1FF;
color: #000000 !important;
}
.search-block {
text-align: center;
}
.search-block input {
margin: 0px 15px 0px 5px;
}
.search-block-button {
min-width: 110px;
}
.process-block {
text-align: center;
margin-top: 10px;
}
.process-block input {
margin: 0px 15px;
}
.process-block-button {
min-width: 110px;
}
.page-buttons input {
min-width: 110px;
}
</style>
<apex:form id="TheForm">
<!-- ***************************** -->
<!-- Search Criteria -->
<apex:pageBlock mode="maindetail" >
<div class="search-block">
<div style="display: inline-table">
<span>Name:</span>
<apex:inputText value="{!SearchName}" />
</div>
<div style="display: inline-table">
<span>Department:</span>
<apex:inputText value="{!Searchdepartment}" />
</div>
<apex:commandButton styleClass="search-block-button" value="Search" action="{!Searchuser}" rerender="TablePanel"
status="TableUpdateStatus" />
</div>
<div class="process-block">
<apex:actionStatus id="ProcessButtonStatus">
<apex:facet name="stop">
<apex:outputPanel >
<apex:commandButton styleClass="process-block-button" value="Process Selected" action="{!DoSomethingMany}"
status="ProcessButtonStatus" rerender="nothing" />
<apex:commandButton styleClass="process-block-button" value="Clear All" action="{!ClearAll}"
rerender="TheForm,TablePanel" />
</apex:outputPanel>
</apex:facet>
<apex:facet name="start">
<apex:outputPanel >
<apex:commandButton styleClass="process-block-button" value="Processing..." disabled="true" />
<apex:commandButton styleClass="process-block-button" value="Processing..." disabled="true" />
</apex:outputPanel>
</apex:facet>
</apex:actionStatus>
</div>
</apex:pageBlock>
<!-- ************************* -->
<!-- search results table -->
<apex:pageBlock id="TablePanel" title="Select Users to Give feedback ">
<div>
<span class="page-buttons" style="float: left; margin-bottom: 5px;"> <apex:commandButton disabled="{!!StdSetControllerUser.hasprevious}" value="Previous" action="{!StdSetControllerUser.previous}"
rerender="TablePanel" /> <apex:commandButton disabled="{!!StdSetControllerUser.hasnext}" value="Next"
action="{!StdSetControllerUser.next}" rerender="TablePanel" />
</span>
<!-- alphabet selection -->
<span style="float: right; margin: 5px 5px 5px 5px;"> <apex:repeat value="{!AlphaList}" var="a">
<apex:commandLink value="{!a}" action="{!BuildQuery}" rerender="TablePanel"
styleClass="alpha-link{!if(AlphaFilter=a,' alpha-select','')}" status="TableUpdateStatus">
<apex:param name="AlphaFilter" value="{!a}" assignTo="{!AlphaFilter}" />
</apex:commandLink>
</apex:repeat>
</span>
</div>
<div style="clear: both;"></div>
<apex:actionStatus id="TableUpdateStatus">
<apex:inputHidden value="{!AlphaFilter}" id="hiddenField" />
<!-- loading message -->
<apex:facet name="start">
<apex:outputPanel layout="block" styleClass="message infoM4">
<apex:panelGrid columns="2" styleClass="messageTable" columnClasses="messageCell" style="padding:0px;margin:0px;">
<apex:panelGroup >
<img class="loading-icon" src="/s.gif" />
</apex:panelGroup>
<apex:panelGroup >
<div class="messageText">Please wait...</div>
</apex:panelGroup>
</apex:panelGrid>
</apex:outputPanel>
</apex:facet>
<!-- user table -->
<apex:facet name="stop">
<apex:pageBlockTable value="{!CurrentUserList}" var="a">
<apex:column >
<apex:facet name="header">
<apex:outputPanel id="SelectedCount">
<div style="text-align: center;">
<apex:outputText value="Selected" />
<br />
<apex:outputText value="{!UserSelectedCount}" />
</div>
</apex:outputPanel>
</apex:facet>
<div style="text-align: center;">
<apex:inputCheckBox value="{!a.aCheckBox}" id="check-box">
<apex:actionSupport event="onchange" rerender="SelectedCount" action="{!UpdateUserSelectedSet}" />
</apex:inputcheckbox>
</div>
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="Name" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.Name.Label}{!IF(SortField=='Name',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputLink value="/{!a.aUser.Id}" target="_blank">{!a.aUser.Name}</apex:outputlink>
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="Department" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.Department.Label}{!IF(SortField=='Department',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputField value="{!a.aUser.Department}" />
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="CompanyName" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.CompanyName.Label}{!IF(SortField=='CompanyName',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputField value="{!a.aUser.CompanyName}" />
</apex:column>
<apex:column >
<apex:facet name="header">
<apex:commandLink action="{!SortToggle}" rerender="TablePanel" status="TableUpdateStatus">
<apex:param name="SortField" value="Email" assignTo="{!SortField}" />
<apex:outputText value="{!$ObjectType.User.Fields.Email.Label}{!IF(SortField=='Email',IF(SortDirection='asc','?','?'),'')}" />
</apex:commandLink>
</apex:facet>
<apex:outputField value="{!a.aUser.Email}" />
</apex:column>
</apex:pageBlockTable>
</apex:facet>
</apex:actionStatus>
<div style="margin-top: 5px;">
<apex:outputText value="Number of Records per Page: " />
<apex:selectList value="{!RecPerPage}" size="1">
<apex:selectOptions value="{!RecPerPageOption}" />
<apex:actionSupport event="onchange" action="{!BuildQuery}" reRender="TablePanel" status="TableUpdateStatus" />
</apex:selectList>
</div>
</apex:pageBlock>
</apex:form>
</apex:page>
------------------------------------------------------------------------------------------------------------
Controller...
------------------------------------------------------------------------------------------------------------
public with sharing class FeedbackUserSelectionController1 {
// User and selection set/variables
private list<UserSubclass> Userlist {get; set;}
private set<Id> UserSelectedSet;
public Integer UserSelectedCount {get; set;}
public String SelectedOneUser {get; set;}
// selection and filter
public list<String> AlphaList {get; set;}
public String AlphaFilter {get; set;}
public String SearchName {get; set;}
public String Searchdepartment {get; set;}
private String SaveSearchName;
private String SaveSearchdepartment;
private String Queryuser;
// display sort and number
public String RecPerPage {get; set;}
public list<SelectOption> RecPerPageOption {get; set;}
public String SortFieldSave;
/***
* FeedbackUserSelectionController - Constructor initialization
***/
public FeedbackUserSelectionController1(){
Userlist = new list<UserSubclass>();
UserSelectedSet = new set<Id>();
//records for page initialization
RecPerPageOption = new list<SelectOption>();
RecPerPageOption.add(new SelectOption('10','10'));
RecPerPageOption.add(new SelectOption('25','25'));
RecPerPageOption.add(new SelectOption('50','50'));
RecPerPageOption.add(new SelectOption('100','100'));
RecPerPageOption.add(new SelectOption('200','200'));
RecPerPage = '10'; //default records per page
// initialization alpha list
AlphaList = new list<String> {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Other', 'All'};
SortFieldSave = SortField;
// alpha filter, use page parameter or set default to all
if (apexpages.currentpage().getparameters().get('alpha') == null) {
AlphaFilter = 'All';
} else {
AlphaFilter = apexpages.currentpage().getparameters().get('alpha');
}
// list generation
BuildQuery();
}
/***
* StdSetControllerUser - paging through the User list
***/
public ApexPages.StandardSetController StdSetControllerUser {
get {
if(StdSetControllerUser == null) {
StdSetControllerUser = new ApexPages.StandardSetController(Database.getQueryLocator(Queryuser));
// sets the number of records in each page set
StdSetControllerUser.setPageSize(Integer.valueOf(RecPerPage));
}
return StdSetControllerUser;
}
set;
}
/***
* getCurrentUserlist - return an User list for the table
***/
public list<UserSubclass> getCurrentUserlist() {
UpdateUserSelectedSet();
Userlist = new list<UserSubclass>();
for (User a : (list<User>)StdSetControllerUser.getRecords()) {
Userlist.add(new UserSubclass(a, UserSelectedSet.contains(a.Id)));
}
return Userlist;
}
/***
* UpdateUserSelectedSet - add/remove Users from the selected User id list
***/
public void UpdateUserSelectedSet(){
for(UserSubclass a : Userlist ){
if(a.aCheckBox == true) {
UserSelectedSet.add(a.aUser.Id);
} else {
if(UserSelectedSet.contains(a.aUser.Id)) {
UserSelectedSet.remove(a.aUser.Id);
}
}
}
UserSelectedCount = UserSelectedSet.size();
}
/***
* ClearUserSelectedSet - remove selected Users and initialize counter
***/
public PageReference ClearAll(){
Userlist.clear();
UserSelectedSet.clear();
UserSelectedCount = 0;
SearchName = '';
Searchdepartment = '';
SaveSearchName = '';
SaveSearchdepartment = '';
AlphaFilter = 'All';
BuildQuery();
return null;
}
/***
* Searchuser - set search criteria fields and refresh User table
***/
public PageReference Searchuser() {
SaveSearchName = SearchName;
SaveSearchdepartment = Searchdepartment;
BuildQuery();
return null;
}
/***
* BuildQuery - build query command for list selection change
***/
public void BuildQuery() {
StdSetControllerUser = null;
String QueryWhere = '';
if (AlphaFilter == null || AlphaFilter.trim().length() == 0) {
AlphaFilter = 'All';
}
Queryuser = 'SELECT Department,FirstName,LastName,Name , CompanyName, Email, LOB__c ' +
' FROM User';
if (AlphaFilter == 'Other') {
QueryWhere = BuildWhere(QueryWhere, '(' + String.escapeSingleQuotes(SortField) + ' < \'A\' OR ' +
String.escapeSingleQuotes(SortField) + ' > \'Z\') AND (NOT ' +
String.escapeSingleQuotes(SortField) + ' LIKE \'Z%\') ');
} else if (AlphaFilter != 'All') {
QueryWhere = BuildWhere(QueryWhere, '(' + String.escapeSingleQuotes(SortField) + ' LIKE \'' + String.escapeSingleQuotes(AlphaFilter) + '%\')' );
}
if (SaveSearchName != null) {
QueryWhere = BuildWhere(QueryWhere, ' (Name LIKE \'%' + String.escapeSingleQuotes(SaveSearchName) + '%\')');
}
if (SaveSearchdepartment != null) {
QueryWhere = BuildWhere(QueryWhere, ' (Department LIKE \'%' + String.escapeSingleQuotes(SaveSearchdepartment) + '%\')');
}
Queryuser += QueryWhere;
Queryuser += ' ORDER BY ' + String.escapeSingleQuotes(SortField) + ' ' + String.escapeSingleQuotes(SortDirection) + ' LIMIT 10000';
system.debug('Queryuser:' + Queryuser);
}
/***
* BuildWhere - build soql string for where criteria
***/
public String BuildWhere(String QW, String Cond) {
if (QW == '') {
return ' WHERE ' + Cond;
} else {
return QW + ' AND ' + Cond;
}
}
/***
* SortDirection - return sort direction. Default ascending(asc)
***/
public String SortDirection {
get { if (SortDirection == null) { SortDirection = 'asc'; } return SortDirection; }
set;
}
/***
* SortField - return sort by field. Default to Name
***/
public String SortField {
get { if (SortField == null) {SortField = 'Name'; } return SortField; }
set;
}
/***
* SortToggle - toggles the sorting of query from asc<-->desc
***/
public void SortToggle() {
SortDirection = SortDirection.equals('asc') ? 'desc NULLS LAST' : 'asc';
// reset alpha filter and sort sequence when sorted field is changed
if (SortFieldSave != SortField) {
SortDirection = 'asc';
AlphaFilter = 'All';
SortFieldSave = SortField;
}
// run the query again
BuildQuery();
}
/***
* DoSomethingOne - do something with one selected User
***/
public PageReference DoSomethingOne() {
system.debug('SelectedOneUser: ' + SelectedOneUser);
return null;
}
/***
* DoSomethingMany - do something with many selected Users
***/
public PageReference DoSomethingMany() {
for (Id UserId : UserSelectedSet) {
system.debug('Checked: ' + UserId);
}
return null;
}
public class UserSubclass {
public Boolean aCheckBox {get;set;}
public User aUser {get;set;}
// sub-class initialization
public UserSubclass(User a, Boolean chk){
aUser = a;
aCheckBox = chk;
}
}
}