1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ServiceNow-Service Operations Workspaceのデフォルトダッシュボードの表示をユーザーが最後に閲覧したダッシュボードにする

1
Last updated at Posted at 2026-05-26

背景

Service Operations Workspace(以降、記事内ではSOWと表記します)のデフォルトのHome画面(Landing Page)は、OOTBの「Overview」ダッシュボードが表示されるようになっています。

image.png

↑ ここのことです ↑

プルダウンからほかの閲覧可能なダッシュボードも選択、表示できるのですが、
image.png

任意のダッシュボードを選択した後にインスタンスからログアウトすると、次にログインしたときは「Overview」に戻ってしまいます。(嘘だと思う人はやってみてくださいw)

同一セッション内であれば、SOWから別ぺージに行って、SOWに戻ってきてもユーザーが最後に選択したダッシュボードが表示されます。これはUser Preferenceのcom.snc.par.dashboards.ui.preferencesで保持しているためです。
このPreferneceはログアウトしても生きているのですが、LandingページのExperienceのDashboard ControllerのDefault Dashboard SysIDにOverviewダッシュボードのsysidが設定されているため、ログイン時にOverviewダッシュボードが優先されている、という仕組みでした。

これが地味に不便で、OverviewはOOTBで最低限の情報はあるけど、せっかくチームで作成した業務に合わせたダッシュボードがあるならそれを使いたいし、複数使うならOverviewに戻るのではなくせめて最後に見ていたものであってほしい、などの需要が考えられます(実際にありました)

そこで調査、実装したものがあるので今回紹介します。

素朴な疑問-OOTB Overviewを非アクティブにすればいいのでは?

…って思うじゃないですか?
結論、私が検証した範囲では推奨しません。

冒頭と被りますが、「LandingページのExperienceのDashboard ControllerのDefault Dashboard SysIDにOverviewダッシュボードのsysidが設定されている」がおそらくけっこうやっかいで、ダッシュボード側で非アクティブにするだけだと、Landingページ側の表示が崩れてしまう事象が発生しました。(*)

後述しますが、Dashboard ControllerのDashboard SysIDは結局今回の方法で設定変更箇所でもあるので、だったらOverviewダッシュボード自体は論理的にも生かしたまま(変に他のページに影響与えていやなので)、ユーザー体験を向上させるように設定しようという判断です。

(*)私がぱっと検証しただけなので、知見をお持ちの方がいたらぜひ教えていただきたい

前提・要件

「OOTB Overviewダッシュボードは使わない/使いたくない」ユーザーに対して

 1.初回ログイン時は OOTB デフォルトの Overview ダッシュボードでよい
 使わないが、前述の理由もあり許容。
 基本ServiceNow使い続けるとして、最初の1回だけ任意のダッシュボード選べばいいよね、というもの)

 2.ユーザーが SOW 上で最後に見たダッシュボードを、次回ログインでも復元する

 3.「最後に見たダッシュボード」が無い(初回)場合は OOTB Overview 表示でよい

こういった前提と要件で、具体的な手順に入っていきます。

設定手順

では早速設定していきましょう。

1.OOTB Overview dashboardのsysidをメモる(後で使う)

いろんな取得方法があると思いますがキャプチャはPAR Dashboardのリストで確認したときの例
image.png

後で使うのでメモ帳などのテキストエディタなどに控えておいてください。

2.Landingページを複製

UI Builder>Experience>Service Operations Workspace
image.png

Service desk landing page PAR SNCの右側のメニューから「Duplicate Variant」を選択します。
image.png

記事用に「Test」を頭につけて作成します
image.png

3.OOTB Landingページを非アクティブ

Activeのチェックを外してSave
image.png
(ここは運用で使う前にできれば順不同です)

こうなるはず
image.png

4.複製した新LandingをUI Builderで開く

雰囲気出すために開いただけの画面です
image.png

4-1.コンポーネントのプリセットを解除する

解除しないと各種プロパティがread-onlyでバインド不可になるため、解除します
こういうこともするので前述手順のとおり、ページはDuplicate推奨です。

左ペインで「Dashboard 1」を選択し、右ペイン上の「Dashboard data broker preset」をクリックします。
image.png

「Remove current preset」をクリックします
image.png

4-2.Transformを追加 (Data Broker Server Scriptの作成)

左下のData and scriptsの+ボタン>Data resource
image.png

+Create>Transform
image.png

UI Builderから別タブでレコード作成フォームになります。
image.png

ScriptとOutput Schema全貌は以下

