#ServiceNowの基本的な事をかいつまんで説明
ほぼ個人用の備忘録なので、過度な期待はしないで下さい
これからの作業を簡単に要約すると
<第一段階>
1.アプリケーションを作成(機能単位)
2.テーブルを作成する(基本テーブルへの操作が起点となります)
3.レコードの操作画面を作る(テーブルに追加するレコード情報の表示画面)
とりあえずExcelファイルをDB化した位の作成です
<第二段階>
4.クライアントスクリプトの作成(画面操作処理、Client Script)
5.サーバースクリプトの作成(ビジネスロジック、Script Include、UI Action)
#ServiceNowへのユーザー登録
まずは前準備
https://developer.servicenow.com
右上の「REGISTER」をクリック
各種設定をしてユーザー登録を行います。
Developerサイトにログイン後の画面
「Request Instance」をクリックする
バージョン(2019/12時点ではNew York)を選択して「Request Instance」をクリックする
~しばしお待ちください~
ユーザー名とパスワードをメモして「Manage Instance」をクリックする
URLをクリックする
※なおRemaining inactivity 10daysが0daysになるとインスタンスが削除されます
「Extemd Instance」をクリックすると10daysに戻る
ユーザー名とパスワードを入れる
パスワードの再設定をする
ログイン直後の画面
#アプリケーションを作成
Servicenowでは開発を行う単位を「アプリケーション」と呼びます
ログイン画面の左側のリストがアプリケーションの一覧(そうでないのもあるが大体)です
デフォルトで
・incident:インシデント管理
・Ploblem:問題管理
・Change:変更管理
等があります。(ITILに準拠した作りになっている)
画面左上にある「Filter navigator」部分に「studio」と入力してリスト部分に表示された「studio」をクリックすると
開発作業画面の「studio」が別タブ表示されます。「Create Application」をクリックします
Nameを設定します(Descroptionは任意)
Roleは作らず「Continue」をクリックします
「Classic」を選択して「Continue」をクリックします
「Done with tables」をクリックします
「Start」をクリックします
右上の「x」をクリックして「Yes,close」をクリックします
ブラウザを再読み込みすると、登録したアプリケーションが表示されます。
Applicationをクリックすると「studio」が表示されます
#テーブルを作成
「Create Application File」をクリックします
[Data Model]-[Table]を選択して「Create」をクリックします
・Label にテーブル名(英数字)を設定
・Create module のチェックを外します
・「Submit」をクリックします。
左側のリストに生成されたファイルが表示されます
テーブルを作成すると一緒に「Role」「Access Control」が生成されます
Table Colums 横の「New」をクリックする
とりあえずカラム作成
Typeに「String」
Colum nameに「test_name」
Max lengthに「100」
を入れて「Submit」をクリックする
「Table」を選択して「Table Colum」横のメニュー「三」を左クリック「Refrish List」を選択する
追加したカラムが表示されます。
よく使用するのはString、Integer、Date、Date/Time、Reference、他にも色々あるよ
その他カラムの種類
とりあえず
Type : Integer 、 Colum Lable : test_age
Type : Date 、 Colum Lable : test_birthday
も追加してください
#編集画面の作成
「Create Application file」を選択して[Form & UI]-[Form]を選択し「Next」をクリック
テーブルを検索して設定するFilter部分に「sample_table」を入力
下に表示されたリストから「sample table」を選択して「Create」をクリック
Form Design画面が表示されます(今回はとりあえずこのままで)
#Application Menu - Moduleの作成
メイン画面の左側のリストからテーブルを呼べるようにします
(※テーブル作成時に「Create module」のチェックをを付けたままであれば自動で作成されています)
studioの「Create Application file」から
[Navigation]-[Application Menu]と[Module]を選択して作業を行います
[Application Menu]
Titleに「試験App」と入力して「Submit」をクリックします
[Module]
以下の値を設定(or選択)します
Title:「sample_table」
Application Menu:「試験App」
Table:「sample table」
メイン画面をリロードするとメニューに追加した情報が表示されます
クリックするとリスト画面が表示されます(右側の画面)
「New」をクリックするとForm画面が表示されます
各欄に値を設定して「Submit」をクリックします
リスト画面にレコードが追加されます。
#クライアントスクリプト
とりあえず以下のJavascriptは知っている
事を前提としています。
onLoad()
onChange()
onSubmit()
ajax()
document.getElementById()
document.setElementById()
##onLoad,onchange,onsubmitの再現
UIScriptを使用する(Script内の記載方法については別途説明します)
[Type]で選択する
onChangeの例
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
if (isLoading || newValue === '') {
return;
}
//Type appropriate comment here, and begin script below
alert( oldValue + "から" + newValue + "に変更");
}
function onLoad() {
//Type appropriate comment here, and begin script below
if( g_form.isNewRecord() ){
//新規作成の場合、test_ageカラムに20を設定する
g_form.setValue("test_age","20");
}
}
function onSubmit() {
//Type appropriate comment here, and begin script below
var ret = confirm("保存してよい?");
if(!ret){
return false;
}
}
##クライアントスクリプト内で使用できるServiceNowが提供する変数(オブジェクト)や関数
Scriptのテキストエリア内にフォーカスを当てて「Ctrl + スペースキー」で入力補完が表示されます。
詳細な使用方法はDeveloperサイトの左上にある「API」ー「Client」で移動できる
ページに記載されています。(「Server」は後で)
g_formはGlideForm、g_userはGlideUserに記載されています(他同)
良く使用するのはg_formでフォーム画面上の情報にアクセスするのに使用します
カラム名がtest_nameであれば g_form.getValue("test_name")で値を取得できます
g_form.setValue("test_name","ABC")で設定できます。
取得において文字列の場合はgetValueですが、数値の場合はgetIntValue、True/Falseの場合はgetBooleanValueを使用します。(※設定はsetValueのみ)
#サーバースクリプト
ServiceNowにおける部品は以下になります
・Bussiness Rule : ビジネスロジックを記載する,テーブルへの状態変化を契機に実行される
・Script Include : 処理の共通化、GlideAjax関数からの呼出し先
・UI Action : Form画面上にボタンを設置でき、ボタンクリックで処理実行(UpdateボタンはUI Actionです)
##Bussiness Rule の例
NameとTableを指定、「When to run(契機)」で「Update(更新時)」+「test_age が 20以上の場合」と指定しています
「Action」で「Test Name欄に"成人"と設定する」になります。
よって、テーブルのtest_age欄に20以上を設定して「Update」ボタンをクリックすると
Test Name欄に「成人」と設定されてます(なお、元設定されていた値は上書きされます)
「Advanced」のチェックボックスにチェックを入れると「When to run」の実行契機に選択できる種類が増え、
「Advanced」タグが追加されScriptを記述することが可能になります(「Actions」の設定も併用可能)
whenの設定項目
・before : データベースへの処理を実行する前の状態で処理を実行、入力値のチェックや整形を行うのに使用
・after : データベースへの処理を実行した後の状態で処理を実行、他テーブルへの更新等を実施するのに使用
・display : クライアントの処理にサーバー側からデータを渡す時に使用する。関連:g_scratchpad)
##g_scratchpadについて
g_scratchpad は連想配列の格納オブジェクトでサーバー処理内の情報をクライアント処理に引継ぐ機能を有しています
BusinessRuleでAdvanced、Displayを指定してスクリプト内で「 g_scratchpad.abc = "xyz";」の処理を記載すると
クライアントスクリプト(Client Script等)で「g_scratchpad.abc」から値"xyz"を取得することが可能です。
なお、g_scratchpadはサーバー側ではdisplay指定のビジネスルールのみで使用可能です、またクライアント側から
サーバー側への値引き渡しはできません。
##AdvancedのScript
スクリプトを直接記載して詳細な処理を設定することが可能です
引数として、current, previous が存在します、crrentはレコードへ登録する変更後の情報が格納されています
previousは変更前のレコード情報が格納されています。基本的にはcrrentに格納されている値を必要に応じて変更します
下記の例はtest_ageカラムの値が20以上の場合、test_nameカラムの値の先頭に"[成人]"文字列を付与します。
(※なお、このプログラムでは既に"[成人]"が付与され手入れも重ねて追加してしまいます)
(function executeRule(current, previous /*null when async*/) {
// Add your code here
if(current.test_age >= 20 ){
current.test_name = "[成人]" + current.test_name.toString() ;
}
})(current, previous);
##Script Include の例
Script内は最初は空白ですがNameを入れると自動で処理が設定されます。
機能としては1ファイル=1クラスとなり、メソッドを記載していきます。
var SampleClass = Class.create();
SampleClass.prototype = {
initialize: function() {
},
testfunc : function(){
return "テストメッセージ";
},
samplefunc : function(){
return "サンプルメッセージ";
},
type: 'SampleClass'
};
var obj = new SampleClass;
var msg = obj.testfunc(); //"テストメッセージ"が格納される
「Client callable」にチェックを入れるとクライアントのGlideAjaxからの呼出しが可能になります。
Script内の処理も変わるので注意してください。
var clientInterface = Class.create();
clientInterface.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getSerVerData : function(){
//クライアントからのパラメーター値を取得
var param = this.getParameter('sysparm_set_param');
//サーバーサイドの処理を書く
var msg = "サーバー取得メッセージ";
//クライアントへの返却
return "client:" + param + " server:" + msg;
},
type: 'clientInterface'
});
var ga = GlideAjax("clientInterface"); //ScriptIncludeの指定
ga.addParam('sysparm_name','getSerVerData'); //メソッドの指定
ga.addParam('sysparm_set_param',"ABC"); // パラメーターの設定
ga.getXML(function(){ //コールバック関数の設定
var answer = response.responseXML.documentElement.getAttribute("answer");
alert(answer); //「client:ABC server:サーバー取得メッセージ」が表示される
});
##UI Action の例
フォーム画面、リスト画面に新規ボタンを配置できます。
ボタンをクリックすると、Script内の処理(サーバーサイド)が実行されます、
この時画面遷移が発生して前画面に遷移します
(リスト画面から遷移したフォーム画面であればリスト画面にもどります)