こんにちは。メケです。
ServiceNowの開発を行う際に、性能テストなどで大量データを準備したい場合がありますよね。
今回は、Studioを使用してちょっとしたコードを書くことで大量データを作成する方法を紹介。
ServiceNowを初めて触る人もこの記事で大量データを簡単に作れるようになります。
Studioを立ち上げよう
まずはフィルターナビゲーターにて”studio”と入力しましょう。
すると[System Applications]に[Studio]が表示されるのでクリックすると別タブでStudioの画面が表示されます。
任意のアプリケーションを選択。
Fix Scriptを作成
まずはStudioの画面の左上の[Create Application File]ボタンをクリック。
開かれたウィンドウの左から”Server Development”を選択し、画面中央に表示される”Fix Script”を選択し、[Create]ボタンをクリックしましょう。
Nameに任意の名前をつけて、「Submit」ボタンをクリック。
下段のScriptにデータを作成するためのコードを記載していきます。
5行でOK!? 大量データ作成
まずは、シンプルに5行で大量データを作成します。
サンプルコードは以下のような感じです。
// 対象テーブルを指定
var gr = new GlideRecord('x_524XXX_XXXX_XXXX');
// 作成したいレコード数分ループ処理
for (var i = 0; i < 100; i++) {
// レコード初期化
gr.initialize();
// 任意の項目に値設定(short_description)
gr.setValue('short_description', i);
// レコード追加
gr.insert();
}
やっていることはこれだけ。
- 対象テーブルの指定
- ループ処理
- レコード初期化
- 任意の項目に値設定
- レコード追加
①対象テーブルの指定
まずはどのテーブルに対してデータを作成するかを指定しましょう。
以下の赤文字部に”テーブル名”を記載します。
var gr = new GlideRecord('【テーブル名】');
テーブル名はどこから取得するの?というと・・・
フィルターナビゲーター(左上の検索窓)に”tables”と入力します。
すると[System Definition]の配下に[Tables]というのが表示されますよね。
選択するとテーブルの一覧が表示されるので対象としたいテーブルを選択し、「Name」の値をコピーします。
これで任意のテーブルに対する GlideRecordオブジェクト を作成できました。
②ループ処理
以下の赤文字部に”作成したいレコード数”を記載します。
for (var i = 0; i < 【作成したいレコード数】; i++) {
③
④
⑤
}
サンプルコードでは100件のレコードを作成したかったので100を設定。
for文の最後の”}”(閉じカッコ)を忘れないようにしましょう。
③レコード初期化
①で作成していたGlideRecordオブジェクトの初期化です。
gr.initialize();
ループ処理を行うため、初期化しておきます。
④任意の項目に値設定
GlideRecordオブジェクト に項目毎に値を設定します。
gr.setValue('項目名', 設定値);
サンプルとしては、ServiceNowでよく出てくる” short_description ”(簡単な説明)に対してループ処理にて使用している変数を設定するようにしています。
今回は1項目だけの設定ですが、複数項目の設定や条件分岐での設定などする場合はここに記載しましょう。
⑤レコード追加
値を設定したGlideRecordオブジェクトをinsertしてテーブルにレコードを作成します。
gr.insert();
実行してみる
スクリプトが書けたら保存して実行をしてみましょう。
「Update」ボタンをクリックし、記載した内容を保存更新します。
次に「Run Fix Script」ボタンをクリックし、動かしてみます。
「Proceed」ボタンをクリックすると、以下のようにスクリプト実行結果が表示されたでしょうか。
対象のテーブルを見るとレコードが作成されているのがわかります。
5行のコード(※) で100件のデータを2秒で作成する事ができましたね。
※コメント・空白等は除く。for文の閉じカッコを含めると6行となることは内緒でお願いします。m(_ _)m
ちなみに1,000件で19秒、10,000件で3分でした。(1秒50件ぐらい)
試しているのがPDI(個人用開発インスタンス)であるため、性能は参考程度で。
もうちょっとコードを足してみる
もうちょっとスクリプトを書き足してみて『Short Description(簡単な説明)』に適当な文章を設定します。
また、文章に応じて、『Priority(優先度)』を設定してみます。
サンプルコードはこんな感じ。
(変数の付け方とかイケてないので雰囲気だけで参照にして下さい。。。)
gs.info('大量データ作成');
// 対象テーブルを指定
var gr = new GlideRecord('x_52XXX_XXX_XXXX');
// short_description用のテキスト
var text = new String();
// 問い合わせ対象となる単語を適当に羅列
var taisyou = ["パソコン", "包丁", "言葉遣い", "携帯", "バナナ", "イヤホン", "コーヒー", "テレビ", "アメリカ", "図鑑", "ServiceNow"];
// 顧客の反応を適当に羅列
var hannou = ["怒ってた", "キレてた", "褒めてもらった", "笑ってた", "聞かれた", "問い合わせを受けた"];
// 作成したいレコード数分ループ処理
for (var i = 0; i < 100; i++) {
// 乱数をもとに配列の要素数を取得
var taisyouNum = Math.floor(Math.random() * taisyou.length);
var hannouNum = Math.floor(Math.random() * hannou.length);
// レコード初期化
gr.initialize();
// short_description用の文字列を作成
text = "";
text += taisyou[taisyouNum];
text += "について";
text += hannou[hannouNum];
// short_description用の文字列を設定
gr.setValue('short_description', text);
// どんな反応をしたかによって優先度を設定
// 「怒ってた」場合は優先度を「1:Critical」など
if (hannouNum < 2) {
gr.setValue('priority', 1);
} else if (hannouNum >= 2 && hannouNum < 4) {
gr.setValue('priority', 3);
} else {
gr.setValue('priority', 4);
}
// レコード追加
gr.insert();
}
2つの配列とランダム関数を使って文章を組み立ててみました。
また、どのような反応だったかによって優先度を設定するようにしました。
結果はこんな感じです。
プログラミングに興味を持った方へ
今回使用した JavaScript は以下のUdemy講座で紹介されていたものを参考にしました。
(ランダム関数と配列の組み合わせ部分)
Googleが提供するGoogle App Script(GAS)というGoogle ドライブを使える人ならだれでも使用する事ができるものを使ってプログラミングをしてみることができます。
JavaScriptの構文を基本から紹介されているものなので、 JavaScript がよくわからないという人にもオススメです。
まとめ
今回はServiceNowのローコード(LowCode)で大量データを作成する方法を紹介しました。
ServiceNowではノーコードでできることも多いですが、JavaScriptによるローコードもできるとやれることの幅が広がっていきます。
『市民開発』という言葉をServiceNow以外でも見かけるようになってきたので、これからは誰もがプログラミング知識を持っておく方が良いかもしれないですね。
個人的には大量データを作れたので機械学習も試してみたいと思ってます。
最後まで見ていただいてありがとうございました。
コメント
コメント一覧 (2件)
Servicenowを勉強させられているサラリーマンです。
めちゃくちゃ参考にしています。本当にありがとうございます。
今後も更新楽しみにしております。
NOW太郎 さま
とてもうれしくなるコメント頂きありがとうございます。
少しでもお役に立てるような記事を更新していけるようにがんばります。
私も日々勉強中ではありますので一緒に頑張っていきましょう。