Version: Istanbul
※追記中
GlideRecordで試したtipsを追記予定ですあまりに記事が膨らんだら記事を分けます確認以外の操作は英語でadminで行っていますこちらの記事は分けた記事ですこちらでもGlideRecordを利用しています
[ServiceNowで色々なデータを取得する]
https://qiita.com/20_percent_cooler/items/f5b46185999b6ef4f059
スクリプトで1000行追加
テスト用テーブル作成
Filter navigatorにtablesと入力しSystem Defenition - Tablesを表示してinsert用のtableを作成するためにNewボタンを押下します
Labelにglide_record_testと入力しInsert a new row...でID Integer, Value String, Flg True/False, Atribute StringのColumnを追加してSubmitします
スクリプト作成
ServiceNowでスクリプトを作成するにはBusiness Rule(Database Triggerのようなもの)やClient Scripts(クライアントサイドで動作するJava Script)やUI Action(ボタン押下時のJavaScriptでServer/Client Sideどちらかで動作)など色々とあるようですが今回はScheduled Jobs(Unix/Linuxでいうcronに登録したbatchプログラム)を使用します
Filter navigatorにscheduledと入力してSystem Defenition - Scheduled Jobsを表示してNewボタンを押下します
次の画面ではAutomatically run a script of your choosingをクリックします
Nameにglide_record_testと入力してRunでOn Demand(呼んだときだけ実行)を選択してRun this scriptに以下の内容を入力しtてSubmitしますGlideRecordをnewしている箇所は作成したテーブル(table)のNameを設定してください
var loop_max = 1000;
var i = 0;
for (i; i < loop_max; i+=1) {
insert_method();
}
function insert_method(){
var gr = new GlideRecord('x_101872_lets_get_glide_record_test');
gr.initialize();
gr.id = i;
gr.value = 'insert';
gr.insert();
}
スクリプト実行
Submitして保存した後再表示してExecute Nowを押下します
作成したtableに1000行(record)挿入(insert)されています今回FlgとAttributeのColumnを使っていないですがこの後で条件付きUpdate用に使おうかと考えています
行削除
行を全て削除
全ての行消すには差し当たり条件無しでdeleteMultipleを使ってExecute Nowしてください条件を指定する場合はaddQueryを使用します日付の指定はServiceNowは内部的にGMTになっているので気をつけます
var gr = new GlideRecord('x_101872_lets_get_glide_record_test');
gr.deleteMultiple();
スクリプトでユーザ追加
スクリプト作成
Scheduled Jobsに以下の内容でスクリプトを追加しますパスワードはsetDisplayValue()で値を設定しますsys_userのPasswordのTypeはPassword (1 Way Encrypted)ですsetDisplayValue()を使用することでEncryptされる前の値(認証に使用するときの値)を設定出来るようです
var loop_max = 10;
var i = 0;
for (i; i < loop_max; i+=1) {
insert_method();
}
function insert_method(){
var gr = new GlideRecord('sys_user');
gr.initialize();
gr.user_name = String(i);
gr.user_password.setDisplayValue(String(i));
gr.name = 'insert_test';
gr.insert();
//gr.deleteMultiple();
}
以下の例ではNameにuser_insert_testでRunをOn Demand(呼ばれたら実行)にしています
スクリプト実行
Execute Nowを実行して追加されたユーザ(Users)を確認します元々1~6までユーザが居たので0, 7~9まで追加されたようです
エラーログ確認
Logsを確認するとDuplicate EntryのSQLエラーが発生していました
先ほどのスクリプトの2行目を
var i = 0;
では無く
var i = 7;
にしていればエラーにならなかったのですが今回はsys_userをGlideRecordで直接操作してユーザを追加出来るかの確認だったので気にしないことにします後失敗したときにSQLエラーが出ることを確認出来たので良かったです
確認
追加したユーザでログイン出来るか確認しますユーザ名とパスワードにスクリプトで設定した8を入力してログインします
ログインに成功しました
入力画面でユーザ追加
入力画面用のテーブルを作成
入力画面用にテーブルを作成します以下の例では[Label]を"User Regist Form"で列に"User Name"(String), "Name"(String), "User Passwod"(Password (1 Way Encrypted))を追加してテーブルを作成しています
ユーザ追加用のボタンの作成
Filter navigatorにRegist と入力してメニューを絞り込んで作成したテーブルのレコード一覧を表示します
一覧の列のヘッダを右クリックしてConfigure - UI Actionsを選択します
UI Actionsの一覧でNewボタンを押下して登録用のボタンを追加します以下の例では[Name]に"Regist", [Form button]にチェック(True)して
[Script]に以下の内容を登録してますuser_passwordはPassword (1 Way Encrypted)の値をそのまま設定しています
var gr = new GlideRecord('sys_user');
gr.initialize();
gr.user_name = current.user_name;
gr.user_password = current.user_password;
gr.name = current.name;
gr.insert();
ユーザ追加
作成したテーブルの一覧画面でNewボタンを押下して登録画面を表示します入力項目に値を入力後Registボタンを押下します以下の例ではNameにヒラヤマ山系, User nameとUser passwordに10を入力しています
ユーザ追加に成功するとシステムのメッセージが表示されました
確認
ユーザ(Users)の一覧を表示してユーザの追加に成功していることを確認します
追加したユーザでログイン出来ることを確認します
ログインに成功しました
sys_userにレコード追加した際のsys_idを取得
sys_userにレコードを追加した際のsys_idが取得出来ないか1つ前のスクリプトに1行追加して試しました
var gr = new GlideRecord('sys_user');
gr.initialize();
gr.user_name = current.user_name;
gr.user_password = current.user_password;
gr.name = current.name;
gr.roles = "admin";
gr.insert();
gs.addInfoMessage(gr.sys_id);
画面に表示されました
Usersで追加したユーザのレコードを右クリックしてCopy sys_idを選択してからテキストエディタにPasteして値を確認したところ同じ値でした
929cbec90f410300d5168ecce1050e3c