ServiceNowでよく使用するカタログクライアントスクリプト(CCS)について学んだことの備忘録となります。
今回は GlideForm という API を使用します。詳細については、ServiceNow Developer サイトに記載があるのでそちらを参考にしてください。
基本的に GlideForm を使用する際は g_form. の後ろに各メソッドを記入していきます。
今回はよく使いそうな Reference型の変数で設定したレコードから値を取得して各項目に取得した値を設定するスクリプトを作成します。
事前準備
カタログクライアントスクリプトは名前にも入っているようにカタログ画面で動くスクリプトです。
そのため、動かすにはカタログアイテムを用意する必要があるためまずはこちらを準備します。
カタログアイテムの作成
左側のアプリケーションナビゲーターに sc_cat_item.list
と入力して Enter を押下します。
右上にある New ボタンをクリックして、下記の通りに各項目に設定を行います。
Name | Test Catalog Client Script |
Catalogs | Service Catalog |
Category | Test |
Category には最初から Test は無いので検索ウィンドウの右上にある New ボタンから新規作成しておきます。既にあるものを使用してもよいですが、ポータル画面から探すときに新しく用意をしておくと探すのが楽になります。
新規作成時にまず Title だけ入力して Submit を押します。
その後に Category の一番右側にある インフォボタンをクリックして Open Record で Catalogに Service Catalog を設定していきます。設定が完了したら Update ボタンをクリックします。
完了するとカタログアイテムの Category で検索ウィンドウに作成したものが表示されるようになります。
変数の準備
カタログアイテムの下の方にある関連リストから変数を作成してきます。
今回は変数セットを用意して変数の設定をしていきます。
関連リストにある Variable Set をクリックして New ボタンをクリックします。
最初の画面では Single-Row Variable Set を選択します。
Title には User Profile と入力しておきます。
Internal name には自動的に値が入ると思うのでそのままにしておきます。
変数セットの作成が完了したら変数を作成します。
下記の通りに設定して変数を順々に作成していきます。
Name | Type | Question | Order | ReadOnly |
user | Reference | User | 100 | False |
user_name | Single Line Text | User ID | 200 | True |
first_name | Single Line Text | First Name | 300 | True |
last_name | Single Line Text | Last Name | 400 | True |
事前準備はこれで終了です。
カタログクライアントスクリプトの作成
まずはカタログクライアントスクリプトを作成します。
カタログアイテムの関連リストから作成しても良いですし、変数セットから作成しても良いです。
カタログアイテムの関連リストから作成する場合は、そのカタログアイテムでのみスクリプトが動くようになります。変数セットの関連リストから作成する場合は、その変数セットを設定している全てのカタログアイテムでスクリプトが動くようになります。
今回はカタログアイテムの関連リストから作成します。
変数セットの時と同じように関連リストにある Catalog Client Script の New ボタンをクリックして以下の通りに入力していきます。
Name | Test Set User Profile |
UI Type | All |
Type | onChange |
Variable name | User Profile > user |
全ての入力が完了したらヘッダーを右クリックして Save をクリックします。
onChange のスクリプトは Variable name で指定した変数の値が変化したタイミングでスクリプトが動くようになります。
一旦下記のようにスクリプトを設定します。
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
g_form.getReference("user", getUserProfile)
}
function getUserProfile(user) {
g_form.setValue("user_name", user.getValue("user_name"));
g_form.setValue("first_name", user.getValue("first_name"));
g_form.setValue("last_name", user.getValue("last_name"));
}
設定したらカタログアイテム画面で Try It ボタンを押下してテストしてみましょう。
User のところで適当なユーザーを選択します。
選択した後に各項目が全て埋まっていることを確認します。
これでスクリプトのテストも出来たので完成とします。
基本的にはこのような流れでカタログクライアントスクリプトを作成していきます。
今回使用したメソッドの説明
getReference(String fieldName, Function callBack)
Reference型の変数で選択したレコードの情報を取得したい場合にこのメソッドを使用することで簡単に取得することが出来ます。
g_form.getReference("user", getUserProfile);
function getUserProfile(user) {
g_form.setValue("user_name", user.getValue("user_name"));
g_form.setValue("first_name", user.getValue("first_name"));
g_form.setValue("last_name", user.getValue("last_name"));
}
Reference型の変数名とコールバック関数名を引数に渡してあげることで、コールバック関数で戻り値として GlideRecord オブジェクトを取得します。
getUserProfile 内では取得した GlideRecord から取得できる情報を各項目に設定をするという処理を行っています。
他にも GlideAjax を使用する方法もありますが、スクリプトインクルードの作成もしなければいけないので Reference型の変数に設定したテーブルからのみ値を取得したい場合はこちらを使うことが多いです。
setValue(String fieldName, String Value)
項目に値をセットしたいときにこのメソッドを使用します。
基本的には他のメソッドなどを使用して設定したい値を取得してからこちらを使用して値を設定することが多いです。
他によく使用するメソッドの説明
getUniqueValue()
今回使用していないですが、こちらでカタログアイテムの sys_id を取得することが出来ます。
変数セット側でカタログクライアントスクリプトを作成したときに、特定のカタログアイテム内では動かしたくないなどの場合に使用することが多いです。
getValue(String fieldName)
項目に入力した値を取得したいときに使用します。
このメソッドを使用して取得する値は全て文字列(String)となります。
CheckBox などで True, False の Boolean型を取得したい場合は getBooleanValue() を使用しなければいけないので注意が必要です。
setMandatory(String fieldName, Boolean mandatory)
項目に必須を設定したい場合に使用します。
g_form.setMandatory("user", true);// 必須にする
g_form.setMandatory("user", false);// 必須を解除する
setReadOnly(String fieldName, Boolean readOnly)
項目に読み取り専用を設定したい場合に使用します。
g_form.setReadOnly("user", true);// 読み取り専用にする
g_form.setReadOnly("user", false);// 読み取り専用を解除する
setVisible(String fieldName, Boolean display)
項目を表示・非表示にしたい場合に使用します。
g_form.setVisible("user", true);// 表示する
g_form.setVisible("user", false);// 非表示にする
・setMandatory
・setReadOnly
・setVisible
上記3つは表示を変更するメソッドになりますが、表示変更に関しては可能であれば UI Policy を使用することを推奨されています。
GlideUserメソッドの説明
GlideForm 以外によく使用するもので GlideUser があります。
こちらはログインユーザーの情報を取得する際に使用しています。
基本的には g_user. の後ろにメソッド名を記入していきます。
userName
ログインユーザーのユーザーID(user_name) を取得します。
console.log("userName: " + g_user.userName);
// 実行結果
userName: admin
userID
ログインユーザーの sys_id を取得します。
console.log("userID: " + g_user.userID);
// 実行結果
userID: 6816f79cc0a8016401c5a33be04be441