1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[ServiceNow] ReferenceフィールドのReference qualifierをScriptで制御する

Last updated at Posted at 2023-07-07

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
Script include - script
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から呼び出します。

Reference Qualifier_1.png

Functionを作成するポイントは、必ずReference先のテーブルの対するEncoded query stringを返すようにすることです。Encoded query stringの記載内容によっては、複雑な条件を設定することができます。

sys_idの一覧を返す場合は、sys_idのカンマ区切り文字列をIN句で絞るような条件にします。

Script include - script
(前略)
    return "sys_idIN" + <ここにsys_idのカンマ区切り文字列>;
(後略)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?