概要
Version: San Diego
ServiceNowへのログイン直後に一度だけ特定URLにリダイレクトする設定方法を説明します。
設定手順は大まかに以下です。
- System Properties(glide.entry.first.page.script)の作成
- Script Include(SPEntryPage)の編集
補足
公式ドキュメント1やQiita記事2の記載内容では確かにログイン直後に特定URLにリダイレクトしてくれますが、それ以外のServiceNow操作時に意図しない画面表示となる場合があります。
(ServiceNowのPlatformUIを開こうとすると意図しない画面にリダイレクトされてしまう、など)
こういった挙動になってしまうことはKBでも紹介されています34。
これを避けるため、本記事ではSPEntryPageにて初回セッションのみgetFirstPageURLを実行する、という処理を追記しています。
[手順1] System Properties(glide.entry.first.page.script)の作成
※本手順は公式ドキュメント1にて紹介されているものと同一です。
(1-1)以下のようにSystem Propertiesを新規作成します
- Name: glide.entry.first.page.script
- Type: String
- Value: new SPEntryPage().getFirstPageURL()
[手順2] Script Include(SPEntryPage)の編集
(2-1) Script Includeの「SPEntryPage」を開きます
(2-2) 22行目あたりを編集し、ログイン直後にリダイレクトさせたいURLを指定します
initialize: function() {
this.logVariables = false; // for debugging
this.portal = "/sp/"; //<- ココ // The URL suffix specified in the sp_portal record
},
(2-3) 69-70行目あたりを編集し、本スクリプトを適用 させない ユーザーの条件を指定します
※デフォルトではログイン試行ユーザーがロールを持っている場合に適用 させない 設定になっています
getFirstPageURL: function() {
......
if (user.hasRoles() && !redirectURL && !isServicePortalURL) //<- ココ
return;
......
(2-4) 63行目あたりと112行目あたりを編集し、本スクリプトが初回セッションのみ実行されるようにします
※セッションに含まれる「firstlogin」がnullの場合だけ本スクリプトを実行する処理を追記しています
※「firstlogin」とfirstloginの中に入れる値はなんでも大丈夫です
getFirstPageURL: function() {
var session = gs.getSession();
this.logProperties('before', session);
var f = session.getClientData('firstlogin'); //<- 63行目あたりにコレを追記
if(f==null){ //<- 63行目あたりにコレを追記
var nt = session.getProperty("nav_to");
var isServicePortalURL = new GlideSPScriptable().isServicePortalURL(nt);
var redirectURL = session.getProperty("login_redirect");
......
......
if (!this.logVariables) {
gs.log('redirectURL: ' + redirectURL);
gs.log('User: ' + user.getName());
gs.log('is internal: ' + (!user.hasRoles()));
gs.log('returnUrl: ' + returnUrl);
}
session.putClientData('firstlogin', 'done'); //<- 112行目あたりにコレを追記
return returnUrl;
}else{ //<- 112行目あたりにコレを追記
return; //<- 112行目あたりにコレを追記
} //<- 112行目あたりにコレを追記
},