COLUMN コラム

ServiceDesk Plusのカスタマイズ機能の紹介 カスタム関数編

エバンジェリスト・フェロー
玉越 元啓

玉越写真

1. はじめに

私は、ここ数年ServiceDesk Plus(以下、SDP)に関わるプロジェクトに参加し、特にカスタマイズに注力してきました。
それらの機能と実装例をいくつかご紹介します。
今回は、『カスタム関数によるSDPへの機能追加方法(初級編)』として、カスタム関数で何ができるかと簡単な実装例を紹介いたします。
SDPでの運用をスムースにするヒントになれば幸いです。

2. SeriviceDesk Plusとは

SDPは、ITサービスマネージメントツールの一つで、インシデント管理、問題管理、変更管理、リリース管理、CMDB、資産管理、顧客満足度調査など、豊富な機能を持っています。
https://www.manageengine.jp/products/ServiceDesk_Plus/features.html
直感的なGUIや管理画面が用意されており、既存の機能だけでも簡単に業務に合わせた運用が可能です。
また、プログラミングによる企業独自の機能の追加が可能であるため、非常に柔軟な活用ができると実感しています。

3. SDPでのプログラミングによるカスタマイズ・機能追加

プログラミングによるSDPの機能追加は、カスタム関数・カスタムスクリプト・その他の3種類に分類できます。

カスタム関数は、SDPが動いているサーバーで動作します。
登録されている/されようとしているデータ(リクエストやCMDBなど)の参照や加工を行うことができます。
「されようとしている」というのは、業務ルールの確認と反映はデータ登録前に行われるためです。(※厳密な挙動は不明ですが、ルールに違反したデータは登録されないなどの状況から、このように表現しています)。
カスタム関数のプログラミングにはDelugeという独自の言語を使います。
この言語は、ゾーホージャパン社が提供しているサービス全般のカスタマイズで利用することができます。
独自の言語ではありますが、JAVAに似た記法や命令も多く、学習用のサイト(https://deluge.zoho.com/)も用意されているので、習得は比較的簡単だと感じます。

機能追加の方法 カスタム関数 カスタムスクリプト その他
動作する場所 SDPのサーバ SDPの画面(ブラウザ) SDPのサーバ
できること 登録されている/されようとしているデータの操作 入力している画面の内容の参照・操作 Webhook、カスタムメニューの追加など
開発言語 Deluge JavaScript+独自命令 Deluge

4. カスタム関数でできること

(1) カスタム関数でできること

カスタム関数は、Delugeというゾーホージャパン社が提供している言語で作成することになります。
python、Java、JavaScript、Swiftなどの他の一般的なプログラミング言語に匹敵するデータ型、条件ステートメント、ループ、関数が用意されており、変数や条件分岐などを利用してかなり自由度の高いアクションを実装できます。
カスタム関数でチケットの内容を参照・編集する、SDPのAPIを呼び出す、ゾーホージャパン社 の他のサービスを利用することも可能です。

(2) カスタム関数を利用できる場面

SDPのリクエスト/変更/業務ルール/トリガー/ライフサイクル等の様々な機能で、カスタム関数を実行することができます。
用できる機能は、SDPの管理画面より[開発者スペース]>[カスタム関数]を選択 することで確認することができます。

(3) 代表的な利用例

代表的な利用例をいくつかあげます。

業務ルールの条件としてカスタム関数の結果を利用

カスタム関数でチケットの記載内容を確認し、問題があるチケットの登録を停止することができます。
例えば、複数の項目間の関連性を調べて、許可されていない組み合わせの場合にチケットの登録を停止することができます。

業務ルールを満たしたときに実行するアクションとしてカスタム関数を利用する

業務ルールを満たしたときにカスタム関数を実行することで、チケットの記載内容の編集や自動設定などができます。
例えば、チケットのクローズ時にいくつかの項目を自動的に設定するなどです。

トリガーの条件を満たしたときに実行するアクションとしてカスタム関数を利用する

トリガーでは、チケットだけでなくタスクや承認等も含めて、それらに対する何かユーザによる操作や変更に反応してカスタム関数を実行することができます。

5. カスタム関数の作成

(1) 今回のシナリオ

今回のユースケースは、チケットのインパクトが「Affects Business(ビジネスに影響がある)」だった場合、件名に「【緊急】」と自動的につけることで、リクエスト一覧を開いた時の視認性を高めることとします。
例えば、「PCが起動しません」の場合、「【緊急】PCが起動しません」とします。
また、既に件名が【緊急】から始まっている場合は、件名を変更する処理をスキップすることとします。
そうしておかないと、操作する度に件名が【緊急】【緊急】…と変更されてしまい、見栄えがよくありません。

図1 インパクトの一覧

(2) カスタム関数を作成するメニューの場所

カスタム関数は、SDPの管理画面より [自動化] > [カスタムアクション] > [カスタム関数] から作成します。

図2 カスタム関数を作成するメニューの場所

カスタム関数] タブをクリックすると、カスタム関数の一覧(既にカスタム関数を作成済の場合)と追加・編集・削除等の操作するためのメニューが表示されます。

