2
4

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 3 years have passed since last update.

実践ServiceNow - 権限許可申請

Posted at

概要

Active Directoryなどの管理者権限申請と入室申請をServiceNowで作成します。
実際に利用する場合は承認フローの定義も必要になりますが、今回は画面を作成します。

フォームの実装

今回は次のようなネットワークの管理者権限とサーバ部屋などの入室申請フォームを作成します。
privilege_request_test_service_portal_5.png

1.先ずはフォームを作成します。アプリケーションナビゲータから「アイテムの」を検索ます。
privilege_request_test_1.png
2.アイテムの管理はよく使うのでお気に入りに登録します。「アイテムの管理」の右の星をクリックします。
次回から「アイテムの管理」を開く場合はアプリケーションナビゲータの直下にある星アイコンを選択して、「サービスカタログ・アイテム」を選択します。
privilege_request_test_2.png
3.「新規」ボタンを押下して、新しいフォームを作成します。
privilege_request_form_2.png
4.項目「名前」と項目「簡単な説明」を入力します。

項目
名前 Privilege request form
Request permission to have special privilege
privilege_request_form_3.png

5.ポータル用の設定を行います。
「ポータルの設定」タブを選択して次のように設定します。

項目
要求の方法 要求
買い物かごに追加を非表示にする チェック
数量を非表示にする チェック
配送時間を非表示にする チェック
ウィッシュリストに追加を非表示にする チェック
添付ファイルを非表示にする チェック
privilege_request_form_4.png

6.フォームを保存します。
ヘッダ領域を右クリックして「保存」を選択します。保存するとページの下に変数やスクリプトのタブが表示されます。
privilege_request_form_5.png

フィールド(変数)の作成

1.権限申請フォームには9つのフィールドがあります。これらのフィールを作成していきます。
画面からは8つのフィールドしかないようですが、ネットワーク管理者申請と入室申請用は別々に設けるため9フィールドを定義します。
privilege_request_form_variables_1.png
2.「変数」タブを選択して「新規」ボタンを押下します。
privilege_request_form_variables_2.png
3.最初に日付のフィールドを定義します。次のように設定します。

項目
タイプ 日付
必須 チェック
順番 10
質問 Submission date
名前 submission_date
privilege_request_form_variables_3.png

4.フィールドの幅を短くします。
「タイプ仕様」タブを選択して、変数の幅を「System Default Width(25)%」にします。
privilege_request_form_variables_4.png

5.デフォルトで今日の日付を入力するようにします。
「デフォルト」タブを選択してデフォルト値に「now」を入力します。
これで日付フィールドの定義は終わりましたので「送信」ボタンを押下します。
privilege_request_form_variables_5.png

6.次の申請者情報を表示するフィールドを作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_10.png
7.申請はログインしているユーザに限るので、ログインしているユーザ情報を表示するだけにします。
次のように設定します。