Script
function transform(input) {
    var dashboardId = '';

    // Get user's last dashboard preference
    var gr = new GlideRecord('sys_user_preference');
    gr.addQuery('user', gs.getUserID());
    gr.addQuery('name', 'com.snc.par.dashboards.ui.preferences');
    gr.orderByDesc('sys_updated_on');
    gr.setLimit(1);
    gr.query();

    if (gr.next()) {
        try {
            var raw = gr.getValue('value') || '{}';
            var parsed = JSON.parse(raw);

            if (parsed.recent) {
                var recentArr = JSON.parse(parsed.recent);
                if (recentArr[0] && recentArr[0].sys_id) {
                    dashboardId = recentArr[0].sys_id;
                }
            }
        } catch (e) {
            gs.warn('lastDashboardPref parse error: ' + e);
        }
    }

    // Fallback to default if none (REQ-1 / REQ-3)
    if (!dashboardId) {
        dashboardId = 'f671f450477bca5096bc6095d36d43d7'; // 手順1 で取得した OOTB Overview  sys_id に置換
    }

    return {"value": dashboardId.toString()};
}
Output schema
[
  {
    "name": "value",
    "label": "Value",
    "description": "value",
    "readOnly": false,
    "fieldType": "json"
  }
]

作成したスクリプトのsysidを次の手順で使うのでメモって下さい。
image.png

4-3.ux_data_broker ACLの作成

UI Builder/Workspace/Next Experienceで使う「Data Resource/Data Broker」を実行できるユーザーを制御するために必要なux_data_brokerタイプのACLを作ります。
※ここもUI Builder外の作業です。ACL作成になるのでsecurity_adminを持っているユーザーで作成してください。

image.png

Type:ux_data_broker
Operation:Execute
Decision type:Allow if
Name:右の青三角アイコンをクリック → text入力に切替 → 4-2で取得したスクリプトのsys_idを貼り付け
Role:SOW利用者のロールを設定

4-4.作成したData Broker Server Scriptをページのデータリソースとして追加する

※UI Builderに戻ってきました

左下のData resourcesの+Add Newをクリック
image.png

先ほど作成したData Broker Server Scriptを選択し、Addを押す
image.png

Data resourcesに追加されたことを確認する
image.png

4-5.DashboardコンポーネントのDefault Dashboardをバインドする

右ペインのDefault Dashboard欄の円柱マークをクリックします
image.png

下記キャプチャのようにたどって、「lastDashboardPref 1」のValueを「@data.lastdashboardpref_1.value.value」とし、Applyをクリックします。
image.png

lastdashboardpref の部分は前述の手順で追加した Data resource の名前です。 lastdashboardpref_1 等の末尾連番が付く場合があるので、実際にツリーに表示されている名前を使ってください。
末尾の .value.value は「Output schemaで定義したvalueフィールド」→「Transformのreturn valueのvalue プロパティ」を辿る構造です。Output schemaを変えた場合はバインド式も変わります。

4-6.Dashboard ControllerのdashboardSysIdもバインドする

4-5と同様に、左下Dashboard Controllerの「dashboardSysId」も「@data.lastdashboardpref_1.value.value」をセットしてください。
image.png

image.png

image.png

4-7.Landingページを保存(設定おわり)

image.png

これで設定完了です

動作検証

ログアウトしてる状態かどうか、がキャプチャだとなんとも判定しにくいと思ったので、動画をXにあげました!

ログイン→Overviewダッシュボード→ダッシュボード切替
 →ログアウト→ログイン→切り替えたダッシュボードになってる

を撮ってます
(途中で関係ないページに行ったりもしています)

まとめ

やってみてわかったこととしては、
・PreferenceあるのになんでOverviewに戻んねん
・もっと簡単に設定させてください(UI Builder関連の手順が、というより、Overview回避を)
・OOTBも良いところはあるが、ユーザー体験ももちろん大事
・コミュニティの回答は非表示リプライもロードしよう(後述)
ですね。

なんかもっと簡単な方法ありそうだけど…(知ってる方ぜひ教えてください)

同じ悩みを持っただれかがこの記事が参考になればいいなと思いつつ、
今後の製品アップデートでこの記事自体が必要なくなることもひそかに祈ります!

それでは!

参考サイトリンク

UI Builder - Get and update data by Data Broker
Default Dashboard in Service Operations Workspace
※こちらのコミュニティの解決策で投稿されている「‎12-10-2025 10:16 AM」の回答を参考にしています。
 最初に表示される解答だけでなく「Load more replies」を押してほかの返信も見ていくことでたどり着けました!(粘った甲斐があった)
↓その解答ピンポイントのリンク↓

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?