2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Australia 新機能 Read Only Optionについて

2
Posted at

はじめに

ServiceNowは年2回のメジャーバージョンアップが行われており、開発者・利用者にとって有益な機能が継続的に提供されています。今回は、AI Platformの新機能をPDIでの実際の操作を交えながら検証してみました。

Australiaバージョンから追加された機能

ServiceNow AustraliaバージョンからRead Onlyが3(+1)パターンに分類されています。1

種別 概要
Display Read Only UI上ではフィールドを読み取り専用として表示します。APIやClient Script操作では変更可能です。
Client Script Modifable UI上ではフィールドを読み取り専用として表示します。クライアントスクリプト経由のみ変更可能です。
Strict Read Only UI上ではフィールドを読み取り専用として表示します。クライアントスクリプトとサーバーサイドAPIの両方からの変更はできません。
(Instance Configured) Australiaリリースの前に作成された読み取り専用フィールドに適用される、デフォルトのオプション値です。互換性の維持などに利用します。

動作検証

テーブル構成

テーブル構成は以下の通りにしてみました。
00_table.png

Display Read Only

これは見ての通り、UIから何にも変更できません。
01.display_read_only.png

Client Script Modifable

以下の通りonChangeタイプのClient Scriptを準備しました。
02_client_script_modi.png

中略
    // u_nameが変更されたらすべてのRead Onlyフィールドに値をセット
    g_form.setValue('u_display_read', 'Test Client After_display');
    g_form.setValue('u_client_script_read', 'Test Client After_client');
    g_form.setValue('u_strict_read', 'Test Client After_strict');

予想通り、Display Read OnlyとClient Script Modifableのフィールドのみ更新がかかりました。
02_client_script_modi_res.png

Strict Read Only

REST API Explorerの場合

以下の通り、REST API Explorerで実行してみました。
03-01_Strict.png
03-02_Strict.png

予想通り、Display Read Onlyのフィールドのみ更新がかかりました。
03-03_Strict.png
03-04_Strict.png

Background Scriptsの場合

今回は以下の2パターンで検証を行いました。

抜粋
// GlideRecordSecureで試行
var gr = new GlideRecordSecure(tableName);
if (gr.get(targetSysId)) {
    gr.u_display_read = "Display Chage Data";
    gr.u_client_script_read = "Client_mod Change Data";
    gr.u_strict_read = "Strict Change Data";
    var result = gr.update();
    }
:
:
抜粋
// GlideRecordで試行
    var gr = new GlideRecord(tableName);
    if (gr.get(targetSysId)) {
        gr.u_display_read = "Display Chage Data";
        gr.u_client_script_read = "Client_mod Change Data";
        gr.u_strict_read = "Strict Change Data";
        var result = gr.update();
        var result = gr.update();
:
:

結果は、以下の通りです。
・GlideRecordSecureで試行
03-06_Strict.png

・GlideRecordで試行
03-05_Strict.png

GlideRecordSecureでは期待通りの結果が得られました。一方、GlideRecordではすべてのフィールドが更新されています。この違いは、それぞれのAPIにおけるアクセス制御の仕組みの差によるものと考えられます。2

まとめ

当然といえば当然ですが、Docsに記載されている通りの動作がしっかり確認できました。

No Read Only Option UIフォーム Client Script サーバーサイド(TableAPI,GlideRecord等)
1 Display Read Only ❌ 読み取り専用 ✅ 変更可 ✅ 変更可
2 Client Script Modifiable ❌ 読み取り専用 ✅ 変更可 ❌ 変更不可
3 Strict Read Only ❌ 読み取り専用 ❌ 変更不可 ❌ 変更不可

ServiceNowのセキュリティ機能は年々進化しており、UIから手軽に使える機能もこれからさらに充実していくでしょう。標準機能を信頼することはもちろん大切ですが、時には"当たり前"とされていることを自分の手で検証してみることも、理解を深める上で意味があるかもしれません。目新しい内容ではなかったかもしれませんが、少しでも参考になれば幸いです。

  1. ServiceNow公式Docs

  2. ServiceNow Secure Code Guide (Now Supportへのログインが必要)

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?