LoginSignup
13

More than 3 years have passed since last update.

ServiceNow - ログインユーザ情報を利用する

Last updated at Posted at 2020-09-16

概要

ServiceNowはログインしているユーザ情報を取得するためのオブジェクトを2つ用意しています。一つはクライアントスクリプトで利用できるg_userオブジェクトです。もう一つはサーバスクリプトで利用できるオブジェクトです。

注意が必要なのはフォームフィールドのデフォルト値はサーバス側で実行されるのでデフォルト値にはサーバスクリプトを記述することです。

ServiceNowメソッド及びプロパティ

クライアントスクリプト用オブジェクト(g_user)

g_userプロパティ及ぶメソッド 戻り値 利用例
g_user.userName ログインユーザ名
g_user.firstName 苗字
g_user.lastName
g_user.userID ログインユーザのsys_id
g_user.hasRole(<ロール名>) ログインユーザに指定されたロールが付与されている場合はtrue(継承されたロールも含む)。それ以外はfalse。ユーザがadminロールをもつ場合は何時もtrueが返される g_user.userID('client_script_admin');
g_user.hasRoleExactly(<ロール名>) ログインユーザに指定したロールが不要されている場合はtrue(継承したロールは含めない)。その以外の場合はfalse。ユーザがadminロールをもつ場合は何時もtrueが返される g_user.userID('client_script_admin');
g_user.hasRoles(<コンマ区切りのロール名>) ログインユーザが指定されたロールの一つが付与されている場合はtrue。それ以外の場合はfalse g_user.hasRoles('itil','admin')

サーバスクリプト用オブジェクト

関数名 戻り値 利用例
gs.getUser() ログインユーザのオブジェクトへのポインタを返す var userObject = gs.getUser();
gs.getUserByID(<ユーザID>) 指定されたユーザオブジェクトのポインタを返す var userObject = gs.getUser().getUserByID('employee');
gs.getUserDisplayName() ログインユーザの表示名を返す。例:'ozawa hitoshi' var userDisplay = gs.getUserDisplayName();
gs.getUserID() ログインユーザのsys_idを返す var userID = gs.getUserID();
gs.getUserName() ログインユーザの名前を返す。例:'ozawa' var user_name = gs.getUserName();
gs.hasRole(<ロール名>) グインユーザに指定されたロールが付与されている場合はtrue(継承されたロールも含む)。それ以外はfalse。ユーザがadminロールをもつ場合は何時もtrueが返される if (gs.hasRole('itil')) {
//処理...
}
gs.hasRole(<コンマ区切りのロール名>) ログインユーザが指定されたロールの一つが付与されている場合はtrue。それ以外の場合はfalse if (gs.hasRole('itil,admin')){
//ユーザがロール'itil'又は'admin'をもつ...
}
getCompanyID() ログインユーザの会社のsys_idを返す var companyID = gs.getUser().getCompanyID();
getCompanyRecord() ログインユーザの会社のGlideRecordを返す var company =
getDepartmentID() ログインユーザが所属している部のsys_idを返す var deptID = gs.getUser().getDepartmentID();
getDomainID() ログインユーザがいるドメインのsys_idを返す(ドメインが有効の場合のみ) var domainID = gs.getUser().getDomainID();
getDomainDisplayValue() ログインユーザがいるドメインの名前を返す(ドメインが有効の場合のみ) var domainName = gs.getUser().getDomainDisplayValue();
getEmail() ログインユーザのメールアドレスを返す var email = gs.getUser().getEmail();
getFirstName() ログインユーザの苗字をkぁエス var firstName = gs.getUser().getFirstName();
getLanguage() ログインユーザが選択されている言語を返す var language = gs.getUser().getLanguage();
getLastName() ログインユーザの姓を返す var lastName = gs.getUser().getLastName();
getLocation() ログインユーザの現在位置を返す var location = gs.getUser().getLocation();
getManagerID() ログインユーザのマネージャのsys_idを返す var managerID = gs.getUser().getManagerID();
getMyGroups() ログインユーザが所属しているすべてのグループを返す var groups = gs.getUser().getMyGroups();
hasRoles() ユーザに1つでもロールが付与されている場合はtrue。それ以外はfalse(ESSユーザの場合) if (!gs.getUser().hasRoles()) {
//ESSユーザの処理...
}
isMemberOf(<グループのsys_id又は名前>) ユーザがグループに所属している場合はtrueを返す。それ以外はfalse。 if(gs.getUser().isMemberOf(current.assignment_group)){
  //処理...
}
var isMember = gs.getUser().isMemberOf('Hardware');
  //ログインユーザ以外...
var user = 'admin';
var group = "Hardware";
if (gs.getUser().getUserByID(user).isMemberOf(group)){
  gs.log( gr.user_name + " is a member of " + group);
}
else{
  gs.log( gr.user_name + " is NOT a member of " + group);
}

ユーザの日付形式を取得する

gs.getSession().getUser().getDateFormat()

例:

gs.info(gs.getSession().getUser().getDateFormat());

結果:

yyyy-MM-dd

デフォルト値での設定

デフォルトでフィールドにユーザ名を設定する

javascript: gs.getUserDisplayName();

スクリプトインクルード

「ユーザ名 + [社員番号]」を返す

var GetUserInfo = Class.create();
GetUserInfo.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getUserNameAndEmpNo: function() {
        var user_id = gs.getUserID();
        var grUser = new GlideRecord('sys_user'); //SystemNowのユーザテーブル(sys_id)を参照する
        if (grUser.get(user_id)) { //指定したユーザが存在するか確認
            return gs.getUserDisplayName() + '  [' + grUser.employee_number + ']'; //存在する場合はメールアドレスを返す
        }
        return ''; //存在しない場合は空文字を返す
    },


    type: 'GetUserInfo'
});

クライアントスクリプト

ログインユーザのロールにより表示するフィールドを制御する。

function onLoad() {
    if (g_user.hasRole('admin')) {
        g_form.setDisplay('user_info', false);
        g_form.setMandatory('user_info', true);
    } else {
        g_form.setMandatory('user_info', false);
        g_form.setDisplay('user_info', false);
        g_form.setMandatory('user', false);
    }
}

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
13