項目
タイプ 1行テキスト
順番 20
質問 Employee info
名前 employee_info
privilege_request_form_variables_11.png
8.フィールドの幅を短くします。
「タイプ仕様」タブを選択して、変数の幅を「25%」にします。
privilege_request_form_variables_12.png
9.デフォルトでログインしているユーザ名を表示します。
「デフォルト値」タブを選択してデフォルト値に「javascript: gs.getUserDisplayName();」を入力します。これで社員情報フィールドの定義は終わりなので「送信」ボタンを押下します。
ログインユーザを取得するプロパティ及び関数に関しては次のページを参照してください。
https://qiita.com/htshozawa/items/f76615b1acaad3d5c68b
privilege_request_form_variables_13.png
10.申請の種類選択のラジオボタンフィールドを作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_20.png
11.ID選択フィールドを定義します。
項目
タイプ 複数選択肢
必須 チェック
順番 110
質問 ID Type
名前 id_type
privilege_request_form_variables_21.png
12.ラジオボタンを横に表示させます。
「タイプ仕様」タブを選択して、変数の幅を「75%」にします。幅が短いと改行する2段に表示されます。
項目「選択肢の表示方向」を「交差」にします。
privilege_request_form_variables_22.png
13.必須フィールドに指定したので、デフォルト値を設定します。ネットワーク管理者権利申請の方が入室申請よりも多いと想定してデフォルトではネットワーク管理者申請を選択されるようにします。
「デフォルト」タブを選択します。デフォルト値に「system_login」を入力します。この値は後程定義するネットワーク権利申請の値です。
privilege_request_form_variables_23.png
14.設定を保存します。
ヘッダ領域を右クリックして「保存」を選択します。保存されるとページ下に選択肢を作成するための項目が表示されます。
privilege_request_form_variables_24.png
15.選択肢を定義します。表示された「質問の選択肢」の「新規」ボタンを押下します。
privilege_request_form_variables_25.png
16.テキストを「Network Administration Privilege」に設定して、値を「system_login」とします。この「system_login」が上ステップ設定したデフォルト値です。
privilege_request_form_variables_26.png
17.次の選択肢を作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_27.png
18.テキストに「Room Entry Privilege」、値に「entry_card」を入力します。
privilege_request_form_variables_28.png
19.「更新」ボタンを押下してフィールド「ID Type」を変更します。
privilege_request_form_variables_29.png
20.入室許可用に社員証の番号を入力するフィールドを作成します。施設管理会社に入室許可を依頼する場合に伝える番号です。ネットワーク申請の場合は不要です。
「新規」ボタンを押下します。
privilege_request_form_variables_30.png
21.次のように入力します。入力した後に「送信」ボタンを押下します。
項目 コメント
タイプ 1行テキスト
順番 120
質問 Card id
名前 card_id
サンプルテキスト Employee card internal number フィールドに値が入力される前に表示する文字列
privilege_request_form_variables_31.png
22.入室権限の種類選択フィールドを作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_40.png
23.次のように設定します。
項目
タイプ 複数選択肢
必須 チェック
順番 130
質問 Room request privilege
名前 room_request_privilege
privilege_request_form_variables_41.png
24.ラジオボタンを横に並べるようにします。
「タイプ仕様」タブを選択して、選択肢の表示方向を「交差」にします。
privilege_request_form_variables_42.png
25.デフォルト値を入室申請にします。
「デフォルト」タブを選択してデフォルト値を「room_entry_request」にします。
privilege_request_form_variables_43.png
26.選択肢を入力するために一旦、保存します。
ヘッダ領域を右クリックした「保存」を選択します。
privilege_request_form_variables_44.png
27.ネットワーク権限申請用の選択肢フィールドを作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_45.png
28.項目テキストに「Room entry request」を入力して、値に「room_entry_request」を入力します。入力後に「送信」ボタンを押下します。
privilege_request_form_variables_46.png
29.別の選択肢を作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_47.png
30.項目「テキスト」に「Other privilege」を入力して、値に「other_privilege」を入力した後に「送信」ボタンを押下します。
privilege_request_form_variables_48.png
31.「更新」ボタンを押下してフィールド設定を保存します。
privilege_request_form_variables_49.png
32.ネットワーク権限種類選択フィールドを作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_50.png
33.次のように設定します。
項目
タイプ 複数選択肢
必須 チェック
順番 135
質問 System request privilege
名前 system_request_privilege
privilege_request_form_variables_51.png
34.横に表示するように設定します。
「タイプ仕様」タブを選択して、選択肢の表示方向を「交差」にします。
privilege_request_form_variables_52.png
35.デフォルト値をネットワーク権限申請に設定します。
「デフォルト」タブを選択して、デフォルト値に「system_access_request」を入力します。
privilege_request_form_variables_53.png
36.選択可能な値を作成するのでパージに残るように保存します。
ヘッダ領域を右クリックして「保存」を選択します。
privilege_request_form_variables_54.png
37.選択を作成します。
ページ下に表示される「質問の選択肢」の右の「新規」ボタンを押下します。
privilege_request_form_variables_55.png
38.項目「テキスト」に「System access request」を入力して、値に「system_access_request」を入力した後に「送信」ボタンを押下します。
privilege_request_form_variables_56.png
39.「その他」の選択肢を作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_57.png
40.項目「テキスト」に「Other privilege」を入力して、値に「other_privilege」を入力した後に「送信」ボタンを押下します。
privilege_request_form_variables_58.png
41.ネットワーク権限種類選択フィールを保存して閉じます。
「更新」ボタンを押下します。
privilege_request_form_variables_59.png
42.申請する権限の詳細を記入するフィールドを作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_60.png
43.次のように設定した後に「送信」ボタンを押下します。
項目
タイプ 1行テキスト
必須回答 チェック
順番 140
質問 Request privilege detail
名前 request_privilege_detail
サンプルテキスト server name, System name, privilege detailed information
privilege_request_form_variables_61.png
44.コメントフィールドを作成します。
「新規」ボタンを押下します。
privilege_request_form_variables_70.png
45.次のように設定した後に「送信」ボタンを押下してフィールドを作成します。
項目
タイプ 複数行テキスト
必須 チェック
順番 150
質問 Comment
名前 comment
privilege_request_form_variables_71.png
46.注意メッセージ用のフィールドを作成します。注意メッセージは後で読取り専用にします。
「新規」ボタンを押下します。
privilege_request_form_variables_80.png
47.次のように設定します。
項目
タイプ 複数行テキスト
順番 200
質問 *
名前 warning
privilege_request_form_variables_81.png
48.デフォルト値に注意メッセージを入力します。
「デフォルト」タブを選択します。デフォルト値に次の文面を入力します。
Warning
1)The person applying should be the person who needs the privilege.
2)Privilege should only be used by the person granted and not rent to anyone else.
3) In case the card is lost or access information is leaked, please contact us immediately.

