ビジネスルールのデバッグ
デバッグビジネスルールは、ServiceNow 製品で使用可能なリソースをで実施できます。
1. ツール
このプロセスの最初のステップは、問題の把握に役立つツールを特定することです。
| デバッグツール | 説明 |
|---|---|
| システム辞書 | 移動先 . 辞書は、インスタンス内のすべてのテーブルのリストを提供し、情報を見つける際に非常に役立ちます。 |
| システムログ | 移動先 . ログに情報を書き込むことができるビジネスルール内にアラートステートメントを配置できます。 |
| デバッグビジネスルール (詳細) | 移動先 . このデバッグモジュールは、結果のビジネスルールを表示します。このモジュールを使用して、条件が満たされ、値が想定どおりに設定されているかどうかを確認します。 |
| アラートメッセージ | ページ、フィールド、またはログファイルにメッセージを出力できるようにする、いくつかのシステム機能があります。「アラート、情報、およびエラーメッセージのスクリプティング」を参照してください。 |
| ビジネスルールの例 | ビジネスルールのエラーメッセージなど、他のユーザーが記述したスクリプトの中から目的のものが見つかることも、OR クエリを構築することで見つかることもあります。 |
| GlideRecord 情報 | これは、データベースに対して情報のクエリを実行するために使用される基本構文です。「スクリプトでのテーブルのクエリ」を参照してください。GlideRecord には集計サポートも含まれます。 |
2. 変数
次のステップでは、ビジネスルールの動作についてのインサイトを得ることができます。挿入を除くすべてのアクションでは、クエリを使用してレコードを取得する可能性が高くなります。
var rec = new GlideRecord('incident');
rec.addQuery('active',true);
rec.query();
while (rec.next()) {
gs.print(rec.number + ' exists');
}
クエリが実際にレコードを返すかどうかを確認するには、gs.addInfoMessage を使用して画面の上部に情報を表示します。
var rec = new GlideRecord('incident');
rec.addQuery('active',true);
rec.query();
gs.addInfoMessage("This is rec.next: " + rec.next());
while (rec.next()) {
gs.print(rec.number + ' exists');
}
クエリがレコードを返さない場合は、次のように表示されます。
This is rec.next: false
この手法を使用して、ビジネスルール内のすべての変数に想定される値が含まれていることを確認します。
ヒント:
必要に応じて、スクリプトを個々の部分に分割し、各部分が全体から切り離されても機能することを確認してから、一度に 1 ステップずつ元に戻します。
3. 情報の検索
最後のステップは、ルールが探している情報がどこで見つかるかを確認することです。
ServiceNow アプリケーションでは、テーブルが別のテーブルを拡張できます。これは、情報を検索するときに、探している情報を見つけるために、拡張テーブルの sys_id を親テーブルに照会する必要があることを意味します。
良い例は、タスクテーブルを拡張する sc_task テーブルです。次のスクリプトは、現在の sys_id の拡張テーブル (sc_task) を照会し、一致する sys_id を持つレコードの親テーブル (task) を照会して、[作業メモ] フィールドを出力します。
var kids = new GlideRecord('sc_task');
kids.query();
gs.addInfoMessage("This is requested item number: " + current.number);
gs.print("This is the requested item number: " + current.number);
while (kids.next()) {
var parents = new GlideRecord('task');
parents.addQuery('sys_id', '=', kids.sys_id);
parents.query();
while(parents.next()) {
gs.addInfoMessage("This is task number: " + parents.number);
gs.print("This is task number: " + parents.number);
gs.addInfoMessage("These are the work notes: " + parents.work_notes);
gs.print("These are the work notes: " + parents.work_notes);
}
}