「カスタム関数」の右横にあるプルダウンリストから、カスタム関数を実行する対象となるモジュール(リクエスト/問題/CMDBなど)を選択します。
今回は[リクエスト] を選択して、[新規カスタム関数] をクリックします。
すると、カスタム関数の作成画面が表示されます。

図3 新規カスタム関数の作成
図4 新規カスタム関数の編集画面

「カスタム関数の名前」欄に入力・登録した名前が、業務ルールやトリガーなどの機能から実行したいカスタム関数を選択する際に表示されるので、わかりやすい名前にしましょう。
説明欄には、より詳しくカスタム関数の概要などの情報を記載することが可能です。

次に、適用先から、カスタム関数を実行させたいデータの分類を設定します。
今回は、リクエストのチケットのデータを操作するので、プルダウンから[リクエスト] を選択します。
選択した対象に応じて、カスタム関数から参照できる情報が変化します。

次に、「このカスタム設定をつかうasa」を選択します。「適用先」で選択した機能によって表示される内容が変わります。
今回は、[業務ルールのアクション] を選択します。

その下のスクリプトを編集するエリアに入力チェック用のプログラムを入力していきます。
左の欄にはSDP独自の命令が表示されており、選択(クリック)することで簡単に利用することができます。

(3) カスタム関数の新規作成

それでは、件名に「【緊急】」と自動的につけるカスタム関数を作成していきます。
まずは、今回作成したカスタム関数をご覧ください。
カスタム関数を入力した画面の後に、カスタム関数の全体のテキストとコードの解説を載せています。

図5 カスタム関数の入力をしたところ

(4) カスタム関数の全体テキスト

info "■requestObj";
info requestObj;
info "■context";
info context;
info "■処理";
prefixWord = "【緊急】";
if(requestObj.containsKey("impact"))
{
    if(requestObj.get("impact").get("name") == "Affects Business")
    {
        oldSubject = requestObj.get("subject");
        if(oldSubject.startsWith(prefixWord))
        {
            // 既に件名がprefixWordから始まっている場合は、変更しない。
        }
        else
        {
            newSubject = prefixWord + oldSubject;
            requestObj.put("subject",newSubject);
        }
    }
}
return requestObj;

(5) カスタム関数のポイント解説

prefixWord = "【緊急】";

件名の先頭に付加する文字をprefixWordとして定義します。

if(requestObj.containsKey("impact"))

対象のチケットに、インパクト(impact)が含まれているかを調べ、含まれている場合、次に進みます。
追加フィールドなどの必須ではない項目を参照する場合、該当項目の有無を調べてから必要な処理をさせるようにすることをお勧めします。

       oldSubject = requestObj.get("subject");
        if(oldSubject.startsWith(prefixWord))

件名がprefixWord(=【緊急】)で始まるか、判定しています。
prefixWordで始まる場合は、件名の変更は行わないようにします。

           newSubject = prefixWord  + oldSubject;
            requestObj.put("subject",newSubject);

チケットの件名の先頭にprefixWordを付加し、新しい件名として登録します。

6. 業務ルールへのカスタム関数の適用

カスタム関数ができたので、これを動かす業務ルールを作っていきます。
新規サービステンプレートを作成して、チェック対象の追加フィールドを配置します。

図6 業務ルールの追加画面

7. 動かしてみました

実際に動かしてみましょう。

インパクトが「Affects Business」の場合、チケット登録後の件名に【緊急】とついています。

入力画面
登録結果

インパクトが「Affects Business」ではない場合、チケット登録後の件名に変更はありません。

入力画面
登録結果

リクエスト一覧では、このように表示されます。

8. まとめ

カスタム関数を利用したチケットの編集例を見ていただきました。
カスタム関数は、かなり色々なことができます。
特にSDPのAPIを利用することで、GUIによるカスタマイズでは実現できない業務フローを実装することができます。
初めてカスタムスクリプトやカスタム関数を使った カスタム化に挑戦する、カスタム化したいけど時間がない、そんなときは弊社にご連絡ください。
SDPのカスタマイズを通して、円滑でユーザフレンドリーな運営を実現していきましょう。

関連するナレッジ・コラム

DX認定企業におけるデジタル広報の実態

IT組織の変革をサポート!ITIL4が提唱する成熟度モデルとは

ServiceDesk Plusのカスタマイズ機能の紹介 カスタムスクリプト編