privilege_request_form_variables_82.png
49.フィールドの登録を完成すると次のように9つのフィールドが定義されます。
privilege_request_form_variables_90.png

UIポリシー

UIポリシーで社員情報と注意メッセージを読取り専用にします。また入室申請種類フィールドを非表示にします。
1.「カタログUIポリシー」タブを選択して新しいUIポリシーを作成するために「新規」ボタンを押下します。
privilege_request_form_ui_policy_1.png
2.項目「簡単な説明」に「Form initialization」を入力します。
privilege_request_form_ui_policy_2.png
3.UIポリシーアクションを定義するのため、一旦保存します。
ヘッダ領域を右クリックして「保存」を選択します。保存されるとページ下にカタログUIポリシーアクションが表示されます。
privilege_request_form_ui_policy_3.png
4.注意メッセージを読取り専用にするアクションを作成します。
「新規」ボタンを押下します。
privilege_request_form_ui_policy_4.png
5.注意メッセージを読み込み専用に設定します。
次のように項目を設定した後に「送信」ボタンを押下します。

項目 コメント
変数名 warning 注意メッセージのフィールド名
読み込み専用 True
privilege_request_form_ui_policy_5.png
2.社員情報フィールドを読み込み専用に設定するアクションも作成します。
「新規」ボタンを押下します。
privilege_request_form_ui_policy_6.png
3.次のように項目を設定した後に「送信」ボタンを押下します。
項目 コメント
変数名 employee_info 社員情報フィールド名
順番 200
読み込み専用 True
privilege_request_form_ui_policy_7.png
4.入室申請種類フィールドを非表示にします。入室申請種類はIDタイプが入室権限の申請の場合に表示します。
「新規」ボタンを押下します。
privilege_request_form_ui_policy_8.png
5.項目を次のように設定した後に「送信」ボタンを押下します。
項目 コメント
変数名 room_request_privilege 入室申請種類フィールド名
順番 300
表示 False 非表示にする
privilege_request_form_ui_policy_9.png
6.UIポリシーを保存して設定を完了します。
privilege_request_form_ui_policy_10.png

クライアントスクリプト

社員番号を表示するスクリプトとIDタイプを選択によりネットワーク申請か入室申請を表示する2つのスクリプトを作成します。

初期化

ログインしている社員の社員番号を表示します。
1.「カタログクライアントスクリプト」タブを選択して「新規」ボタンを押下します。
privilege_request_form_client_script_initial_1.png
2.次のように設定した後に「送信」ボタンを押下します。

項目 コメント
名前 Form initialization
UIタイプ すべて ポータルでもスクリプトを実行させるため
タイプ onLoad フォームを開いた時に実行
スクリプト
function onLoad() {
    setUserInfo(); //ユーザ情報の表示
    setWarningMessage(); //注意メッセージの背景色を白にして、ボーダーを無くす
}

function setUserInfo() {
    var ajax = new GlideAjax('GetUserInfo'); //Ajaxを利用してサーバを呼び出す。引数にサーバスクリプトファイル名を渡す
    ajax.addParam('sysparm_name', 'getUserNameAndEmpNo'); //呼び出すメソッド名を指定
    ajax.getXMLAnswer(function(answer) { //Ajax呼び出し
        if (answer.length > 0) { //メールアドレスを取得できたかチェック
            g_form.setValue('employee_info', answer); //   結果をメールフィールドに設定する
        }
    });
}

function setWarningMessage() {
    try { //ポータルの場合はエラーになるのでスキップ
        var warning = g_form.getControl('warning'); //注意要素を取得
        warning.style.backgroundColor = 'white'; //背景を白に変更
        warning.style.color = 'red'; //文字色を赤にする
        warning.style.borderStyle = 'none'; //ボーダーを無くす
    } catch (err) {}
}

privilege_request_form_client_script_initial_2b.png

選択可能な権限の変更

IDタイプによりネットワーク種類フィールド又は入室種類フィールドを表示するスクリプトを作成します。
1.「新規」ボタンを押下します。
privilege_request_form_client_script_toggle_1.png
2.項目を次のように設定した後に「送信」ボタンを押下します。

項目 コメント
名前 Toggle request choice based on type id
UIタイプ すべて ポータルでも実行する
タイプ onChange 変数名で指定したフィールドが変更された場合に実行
変数名 id_type 変更を監視するフィールド名

