IUserFilterProviderインターフェースを実装したApexクラスの例を説明します。例として、取引先レコードの所有者がログインユーザーであることをフィルター条件にしたカスタムフィルターは次のように実装します。
global class CustomFilter_MyAccounts implements gcss.IUserFilterProvider{
global gcss.UserFilter getUserFilter(String objectName) {
// 現在のオブジェクト名は"objectName"パラメーターで識別できます。
if (objectName != 'Account'){
return null;
}
// ログインユーザーの情報を取得します。
String userid = UserInfo.getUserId();
User myuser = [select Id from User where id = :userid];
gcss.UserFilter result = new gcss.UserFilter();
// このWHERE句は、RaySheetのクエリ文字列に追加されます。
// WHERE句にフィルター条件を組み込むことでカスタムフィルターを実装できます。
result.whereClause = 'Owner.Id= :userArg1';
// フィルター条件にログインユーザーのIdを設定します。
result.userArg1 = myuser.Id;
return result;
}
}
なお、UserFilterクラスでは、WHERE句の変数としてuserArg1からuserArg10まで10個の変数を提供するので、複数のフィルター条件を設定できます。また、この変数には配列を設定することも可能です。
次のコードは、取引先レコードの所有者の所属部署をフィルター条件にしていますが、検索対象には複数の部署を設定しています。
global class CustomFilter_Departments implements gcss.IUserFilterProvider{
global gcss.UserFilter getUserFilter(String objectName) {
// 現在のオブジェクト名は"objectName"パラメーターで識別できます。
if (objectName != 'Account'){
return null;
}
// フィルター条件の部署名を配列に追加します。
List<string> depts = new List<string>();
depts.add('企画部');
depts.add('製造部');
depts.add('物流部');
gcss.UserFilter result = new gcss.UserFilter();
// このWHERE句は、RaySheetのクエリ文字列に追加されます。
// WHERE句にフィルター条件を組み込んむことでカスタムフィルターを実装できます。
result.whereClause = 'Owner.Department = :userArg1 OR Owner.Department = :userArg2 OR Owner.Department in :userArg3';
// フィルター条件を設定します。
result.userArg1 = '営業部';
result.userArg2 = '販売部';
result.userArg3 = depts;
// result.userArg4 = '';
// result.userArg5 = '';
// result.userArg6 = '';
// result.userArg7 = '';
// result.userArg8 = '';
// result.userArg9 = '';
// result.userArg10 = '';
return result;
}
}
Visualforceページの実装方法も含めたより詳細な具体例は取引先にカスタムフィルターを適用するを参照してください。
カスタムフィルターにパラメーターを渡したい場合は、IUserFilterProvider2インターフェースを使用してください。