We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

Tetsuya Izawa
ServiceNow Employee

こんにちは。ServiceNowでトレーナーを勤めている井澤です。アプリケーション開発に関連するトレーニングを担当しています。本ブログでは、アプリケーション開発系のトレーニングで扱う内容について、そのエッセンスを紹介していきたいと思います。

ServiceNow上のアプリケーション開発について、またトレーニングの内容についてイメージを持ってもらえるように、Now Platformの各種機能を使って、簡単なアプリケーションを作っていきます。毎回、いくつかの開発ツールやプラットフォームの機能に触れながら、少しずつ機能を付け足していく予定です。

 

以前の記事:

(1) StudioとGuided Application Creatorでテーブルとフォームを作成する

(2) テーブルのレコードを作成するための画面をレコードプロデューサーで開発する

(3) サービスポータルでテーブルのデータを表示する

 

1.     今回開発するもの:UIポリシー

今回は、自分の作業内容を記録するアプリケーションの入力フォームに、ルールを設定します。

実は、以前に作成したアプリケーションの入力フォームでは、作業のメモを入力しないままでも、保存ボタンを押して、レコードを作成・保存できてしまうのです。

find_real_file.png

これでは、中身の無いレコードが記録されてしまい、アプリケーションの動作として適切ではありません。

find_real_file.png

リストで見ると、(empty)というログになっています。

 

そこで、ログのテキストは入力必須にするように、フォームにルールを設定することにしましょう。今回は、UIポリシーという機能を利用します。

 

UIポリシーは、フォームまたはビューにおいて、フィールドの値が指定した条件を満たした場合に、フィールドの属性を動的に変更する機能です。スクリプトを書かずに、次の三つの属性を変更させることができます。

  • 入力必須(Mandatory)
  • 表示 (Visible)
  • 読み取り専用(Read Only)

 

このうちの入力必須(Mandatory)を利用して、My Logのフォームが開かれたら、Log Textフィールドを入力必須にするようにしましょう。なお、この「指定したフィールドについて属性を操作する」部分は、UIポリシーアクションといい、UIポリシーの本体を作成した後、属性を操作するフィールドごとに作成します。一つのUIポリシーの中で、二つのフィールドの属性を変えるなら、二つUIポリシーアクションを作るわけです。

 

UIポリシーはテーブルを指定して作成します。そのテーブルのフォームのすべてのビューを対象にすることもできますし、複数のビューの中から特定のビューに対してのみ、UIポリシーを有効にすることもできます。

 

UIポリシーについて指定できる内容の詳細は、製品ドキュメントをご覧ください。

UI policies (Orlando)

https://docs.servicenow.com/bundle/orlando-platform-administration/page/administer/form-administrati...

 

(参考)ビュールール

ServiceNowが持つビュールール(View Rule)という機能を使うと、ユーザーのロールに合わせてビューを強制することができます。ビュールールとUIポリシーを組み合わせれば、「特定のロールを持つユーザーのためのビューを作って、そのロールを持つユーザーに、そのビューを使うよう強制する。そのビューに対してUIポリシーを設定する」ということができます。つまり、「あるロールを持つユーザーは、必ず特定のフィールドを入力しなければならない」(他のロールのユーザーは必須ではない)という機能が実装できるわけです。

View Rule(Orlando)

https://docs.servicenow.com/bundle/orlando-platform-user-interface/page/administer/navigation-and-ui...

 

2.     Studioを起動し、UIポリシーのアプリケーションファイルを作成する

UIポリシーは、Studioを使って作成できます。アプリケーションナビゲータで[System Application]>[Studio]とたどってStudioを起動し、以前作成したMy Logアプリケーションを選びます。

 

StudioがMy Logアプリケーションを開いたら、画面左上の[Create Application File]をクリックします。

ポップアップしてきた[Create Application File]ウィンドウの、虫眼鏡アイコンのフィールドで、[UI Policy]と入力します。これは、作成するアプリケーション要素を選択している作業です。

find_real_file.png

中央の[Filter Results]のリストの中から、[UI Policy]を選びます(※上に表示されているCatalog UI Policyは、サービスカタログアイテム用のUIポリシーで、別の機能です。間違えないように注意してください!)。

[Create]ボタンを押して、作成を始めましょう。

 

3.     UIポリシーを作成する

表示されるNew UI Policyフォームに対して、以下のように設定をします。

 

Table: My Logテーブル

Short description: (UIポリシーの意味が分かりやすい説明)

 

UIポリシーにはNameフィールドが無く、名前を付けることができません。Short descriptionに、名称に代わる適切な文字列を記載するようにしてください。

