7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

0からのServiceNow備忘録メモ

Last updated at Posted at 2019-12-25

#ServiceNowの基本的な事をかいつまんで説明
ほぼ個人用の備忘録なので、過度な期待はしないで下さい

これからの作業を簡単に要約すると
<第一段階>
1.アプリケーションを作成(機能単位)
2.テーブルを作成する(基本テーブルへの操作が起点となります)
3.レコードの操作画面を作る(テーブルに追加するレコード情報の表示画面)
とりあえずExcelファイルをDB化した位の作成です
<第二段階>
4.クライアントスクリプトの作成(画面操作処理、Client Script)
5.サーバースクリプトの作成(ビジネスロジック、Script Include、UI Action)

#ServiceNowへのユーザー登録
まずは前準備

https://developer.servicenow.com

右上の「REGISTER」をクリック
image.png
各種設定をしてユーザー登録を行います。
image.png
Developerサイトにログイン後の画面
「Request Instance」をクリックする
image.png
バージョン(2019/12時点ではNew York)を選択して「Request Instance」をクリックする
image.png

~しばしお待ちください~

ユーザー名とパスワードをメモして「Manage Instance」をクリックする
image.png
URLをクリックする
※なおRemaining inactivity 10daysが0daysになるとインスタンスが削除されます
 「Extemd Instance」をクリックすると10daysに戻る
image.png
ユーザー名とパスワードを入れる
image.png
パスワードの再設定をする
image.png
ログイン直後の画面
image.png

#アプリケーションを作成
Servicenowでは開発を行う単位を「アプリケーション」と呼びます
ログイン画面の左側のリストがアプリケーションの一覧(そうでないのもあるが大体)です
デフォルトで
・incident:インシデント管理
・Ploblem:問題管理
・Change:変更管理
等があります。(ITILに準拠した作りになっている)

ログイン着後の画面

画面左上にある「Filter navigator」部分に「studio」と入力してリスト部分に表示された「studio」をクリックすると

開発作業画面の「studio」が別タブ表示されます。「Create Application」をクリックします

Nameを設定します(Descroptionは任意)


Roleは作らず「Continue」をクリックします

「Classic」を選択して「Continue」をクリックします

「Done with tables」をクリックします
image.png
「Start」をクリックします
image.png
右上の「x」をクリックして「Yes,close」をクリックします
image.png
ブラウザを再読み込みすると、登録したアプリケーションが表示されます。
image.png
Applicationをクリックすると「studio」が表示されます
image.png

#テーブルを作成
「Create Application File」をクリックします
image.png
[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
も追加してください
image.png

#編集画面の作成

「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の例

onChangeのScript例
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
   //Type appropriate comment here, and begin script below
   alert( oldValue + "から" + newValue + "に変更");   
}

onLoadの例

onLoadのScript例
function onLoad() {
   //Type appropriate comment here, and begin script below
   
   if( g_form.isNewRecord() ){
      //新規作成の場合、test_ageカラムに20を設定する
      g_form.setValue("test_age","20");
   }
}

onSubmitの例

onSubmitのScript例
function onSubmit() {
   //Type appropriate comment here, and begin script below
   var ret = confirm("保存してよい?");
   if(!ret){
      return false;
   }	
}

##クライアントスクリプト内で使用できるServiceNowが提供する変数(オブジェクト)や関数
Scriptのテキストエリア内にフォーカスを当てて「Ctrl + スペースキー」で入力補完が表示されます。
image.png
詳細な使用方法は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カラムの値の先頭に"[成人]"文字列を付与します。
(※なお、このプログラムでは既に"[成人]"が付与され手入れも重ねて追加してしまいます)

BussinessRuleのScript例
(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クラスとなり、メソッドを記載していきます。

Script例
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内の処理(サーバーサイド)が実行されます、
この時画面遷移が発生して前画面に遷移します
(リスト画面から遷移したフォーム画面であればリスト画面にもどります)

この様に設定すると フォーム画面にこの様に配置されます。実際にはScript部分に処理を記載することで、ボタンクリック時に実行されます。
7
10
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
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?