動的検索
Bright Patternのシナリオブロックは、ServiceNowインスタンスのディクショナリを検索して、レコードのオプションを取得することができます。依存関係のあるフィールドについては、前の検索結果を使用して、次の検索で返される値を絞り込むことが可能です。シナリオ内でメニューのオプションを検索することで、ServiceNow管理者がカテゴリーを更新するたびに、IVRが自動的に更新されます。
問題カテゴリーの動的検索
ServiceNow Search シナリオブロックは、ServiceNowデータベース内のsys_choiceテーブルを検索するために使用されます。この位置情報は、sys_dictionaryテーブルでproblemテーブルを検索することで取得でき、これにより各レコードの列のリストが返されます。問題のカテゴリーフィールドは、sys_choiceテーブルの値です。名前が「problem」(つまり、このテーブルに対応する)で、エレメントの型がカテゴリーであるすべてのsys_choiceエントリの結果は、レコードセット名Categoriesに格納されます。

Play Prompt シナリオブロックでは、カテゴリーを紹介し、見つかった最初の結果を読み上げます。Get Next Record シナリオブロックは、レコードがこれ以上見つからなくなるまで、カテゴリー項目のプロンプトを繰り返します。終了点に達すると、Play-Listen ブロックにより、ユーザーは選択を行うよう促されます。その後、ServiceNow Search シナリオブロックが使用され、ユーザーが選択した内容に基づいて、特定のカテゴリーに属するオブジェクトを取得します。

ServiceNow Update Object ブロックを使用して、選択されたカテゴリーで問題レコードを更新します。ProblemID変数は、前の工程で ServiceNow Create Object シナリオブロックによって格納されたものです。カテゴリーフィールドは、カテゴリーオブジェクトのsys_idではなく、その値によって更新されます。

この処理は、サブカテゴリの検索についても繰り返されます。ここでも、名前が「problem」に等しく、エレメントがサブカテゴリであるものを条件に、sys_choiceテーブルが検索されます。さらに、dependent_valueを、以前に見つかったカテゴリーオブジェクトのラベルに限定する検索パラメータが追加されます。これにより、返されるサブカテゴリーの結果は、カテゴリーが前に選択されたものと同じである問題レコードにのみ存在するものが対象となります。

セルフサービスカタログの動的検索
Self-Serviceカタログでのカタログ項目の取得には、動的検索が必要です。カタログは、カテゴリーとサブカテゴリーを枝とするツリー状の構造で構成されています。項目は、ルートからリーフまでの任意のレベルに存在します。特定のカタログ内で項目を検索するには、以下の手順を実行します。
- 現在のレベルにある項目をリスト表示します。
- 現在のレベルにあるカテゴリーまたはサブカテゴリーをリスト表示します。
- 選択対象が項目の場合は、検索を終了します。
- 選択対象がカテゴリーの場合は、検索を繰り返します。
2つの検索文字列が使用されます。1つはカテゴリー用、もう1つは項目用です。両方の初期値は、カタログ名と空の親に設定されます。これにより、カタログのルートが検索されます:="catalog="+"$(Catalog.title)"+"^parentISEMPTY"。ここで、$(Catalog) は前に取得したカタログオブジェクトです。
1. 現在のレベルにある項目をリスト表示する
ServiceNow Search シナリオブロックは、sc_cat_itemテーブル内でitemSearch文字列によって指定された項目を検索するために使用されます。

2. 現在のレベルにあるカテゴリーまたはサブカテゴリーのリストを表示する
ServiceNow Search シナリオブロックは、sc_categoryテーブル内のcatSearch文字列で指定されたカテゴリーを検索するために使用されます。現在のレベルにある項目とカテゴリーのリストが得られたら、Play-Listen シナリオブロックを使用して、ユーザーにオプションを読み上げます。この選択結果に基づいて、次のステップが決定されます。

3. 項目検索を終了する
ServiceNow Search ブロックを使用して、sc_cat_itemテーブルから、ユーザーが選択した名前と一致するアイテムオブジェクトを取得します。

4. カテゴリーの検索を繰り返す
sc_cat_itemテーブルで選択内容が見つからない場合、sc_categoryテーブルで検索が繰り返されます。適合する項目が見つかった場合、プロセスは新しいレベルで繰り返されます。カテゴリーが見つからない場合、選択が無効であったため、ユーザーに選択のやり直しを求めます。
カタログおよび項目の検索文字列は、その後の検索においてそのカテゴリーを新規の親として反映させるため、="catalog="+"$(Catalog.title)"+"^parent="+"$(Category.title)"と設定して更新されます。動的検索によってユーザーの項目が見つかった後、シナリオはこのシナリオと同様に、カタログリクエストの作成へと進みます。
