Salesforce
営業担当者のリストラッパークラスの助けを借りてページナビゲーション。
サーチ…
前書き
Slaesforce StandardSetControllerはsObjectのListのみを保持しますが、ラッパークラスオブジェクトの保持リストはありません。以下のソースコードは、営業担当者のラッパークラスを使用したページネーションの使用法を示しています。
ページネーションコントローラ
コード例:ページネーションコントローラの作成から開始します。
public with sharing class Pagination {
}
すべての連絡先をページネーションの形式で表示し、連絡先の削除操作を実行するために、連絡先を選択するか、選択を解除するチェックボックスが1つずつある必要があります。だから私は連絡先とブール変数を保持するためにラッパークラスを作成する必要があります。最初にコントローラのページネーション用のWrapperクラスを作成します。ページ下部のコントローラにコードの下に挿入します。
public class contactWrapper{
public Contact cont {get;set;}
public Boolean isSelected{get;set;}
public contactWrapper(contact c,Boolean s)
{
cont=c;
isSelected=s;
}
}
StandardSetControllerの助けを借りてApexでデータを取得してページ付けする。 StandardSetControllerは、Visualforceページのカスタムコードを大幅に簡略化するために使用できる組み込み機能を備えた非常に強力なツールです。サーバーは要求されているページのデータのみを返すため、StandardSetControllerはビューステートを大幅に減らすことができます。特に、SOQLの使用中に表示されるビューステートに比べて大幅に削減できます。
Public Integer noOfRecords{get; set;} // Future reference in Visual force Page
Public Integer size{get;set;} // Future reference in Visual force Page
public final Integer Page_Size=10; // Number records in a Page should be displayed
public ApexPages.StandardSetController setCon {
get{
if(setCon == null){
size=Page_Size;
string queryString = 'Select Id,Name, Email, Birthdate, Phone, MobilePhone from Contact order by Name';
setCon = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
setCon.setPageSize(size);
noOfRecords = setCon.getResultSize();
}
return setCon;
}set;
}
これで、setCon.getRecords()に対して要求されたときはいつでも、変数setConに連絡先があり、setConから最初の10件の連絡先レコードを取得します。ここで私はあなたにデモを示す簡単なラッパークラスを作成しています。要件に基づいて独自のラッパークラスを作成できます。しかし、常にApexPages.StandardSetControllerはsObjectのListだけを保持していることに注意する必要があります。これは、ラッパークラスオブジェクトのリストを保持しません。それが、私がこの未来を別のやり方で達成するために、以下に余分なコードを書いた理由です。下のコードは、連絡先のリストをラッパークラスオブジェクトのリストに変換します。これにより、ビジュアルフォースページで連絡先を呼び出すときに、ラッパークラスオブジェクトのリストが表示されます。
public list<contactWrapper> contWpr{get;set;}
public set<id> selectedContactIds{ get;private set;} // to maintain state of the selected contact
// through out paginating
public Pagination() {
selectedContactIds=new set<id>();
}
Public list<contactWrapper> getContacts(){
contWpr =new list<contactWrapper>();
for(Contact c: (List<Contact>)setCon.getRecords())
if(selectedContactIds.contains(c.id))
contWpr.add(new contactWrapper(c,true));
else
contWpr.add(new contactWrapper(c,false));
return contWpr;
}
今あなたは結果を生成するためのコードを書いていますが、ページをどのようにナビゲートするのですか?これはApexPages.StandardSetController.Lookを使って簡単に実行できます。StandardSetControllerの下のコードビューで、ページ番号を維持する必要はありません。オフセットや制限など。StandardSetControllerメソッドを使用してください。下のコードをページネーションコントローラにコピーします。
public Boolean hasNext {
get {
return setCon.getHasNext();
}
set;
}
public Boolean hasPrevious {
get {
return setCon.getHasPrevious();
}
set;
}
public Integer pageNumber {
get {
return setCon.getPageNumber();
}
set;
}
public void first() {
setCon.first();
// do you operation here
}
public void last() {
setCon.last();
// do you operation here
}
public void previous() {
setCon.previous();
// do you operation here
}
public void next() {
setCon.next();
// do you operation here
}
あなたのほぼ完了した連絡先を改ページ。私のページ全体の機能を果たすために追加した最後のいくつかのメソッド。先ほど触れたように、連絡先を選択するための追加のチェックボックスがあり、選択した連絡先の削除操作が実行されます。
public void contactSelection()
{
Id id=(Id)ApexPages.currentPage().getParameters().get('cId');
if(selectedContactIds.contains(id))
selectedContactIds.remove(id);
else
selectedContactIds.add(id);
}
public void deleteContacts()
{
List<contact> contactToDelete=[select id from contact where id in :selectedContactIds];
if(contactToDelete.size()!=0) // if(!contactToDelete.isEmpty()) // Best Practice
{
try { delete contactToDelete; } // You may get Exception if you try to delete the
// related contact ,include try block to avoid error.
catch(exception ex){ System.debug(ex); }
refresh();
}
}
public pageReference refresh() {
setCon = null;
selectedContactIds=new set<id>();
getContacts();
setCon.setPageNumber(1);
return null;
}