こんにちは。
ServiceNow担当のもりぽです。
今回は、ServiceNowの組織マスタ情報を利用した複雑な条件分岐の簡単な設定方法を解説します。
通常、ServiceNowの標準機能ではUIから表示や処理の制御を設定することができますが、複雑な制御にはスクリプトが必要です。
しかし、本記事ではそのような複雑な制御においても、スクリプトを書かずにUIを活用して簡単に条件を設定する方法を紹介します!
ServiceNow担当のもりぽです。
今回は、ServiceNowの組織マスタ情報を利用した複雑な条件分岐の簡単な設定方法を解説します。
通常、ServiceNowの標準機能ではUIから表示や処理の制御を設定することができますが、複雑な制御にはスクリプトが必要です。
しかし、本記事ではそのような複雑な制御においても、スクリプトを書かずにUIを活用して簡単に条件を設定する方法を紹介します!
User Criteriaを作成する
User Criteriaは主にCatalog ItemやKnowledgeなどでの閲覧・表示制限に使用することが多いですが、今回は通常とは異なる制御対象に対して活用していきます。
まずは制御に使うUser Criteriaを作成します。ここで設定した条件に合致するか否かで制御を行います。
ひとまずUsersのみ設定します。
※User Criteriaの作成には"user_criteria_admin"ロールが必要です。
まずは制御に使うUser Criteriaを作成します。ここで設定した条件に合致するか否かで制御を行います。
ひとまずUsersのみ設定します。
※User Criteriaの作成には"user_criteria_admin"ロールが必要です。
制御する対象に組み込む
ここではUser CriteriaをCatalog Variableの必須制御に使っていきます。
User Criteriaを呼び出せる関数がServer側のスクリプトでのみ使用可能なので、GlideAjaxを使ってScript Includeを経由します。
以下処理をScript Includeに記載します。赤字部分にはUser Criteriaのsys idが入ります。
※Script IncludeをClient側の処理から呼ぶ際は、Client Callableにチェックを付ける必要があることに注意です。
ログインしているユーザーがUser Criteriaに含まれる場合は"true"、そうでない場合は"false"が戻り値として返ってきます。
・Catalog Client Script
Catalog Client ScriptからScript Includeを呼び出し、その返り値でVariableの必須制御するかどうかを判断する
User Criteriaを呼び出せる関数がServer側のスクリプトでのみ使用可能なので、GlideAjaxを使ってScript Includeを経由します。
以下処理をScript Includeに記載します。赤字部分にはUser Criteriaのsys idが入ります。
SNC.UserCriteriaLoader.getAllUserCriteria().toString().includes("775b9a9093510210e61e30a97bba10fe");
※Script IncludeをClient側の処理から呼ぶ際は、Client Callableにチェックを付ける必要があることに注意です。
ログインしているユーザーがUser Criteriaに含まれる場合は"true"、そうでない場合は"false"が戻り値として返ってきます。
・Catalog Client Script
Catalog Client ScriptからScript Includeを呼び出し、その返り値でVariableの必須制御するかどうかを判断する
function onLoad() {
var gajax = new GlideAjax("UserCriteriaTest");
gajax.addParam("sysparm_name", "isMandatory");
gajax.getXMLAnswer(function(serverResponse) {
g_form.setMandatory('users', serverResponse);
});
}
・Script Include
Script Includeの中でUser Criteriaを判定するvar UserCriteriaTest = Class.create();
UserCriteriaTest.prototype = Object.extendsObject(AbstractAjaxProcessor, {
isMandatory: function() {
return SNC.UserCriteriaLoader.getAllUserCriteria().toString().includes("775b9a9093510210e61e30a97bba10fe");
},
type: 'UserCriteriaTest'
});
制御できているか確認!
Catalog Itemの変数がUser Criteriaで設定したユーザー"moripo"の時だけ必須入力になることを確認します。
・Adminユーザーの場合"users"フィールドが必須になっていません。
・moripoユーザーの場合"users"フィールドが必須になります。
・Adminユーザーの場合"users"フィールドが必須になっていません。
・moripoユーザーの場合"users"フィールドが必須になります。
最後に
いかがだったでしょうか?
スクリプト内に複雑な制御を実装すると、その後の運用保守や変更のハードルが高くなりますが、
User Criteriaを活用することで、わかりやすいUIで簡単に制御を変更することが可能になります。
様々なところに応用できると思いますので、手段のひとつとして覚えておいてもよいのはないでしょうか!
この記事がお役に立てば幸いです。
ServiceNowを活用した業務改善をするなら、弊社のServiceNow導入サービスをよろしくお願いします。
ServiceNowについて更に詳しく知りたい方は、ServiceNowに熟知したSTSメンバーがよりよいシステム構築をご提案しますので、ぜひご相談ください。それでは~。
スクリプト内に複雑な制御を実装すると、その後の運用保守や変更のハードルが高くなりますが、
User Criteriaを活用することで、わかりやすいUIで簡単に制御を変更することが可能になります。
様々なところに応用できると思いますので、手段のひとつとして覚えておいてもよいのはないでしょうか!
この記事がお役に立てば幸いです。
ServiceNowを活用した業務改善をするなら、弊社のServiceNow導入サービスをよろしくお願いします。
ServiceNowについて更に詳しく知りたい方は、ServiceNowに熟知したSTSメンバーがよりよいシステム構築をご提案しますので、ぜひご相談ください。それでは~。