find_real_file.png

 [When to Apply]というセクションがあり、「フォーム上のフィールドの値がどの状態になった時にポリシーを適用するか」の条件を作成することができます。

今回は特に条件を指定しません。これにより、フォームがロードされたら、必ずアクション(入力必須)が実行されるようになります。

 

なお、UIポリシーの作成フォームには、デフォルトビューと、アドバンスドビューがあります(※フォームの下にビューを切り替える関連リンクがあります)。アドバンスドビューを選ぶと、以下で紹介するUIポリシーアクションに加えて、スクリプトを書いて実行させることができます。

 

テーブルとShort descriptionが入力できたら、Studioのヘッダ部分で右クリックし、コンテキストメニューを表示します。メニューの中から[Save]を選んで、ここまでの入力内容を保存します。この操作は、フォームに関連リスト[UI Policy Actions]を表示させて、UIポリシーアクションを作成するために行います。

 find_real_file.png

4.     UIポリシーアクションを作成する

UIポリシーを保存すると、関連リスト[UI Policy Actions]および[UI Policy Related List Actions]が画面下部に追加で表示されるようになります。

 find_real_file.png

続いて、UIポリシーアクション関連リストで[New]ボタンを押して、UIポリシーアクションを作成します。

find_real_file.png

Studioに、新たにUIポリシーアクションのタブが表示されます。フィールド名に[Log Text]を選択して指定し、[Mandatory]フィールドを[True]にします。

find_real_file.png

[Submit]ボタンを押してUIポリシーアクションを保存します。

これで今回の開発は終わりです。

 

5.     動作確認

My Logアプリケーションの[Create New]モジュールをクリックして、フォームを開いてみましょう。

 

以前のブログ記事に沿ってCreate Newモジュールからレコードプロデューサーを開くように設定した方は、Studioの[Navigation]>[Modules]>[Create New]からモジュールの設定フォームを開いて、Link typeを[New Record]に戻してください。

 

 [My Log]テーブルのフォームが開かれた時に、[Log Text]フィールドが入力必須になっていれば、完成です。

 find_real_file.png

フィールドが入力必須なので、Log Textが空欄のまま[Submit]ボタンを押しても、次のようにエラーメッセージが表示され、テーブルには保存されません。

find_real_file.png

以上で、UIポリシーとUIポリシーアクションを使って、Log Textフィールドを入力必須にすることができました。

 

6.     まとめ:テーブルのフィールドにルールを適用するその他の方法

今回は、フォームのフィールドについて、UIポリシーを用いて入力必須にしてみました。

 

ところで、「テーブルの中のあるフィールドについて、入力必須にする」という設定ですが、これを実現する方法は複数あります。以下は方法の例です。

 

[クライアントサイド]

  • UIポリシー
  • クライアントスクリプト

 

[サーバーサイド]

  • データポリシー
  • ビジネスルール

 

クライアントサイドで実現する方法は、ユーザーの操作に対して、リアルタイムにメッセージや画面の表示色を使ったフィードバックを提供できるのが長所です。

中でも、今回利用したUIポリシーは、UIポリシーアクションを使うことで、スクリプトを書かずに機能を実現できるのが特徴です(※上述の通り、アドバンスドビューを使えば、スクリプトを書いて、より詳細な動作をさせることもできます)。

同じくクライアントサイドで実行される、クライアントスクリプト機能は、JavaScriptによるスクリプティングが必須ですが、実行のタイミングをUIポリシーより柔軟に指定できます。

 

サーバーサイドで実現する方法は、サーバー側で実行されるため、データベースに対する複雑な処理の速度が速いのが長所です。ただし、ユーザーの操作に対するリアルタイムのフィードバックはできません。

データポリシーは、テーブルのフィールドに対して設定するルールで、UIポリシーとよく似ています(UIポリシーから、直接データポリシーに変換して作成することもできます)。

ビジネスルールは、テーブルに対する操作(検索・挿入・更新・削除)をトリガーにして処理を行わせることができます。UIポリシー同様、アクションとスクリプトの両方が使えます。

 

各機能の長所・短所と、実現するべき要件を照らし合わせて、採用する機能を選択してください。

 

7.     トレーニングの紹介

今回取り上げた、「入力フォームにルールを設定するため、UIポリシーを利用する」という技法、そして最後に紹介した各種の機能についても、ServiceNowのトレーニング

 

『Scripting in ServiceNow Fundamentals』

https://www.servicenow.co.jp/services/training-and-certification/scripting-in-servicenow-training.ht...

 

で詳しく紹介しています。アプリケーション開発に興味のある方は、トレーニングの受講をご検討ください。