【ServiceNowスクリプト事始め】クライアントスクリプト(その1)

 クライアントスクリプトでは、動作する場所(フォーム or リスト)およびそのタイミングで4つのタイプに分けることができます。

フォームで動作するタイプ

  
   ・onLoad(フォームがロードされたとき)
      フォームが読み込まれるときに実行されるスクリプトロジックで、これによりフォームの外観またはコンテンツを操作します。
 
   ・onChange(フォームが変更されたとき)
      特定のフィールドの値が変更されたとくに実行されるスクリプトロジックで、これにより対象のフィールド値に応答して、別のフィールドの値や属性を変更します。

   ・Submitted(フォームが送信されたとき)
      フォームの送信時に実行されるスクリプトロジックで、これによりフィールドの値を検証します。

リストで動作するのタイプ

  
   ・onCellEdit(リストエディタのセル値が変更されたとき)
      リストエディターがセル値を変更したときに実行されます。

クライアントスクリプトフォームの構成

 [System Definition > Client Script]モジュールにより表示されたクライアントスクリプトのリストから新しいクライアントスクリプトを作成ボタンをクリックすると
クライアントスクリプトフォームが表示されます。

・Name(名前)
  クライアントスクリプトの名前を入力。任意ではあるがスクリプトの挙動を表したものが望ましい。
・Table(テーブル)
  スクリプトが適用されるテーブル。
・UI Type(UIタイプ)
  スクリプトをデスクトップおよびタブレットに対して実行するか、モバイル/サービスポータルに対して実行するか、またはすべてに対して実行するかを選択。
・Type(タイプ)
  スクリプトをいつ実行するかを選択。onCellEdit、onChange、onLoad、または onSubmit。
・Application(アプリケーション)
  スクリプトを実行するアプリケーションスコープ。
・Active(アクティブ)
  チェックした場合は、スクリプトを有効化。
・Inherited(継承)
  チェックした場合、このスクリプトは指定されたテーブルとそれを継承するすべてのテーブルに適用
・Global(グローバル)
  チェックした場合、スクリプトはすべてのビューに適用。チェックしない場合は、Viewフィールドが表示され、適用するビューを指定。
・Descroption(説明)
  スクリプトの説明
・Message(メッセージ)
  getMessage('[message]') を使用したローカライズ済みメッセージとして、クライアントスクリプトに提供されるテキスト文字列
  (注意)使用方法がいまいちわかりません。私はしばらく使わない方向で。)
・Script(スクリプト)
  スクリプトエディタ
・Isolate script(スクリプトを隔離)
  スクリプトごとにDOMの直接アクセスを無効化し、Strictモードで実行
  この機能を有効にするためにはシステムプロパティー[glide.script.block.client.globals]をfaleseにする必要あり。

DOMの直接アクセス無効化

 Isolate scriptの説明の補足になりますが、ここではDOMの直接アクセス無効化について説明します。
 先ほど例示したクライアントスクリプトの新規作成画面をよく見ると、メッセージが表示されていることに気が付きます。

日本語訳をすると(以下機械翻訳)
「新しいクライアント スクリプトは、直接 DOM アクセスが無効になった厳密モードで実行されます。 jQuery、prototype、Windowオブジェクトへのアクセスも同様に無効になります。
これをスクリプトごとに無効にするには、このフォームを設定し、「スクリプトの分離(Isolate script)」フィールドを追加します。すべてのグローバル スコープの新しいクライアント側スクリプトに対してこの機能を無効にするには、システム プロパティ "glide.script.block.client.globals" を false に設定します。
以下簡単に解説します。

・厳密モード(Strict Mode)
  JavaScriptがより厳格なエラーチェックを行い、より安全で最適化されたコードを書くために設計されたモードです。例えば、未宣言の変数を使用するとエラーになります。

・DOMアクセスが無効
  直接のDocument Object Model(DOM)アクセスが無効にされています。これは、スクリプトがHTMLページの構造、スタイル、または内容を直接変更することを制限することを意味します。これは、セキュリティリスクを減らし、予期しないUIの変更を防ぐためです。

・jQuery、prototype、Windowオブジェクトへのアクセスも無効
   jQuery、prototype(JavaScriptフレームワークの一つ)、およびwindowオブジェクトへのアクセスが無効にされています。これは、グローバルスコープでの変数や関数の競合を避け、クリーンな名前空間を保つためです。

 要するに、ServiceNowは新しいクライアントスクリプトのセキュリティを強化し、パフォーマンスを向上させるためにこれらの制約を設けています。しかし、これにより開発者の柔軟性が制限されるため、必要に応じて個々のスクリプトまたは全体的にこれらの制約を無効にする方法も提供している訳です。柔軟性がありますね。

 次回はonLoadクライアントスクリプトよりは具体的なスクリプトの解説をしてまいります。

(おわり)