0
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?

Scoped AppのUI Scriptが保存できない

Posted at

目次

結論

ServiceNow上のScoped ApplicationでUI Scriptを作成するときは以下のテンプレートに則って作成しましょう。 scope_nameApplication(sys_scope)レコードのScope(scope)フィールドの値、scope_nameはそのUI Script(sys_ui_script)レコードのScript Name(script_name)フィールドの値に読み替えてください。

var scope_name = scope_name || {};

scope_name.script_name = (function () {

	"use strict";

	return {
        // Write your methods here
    };
})();

2025年1月2日(木)時点での情報です。また、本記事は以下のPDI環境で検証しています。

Property Name Value
Build name Xanadu
Build tag glide-xanadu-07-02-2024__patch1-08-24-2024

ことの発端

Global(global)でないアプリケーションで、Service Portal用にAngularJSのModuleを作成すべくUI Script(sys_ui_script)レコードを作成しました。ひとまずScript Name(script_name)フィールドに値を入れ、保存しようとしました。

スクリーンショット 2025-01-02 20.25.59.png

すると…

スクリーンショット 2025-01-02 20.30.35.png

…はて?

エラー文を読み解くと、「スコープ(グローバルでない)UI Scriptの既定形式と合っていません」とのこと。
そんな形式は存じませんよ…?

調査

こういった入力値の検証(いわゆるバリデーションですね)をするのは大抵Client Script(sys_script_clinet)Type(type)フィールドがonSubmit(onSubmit)のものだよな、と思って調べたらありました、このEnsure IIFE formatが諸悪の根源です1

スクリーンショット 2025-01-02 20.55.23.png

このClient Scriptでは、スコープアプリのUI Scriptは保存時にスクリプト(Script(script))の最初と最後が以下の文字列でない場合はおかしいフォーマットだとエラーダイアログが表示されるようになっています(scope_nameApplication(sys_scope)レコードのScope(scope)フィールドの値、scope_nameはそのUI Script(sys_ui_script)レコードのScript Name(script_name)フィールドの値)。

// スクリプトの最初はこの文字列でなければならない
var scope_name = scope_name || {};

scope_name.script_name = (function () {
    "use strict";
// スクリプトの最後はこの文字列でなければならない
})();

「スコープアプリではこの形式で書け」と言うのなら最初のテンプレートもこの形にしておくんなまし…!
いや、理屈はわかります。スコープ名のオブジェクトがほかでまだ定義されていなければからオブジェクトを作り、さもなくば既存のものを参照してスクリプト名のプロパティをStrictモードで実装してもらうべく即時関数で代入する値を算出させているのは…でもせめてエラー文に修正のヒントを入れておくれよ…!

まとめ

Scoped Application内でUI Scriptを作成・保存する場合は以下のテンプレートにしたがって実装することでエラーを回避できます。 許すまじServiceNow

var scope_name = scope_name || {};

scope_name.script_name = (function () {

	"use strict";

	return {
        // Write your methods here
    };
})();
  1. 内部でパターンに合っているかどうかを実際に判定しているのはUI Script(sys_ui_script)テーブルにあるValidate Client Script Functionsの中で定義してあるvalidateUIScriptIIFEPattern()関数です。

0
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
0
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?