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

#概要
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')) {<br/> //処理...<br/> }|
|gs.hasRole(＜コンマ区切りのロール名＞)|ログインユーザが指定されたロールの一つが付与されている場合はtrue。それ以外の場合はfalse|if (gs.hasRole('itil,admin')){<br/>//ユーザがロール'itil'又は'admin'をもつ...<br/>}|
|getCompanyID()|ログインユーザの会社のsys_idを返す|var companyID = gs.getUser().getCompanyID();|
|getCompanyRecord()|ログインユーザの会社のGlideRecordを返す|var company = |gs.getUser().getCompanyRecord();|
|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()|ユーザに１つでもロールが付与されている場合はtrue。それ以外はfalse(ESSユーザの場合)|if (!gs.getUser().hasRoles()) {<br/>//ESSユーザの処理...<br/>}|
|isMemberOf(＜グループのsys_id又は名前＞)|ユーザがグループに所属している場合はtrueを返す。それ以外はfalse。|if(gs.getUser().isMemberOf(current.assignment_group)){<br/>&nbsp;&nbsp;//処理...<br/>}<br/> var isMember = gs.getUser().isMemberOf('Hardware');<br/>&nbsp;&nbsp;//ログインユーザ以外...<br/>var user = 'admin';<br/>var group = "Hardware";<br/>if (gs.getUser().getUserByID(user).isMemberOf(group)){<br/>&nbsp;&nbsp;gs.log( gr.user_name + " is a member of " + group);<br/>}<br/>else{<br/>&nbsp;&nbsp;gs.log( gr.user_name + " is NOT a member of " + group);<br/>}|

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

```
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);
    }
}
```