ServiceNow: データベースを検索した結果をフォームで表示する(メールアドレスを取得して表示)
概要
ServiceNowはクライアント側で動作するスクリプトとサーバ側で動作するするスクリプトがあります。
クライアント側で動作するスクリプトはフォームなどのフィール属性や入力チェックに関わるものが多いです。例えば、日付チェックを行うスクリプト(https://qiita.com/htshozawa/items/e039220114a8a9ae2949 )が挙げられます。データテーブルを参照したら、更新する処理はサーバ側で実行します。
本記事はクライアント側からサーバ側を呼び出し、その結果をフォームに表示するスクリプトを作成します。ユーザメールアドレスを取得するスクリプトの例といして作成します。
今回作成するフォームは、次のスクリーンショットのようにユーザを選択すると、右側にユーザのメールアドレスを表示します。
フォーム(クライアント側)
ユーザ名を選択するとメールアドレスを表示するフォームを作成します。メールアドレスは参照のみとします。ユーザーの右にメールアドレスを表示させるためにコンテナーを利用します。
変数(フィールド)
ユーザ、メールアドレス、コンテナ用のフィールドを作成します。
ユーザ
sys_userテーブルの名前を表示する選択ボックスをルックアップ・フィールドを作成します。
メールアドレス
メールアドレスを表示する1行テキストフィールドを作成すます。
UIポリシー
メールアドレスフィールドは参照のみにするUIポリシーを作成します。
クライアントスクリプト
メールアドレスを非表示にするスクリプトとサーバからメールアドレスを取得するスクリプトの2つのクライアントスクリプトを作成します。
メールフィールを非表示にする
メールアドレスを非表示するするスクリプトはフォームをロード(最初に表示される時)する時に起動させます。
function onLoad() {
g_form.getControl('email').style.border = '5px solid white'; //メールフィールドの枠を白色にする
g_form.getControl('email').style.backgroundColor = 'white'; //メールフィールドの背景色を白にする
g_form.setVisible('email', false); //メールフィールドを非表示にする
}
サーバからメールアドレスを取得する:
ユーザのsys_idをサーバ側スクリプトに送り、メールアドレスを取得するするスクリプトを作成します。
function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var ajax = new GlideAjax('getUserEmail'); //Ajaxを利用してサーバを呼び出す。引数にサーバスクリプトファイル名を渡す
ajax.addParam('sysparm_name', 'getEmail'); //呼び出すメソッド名を指定
ajax.addParam('sysparm_uid', newValue); //引き渡す値を指定。今回はユーザsys_idを引き渡す
ajax.getXMLAnswer(function(answer) { //Ajax呼び出し
if (answer.length > 0) { //メールアドレスを取得できたかチェック
g_form.setVisible('email', true); //取得できた場合はメールフィールドを表示して
g_form.setValue('email', answer); // 結果をメールフィールドに設定する
} else {
g_form.setVisible('email', false); //メールアドレスを取得できない場合はメールフィールドを非表示にする
}
});
}
スクリプトインクルード(サーバ側)
テーブル参照、更新、削除などの操作はサーバ側で行います。
クライアントから呼び出されるサーバ側スクリプトはスクリプトインクルードに記述します。
1.アプリケーションナビゲータから「スクリプトインクルード」を検索し、「システム定義」下の「スクリプトインクルード」を選択します。
2.クライアントから呼び出される関数を作成するので「クライアントコール可」をチェックします。チェックするとスクリプトの内容が変わります。
3.スクリプトを入力します。
var getUserEmail = Class.create();
getUserEmail.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getEmail: function () {
var user_id = this.getParameter('sysparm_uid'); //クライアントからの引数を取得。今回はユーザのsys_idを取得
var user_lookup = new GlideRecord('sys_user'); //SystemNowのユーザテーブル(sys_id)を参照する
if(user_lookup.get(user_id)){ //指定したユーザが存在するか確認
return user_lookup.email; //存在する場合はメールアドレスを返す
}
return ''; //存在しない場合は空文字を返す
},
type: 'getUserEmail'
});
複数のレコードを取得する場合は.query()とwhile(user_lookup.next())を利用しますが、sys_idはユニークなので1つのレコードのみを取得するので.get()とifを利用しました。
テスト
Author And Source
この問題について(ServiceNow: データベースを検索した結果をフォームで表示する(メールアドレスを取得して表示)), 我々は、より多くの情報をここで見つけました https://qiita.com/htshozawa/items/9c5f5ef96d29e6fd354b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .