Reference qualifierは、Referenceフィールドの選択肢をFilterする機能です。Reference先のテーブルのレコードを、特定のフィールドの値で絞るなど静的条件ではなく、例えばUserのRoleによって条件を変更する場合などは、Scriptingによる実現が現実的です。
ここでは、UserのCompanyフィールドについて、adminロールユーザーなら、すべてのCompanyが選択でき、user_adminロールユーザーならば、そのユーザーのCompanyしか選択できないようなReference qualifierを設定してみます。
まずは、Reference qualifierから呼び出すFunctionを、Script includeで定義します。
- Name: ReferenceQualifierUtils
- Accessible from: All application scopes
var ReferenceQualifierUtils = Class.create();
ReferenceQualifierUtils.prototype = {
initialize: function() {},
//For referece fields to core_compnay
getManagingCompanies: function() {
var encodedQuery = "";
if (!gs.hasRole('admin')) {
var grUser = new GlideRecord('sys_user');
grUser.get(gs.getUserID());
if (gs.hasRole('user_admin')) {
encodedQuery = "sys_id=" + grUser.getValue('company');
} else {
encodedQuery = "sys_id=NULL";
}
}
return encodedQuery;
},
type: 'ReferenceQualifierUtils'
};
次に、この関数を、UserのCompanyフィールドでReferenceQualifierから呼び出します。
Functionを作成するポイントは、必ずReference先のテーブルの対するEncoded query stringを返すようにすることです。Encoded query stringの記載内容によっては、複雑な条件を設定することができます。
sys_idの一覧を返す場合は、sys_idのカンマ区切り文字列をIN句で絞るような条件にします。
(前略)
return "sys_idIN" + <ここにsys_idのカンマ区切り文字列>;
(後略)