LoginSignup
6
5

More than 5 years have passed since last update.

ServiceNowでGlidRecordを使用する

Last updated at Posted at 2017-08-29

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ボタンを押下します

FireShot Screen Capture #404 - 'Tables I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsys_db_object_list_do%3Fsysparm_userpref_module%3D7e7.png

Labelにglide_record_testと入力しInsert a new row...でID Integer, Value String, Flg True/False, Atribute StringのColumnを追加してSubmitします

FireShot Screen Capture #407 - 'Table I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsys_db_object_do%3Fsys_id%3D-1%26sys_is_list%3Dtrue%26.png

スクリプト作成

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ボタンを押下します

FireShot Screen Capture #409 - 'Scheduled Jobs I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsysauto_list_do%3Fsysparm_userpref_module%3D5.png

次の画面ではAutomatically run a script of your choosingをクリックします

FireShot Screen Capture #410 - 'ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fwizard_view_do%3Fsys_id%3D-1%26sys_target%3Dsysauto%26sysparm.png

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

FireShot Screen Capture #425 - 'Scheduled Script Execution I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsysauto_script_do%3FWIZARD_action.png

スクリプト実行

Submitして保存した後再表示してExecute Nowを押下します

FireShot Screen Capture #426 - 'glide_record_test I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsysauto_script_do%3Fsys_id%3Df06ecf320fbc4.png

作成したtableに1000行(record)挿入(insert)されています今回FlgとAttributeのColumnを使っていないですがこの後で条件付きUpdate用に使おうかと考えています

FireShot Screen Capture #427 - 'glide_record_tests I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fx_101872_lets_get_glide_record_test_list.png

行削除

行を全て削除

全ての行消すには差し当たり条件無しで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(呼ばれたら実行)にしています

FireShot Screen Capture #451 - 'user_insert_test I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsysauto_script_do%3Fsys_id%3D4bd870800f0103.png

スクリプト実行

Execute Nowを実行して追加されたユーザ(Users)を確認します元々1~6までユーザが居たので0, 7~9まで追加されたようです

FireShot Screen Capture #453 - 'Users I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsys_user_list_do%3Fsysparm_userpref_module%3D56e8b9ce3.png

エラーログ確認

Logsを確認するとDuplicate EntryのSQLエラーが発生していました

FireShot Screen Capture #454 - 'Log I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsyslog_list_do%3Fsysparm_userpref_module%3Dab0b7690c0a80.png

先ほどのスクリプトの2行目を

var i = 0;

では無く

var i = 7;

にしていればエラーにならなかったのですが今回はsys_userをGlideRecordで直接操作してユーザを追加出来るかの確認だったので気にしないことにします後失敗したときにSQLエラーが出ることを確認出来たので良かったです

確認

追加したユーザでログイン出来るか確認しますユーザ名とパスワードにスクリプトで設定した8を入力してログインします

FireShot Screen Capture #455 - 'ServiceNow' - dev12747_service-now_com_navpage_do_sysparm_nostack=true.png

ログインに成功しました

FireShot Screen Capture #456 - 'セルフサービス I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fhome_do%3F.png

入力画面でユーザ追加

入力画面用のテーブルを作成

入力画面用にテーブルを作成します以下の例では[Label]を"User Regist Form"で列に"User Name"(String), "Name"(String), "User Passwod"(Password (1 Way Encrypted))を追加してテーブルを作成しています

FireShot Screen Capture #479 - 'User Regist Form I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsys_db_object_do%3Fsys_id%3Dx_101872_lets_g.png

ユーザ追加用のボタンの作成

Filter navigatorにRegist と入力してメニューを絞り込んで作成したテーブルのレコード一覧を表示します

FireShot Screen Capture #480 - 'User Regist Forms I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fx_101872_lets_get_user_regist_form_list_do.png

一覧の列のヘッダを右クリックしてConfigure - UI Actionsを選択します

FireShot Screen Capture #481 - 'User Regist Forms I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fx_101872_lets_get_user_regist_form_list_do.png

UI Actionsの一覧でNewボタンを押下して登録用のボタンを追加します以下の例では[Name]に"Regist", [Form button]にチェック(True)して

FireShot Screen Capture #482 - 'Regist I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsys_ui_action_do%3Fsys_id%3Dfd7bcd0c0f010300d5168ecce.png

[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を入力しています

FireShot Screen Capture #483 - 'User Regist Form I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fx_101872_lets_get_user_regist_form_do%3Fsys.png

ユーザ追加に成功するとシステムのメッセージが表示されました

FireShot Screen Capture #484 - 'User Regist Forms I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fx_101872_lets_get_user_regist_form_list_do.png

確認

ユーザ(Users)の一覧を表示してユーザの追加に成功していることを確認します

FireShot Screen Capture #485 - 'Users I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsys_user_list_do%3Fsysparm_userpref_module%3D56e8b9ce3.png

追加したユーザでログイン出来ることを確認します

FireShot Screen Capture #486 - 'ServiceNow' - dev12747_service-now_com_navpage_do_sysparm_nostack=true.png

ログインに成功しました

FireShot Screen Capture #487 - 'セルフサービス I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fhome_do%3F.png

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

画面に表示されました

FireShot Screen Capture #488 - 'User Regist Forms I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fx_101872_lets_get_user_regist_form_list_do.png

Usersで追加したユーザのレコードを右クリックしてCopy sys_idを選択してからテキストエディタにPasteして値を確認したところ同じ値でした

FireShot Screen Capture #489 - 'Users I ServiceNow' - dev12747_service-now_com_nav_to_do_uri=%2Fsys_user_list_do%3Fsysparm_userpref_module%3D56e8b9ce3.png

929cbec90f410300d5168ecce1050e3c
6
5
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
6
5