実行計画のスクリプト可能なアサイン
各カタログアイテムには実行計画が関連付けられており、そのタイプのアイテムが注文されるたびに使用されます。計画が指定されていない場合は、デフォルトの計画が使用されます。このデフォルトはほとんどの組織で有効ですが、追加の基準に基づいて、実行計画を変更することが必要になる場合があります。
たとえば、基本システムのサービスカタログでは、新しい PC の要求は常に PC 配送計画を使用します。ただし、要求者がリモートの場所で作業している場合など、例外的な状況では、この計画を変更する必要があります。
この柔軟性を提供するために、スクリプトを使用して特定のカタログアイテムのデフォルトの実行計画を上書きできます。
スクリプト実行時の制限
実行計画スクリプトには、実装時に考慮する必要がある制限があります。
実行計画スクリプトの実行中:
- カタログタスクは実行計画が選択された後にのみ作成されるため、カタログタスクを操作することはできません。
- [合計配送時間] や [期日] などの一部のフィールドはまだ計算されていませんが、要求自体は current.request() を介してスクリプト内で使用できます。
- 承認はまだ生成されていません。
スクリプトの作成
実行計画スクリプトを記述するときは、次のガイドラインに従ってください。
実行計画スクリプトは、他のサーバーサイドの実行計画と同じグローバル変数や他の関数にアクセスできます。
- current は現在要求されているカタログアイテム
sc_req_itemです。 - current.delivery_plan() は、このカタログアイテムにアサインされた実行計画です。
スクリプトからの評価値は、実行計画の sys_id として使用されます。
簡単な例:
current.delivery_plan.setDisplayValue('PC Delivery Plan')未定義または見つからないなどの無効な値が返された場合は、既存のアサイン値が使用されます。
複雑な例:
getexecutionplan();
function getexecutionplan() {
var location = current.request.requested_for.location.getDisplayValue();
// if we're in Atlanta
if (location == 'Atlanta') {
// use the remote pc delivery plan instead of the normal one
var remote_plan = new GlideRecord('sc_cat_item_delivery_plan');
remote_plan.addQuery('name', 'Remote PC Delivery Plan');
remote_plan.query();
remote_plan.next();
current.delivery_plan = remote_plan.sys_id;
return remote_plan_sys_id;
}
return current_delivery_plan;
}この例では、要求が Atlanta のユーザーに対するものである場合は常に、ServiceNow はリモート PC 配送計画を使用します。そうでない場合、実行計画は上書きされず、ServiceNow はカタログアイテムの通常の実行計画である PC 配送計画を使用します。
スクリプトのカタログアイテムへの追加
カタログアイテムにスクリプトを追加して、ユーザーがそのアイテムを要求するたびにスクリプトが実行されるようにすることができます。
始める前に
必要なロール:admin
手順
- 移動先 .
- スクリプトを追加する関連カタログアイテムを選択します。
- カタログアイテムフォームを構成して、実行計画スクリプトフィールド (たいていは「配送計画スクリプト」という名前) を追加します。
- スクリプトの詳細を入力します。
- アイテムフォームを変更して更新します。
タスクの結果
スクリプトを使用した実行計画の承認
承認ルールスクリプトを使用して、実行計画を承認できます。
始める前に
必要なロール:admin
手順
- フィルターナビゲーターで、「 sc_cat_item_dt_approval.list 」と入力して、承認計画タスクを取得します。
- フォームのコンテキストメニューから、 .
- [承認スクリプト] フィールドに、承認ルールで使用するものと同じ構文とルールを使用して承認スクリプトを入力します。
承認者を指定するスクリプト
(function manager_as_approver () {
var request = current.request_item.request;
var rc = request.requested_for.manager;
return rc;
})();