フィールドを非表示するプロパティは.setVisible()と.setDisplay()があります。.setVisible('フィールド名',false)の場合もフィールドは非表示になりますが、フィールドが空白になり次のフィールドの間に空白ができます。.setDisplay('フィールド名',false)の場合は空白が次のフィールドで埋まります。今回はIDタイプにより表示するフィールドを切り替えるので.setDisplay()を使います。

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }

    if (newValue == 'entry_card') { //入室許可申請の場合
        g_form.setDisplay('room_request_privilege', true); //入室申請種類フィールドを表示
        g_form.setDisplay('system_request_privilege', false); //ネットワーク種類フィールドを非表示
        g_form.setValue('room_request_privilege', 'room_entry_request'); //デフォルトを入室申請にする
		g_form.setMandatory('current_id', true); //カード番号フィールドを必須にする
    } else { //ネットワーク権限申請の場合
        g_form.setDisplay('room_request_privilege', false); //入室種類フィールドを非表示にする
        g_form.setDisplay('system_request_privilege', true); //ネットワーク種類フィールドを表示する
        g_form.setValue('system_request_privilege', 'system_access_request'); //デフォルトをネットワーク権限申請にする
		g_form.setMandatory('current_id', false); //カード番号フィールドは任意にする
    }
}

privilege_request_form_client_script_toggle_2b.png

カタログ指定

ポータルから申請を出せるように申請を表示するカタログとカテゴリを指定します。
1.申請設定ページを表示します。
申請設定ページが表示されていない場合は履歴アイコンを選択して、Privilege request formカタログアイテムを選択します。
privilege_request_catalog_entry_1.png
2.項目「カタログ」に右に表示されている錠前アイコンをクリックします。
privilege_request_catalog_entry_2.png
3.虫眼鏡をクリックします。
privilege_request_catalog_entry_3.png
4.「サービスカタログ」を選択します。
privilege_request_catalog_entry_4.png
5.カタログに「サービスカタログ」が追加されたことを確認した後にカテゴリの虫眼鏡を選択します。
privilege_request_catalog_entry_5.png
6.今回は「サービス」にこの申請を含めるようにします。
privilege_request_catalog_entry_6.png
7.カテゴリが「サービス」に設定されたことを確認した後に「更新」ボタンを押下して保存します。
privilege_request_catalog_entry_7.png
8.正しくポータルで表示されるか確認します。
アプリケーションナビゲータから「ポータル」を検索して、「サービスポータルホーム」を選択します。
privilege_request_catalog_entry_10.png
9.サービスカタログは要求内容にあります。
「要求内容」を選択します。
privilege_request_catalog_entry_11.png
10.カテゴリから「オフィス」>「サービス」を選択します。
表示されたサービスから「Privilege request form」を選択します。正しく設定されていればフォームが開きます。
privilege_request_catalog_entry_12.png

サーバスクリプト(スクリプトインクルード)

社員情報フィールドにログインしているユーザの名前と社員番号を表示するようにします。クライアントだけでは社員名しか表示することができないのでサーバ側スクリプトを呼び出して社員番号も表示するようにします。
1.アプリケーションナビゲータから「スクリプトインクルード」を検索して、「システム定義」下の「スクリプトインクルード」を選択します。
2.新しいスクリプトを作成するために「新規」ボタンを押下します。
privilege_request_script_include_1.png
3.次のように設定します。クライアントコール可能をチェックするとコードテンプレートがスクリプトに生成されます。また、クライアントコール可能とはクライアントからの呼び出しを許可すると言う意味です。
入力した後に「送信」ボタンを押下します。

項目
名前 GetUserInfo
クライアントコール可能 チェック
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'
});

privilege_request_script_include_2.png

テスト

最後にすべて正しく動作するか確認します。

カタログクライアントから

先ずはサービスカタログ・アイテムから確認します。
1.お気に入りから「サービスカタログ・アイテム」を選択します。
privilege_request_test_2.png
2.「試行」ボタンを押下します。
privilege_request_test_3.png
3.次のような申請フォームが表示されます。
privilege_request_test_4.png
4.ID Type「Room Entry Privilege」を選択するとSystem request privilegeがRoom request privilegeに変更します。
privilege_request_test_5.png

サービスポータルから

次に再びサービスポータルから確認します。
1.アプリケーションナビゲータから「サービスポータル」を検索して「サービスポータルホーム」を選択します。
privilege_request_test_service_portal_1.png
2.「要求内容」を選択します。
privilege_request_test_service_portal_2.png
3.カテゴリから「オフィス」>「サービス」を選択します。
privilege_request_test_service_portal_3.png
4.「Privilege request form」を選択します。
privilege_request_test_service_portal_4.png
5.サーバ側スクリプトを作成したので、今回は社員情報フィールに社員名と社員番号が表示されます。
privilege_request_test_service_portal_5.png

以上

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?