LoginSignup
5
9

More than 3 years have passed since last update.

ServiceNow開発の要素_クライアントサイド

Last updated at Posted at 2019-07-16

はじめに

本稿ではServiceNow開発での知見を書きおこうと思います。
今回は、開発でよく使う機能(table)についてです。

ServiceNowは「標準的で」「迅速な」導入が可能なアプリケーションを標榜しており、その実現のためにかなりの部分がノンコーディングの初期状態(OOTB:out of the box)でできるようになっています。

とはいえ、コーディングをするべき部分も多少なり存在しており、その部分に関しては別稿ServiceNowで使用するJavaScriptまとめ【On Youtube】に譲ります。

今回の投稿範囲は、ノンコーディングで実現できる範囲であり、業務において必ず使うであろう機能についての解説です。下記の内容の理解があれば、ServiceNow開発者になれます。

具体的には下記です。

  • UIアクション
  • UIポリシー
  • クライアントスクリプト
  • ビジネスルール
  • アクセスコントロール
  • ワークフロー
  • メール通知
  • サービスポータル

です。他にも重要なトピックはありますが、別途解説します。
では内容に移りましょう。

UIアクション

一言で言うと、ボタンやリンクなどのクライアントアクションのこと。
URL:公式ドキュメント

イメージ:

FireShot Capture 016 - INC0010005 - Incident - ServiceNow - dev74512.service-now.com.png

解説:

プラットフォーム上で要求・承認・却下などのアクションを定義するボタンのこと。
上記ボタンをクリックすることで、サーバ処理やワークフローを走らせるためのトリガーとなる。
クライアント側にあたる。

アクセスパス:

System Definition > UI Actions

スクリプト:

ui_action_resolve.js
function resolveIncident(){
    //Set the 'Incident state' and 'State' values to 'Resolved', and display mandatory fields
    g_form.setValue('incident_state', 6);
    g_form.setValue('state', 6);
    g_form.setValue('resolved_by', g_user.userID);

    gsftSubmit(null, g_form.getFormElement(), 'resolve_incident'); //MUST call the 'Action name' set in this UI Action
}

//Code that runs without 'onclick'
//Ensure call to server-side function with no browser errors
if (typeof window == 'undefined')
    serverResolve();

function serverResolve(){
    current.incident_state = IncidentState.RESOLVED;
    current.state = IncidentState.RESOLVED;
    current.resolved_by = gs.getUserID();
    current.update();
}

クライアントスクリプト

一言で言うと、クライアントサイドでのメッセージ・バリデーション・などの処理のこと。
URL:公式ドキュメント

イメージ:

FireShot Capture 017 - INC0009005 - Incident - ServiceNow - dev74512.service-now.com.png

解説:

プラットフォーム上での動作に応じて、メッセージやバリデーションや値の自動セットを行う。
上記イメージでは、選択肢に応じてメッセージを表示している。
クライアント側にあたる。

アクセスパス:

System Definition > Client Scripts

スクリプト:

display_info_message.js
function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }
    var count = 0;
    var gr = new GlideRecord('incident');
//実装上ではbad practice
    gr.addQuery('urgency',g_form.getValue('urgency'));
    gr.query();

    while(gr.next()){
        count = count + 1;
    }
    g_form.addInfoMessage("同じ緊急度のインシデントが他にも"+ count + "件あります。");
}

UIポリシー

一言で言うと、クライアントサイドの表示・必須制御のこと。
URL:公式ドキュメント

イメージ:

FireShot Capture 019 - INC0009005 - Incident - ServiceNow - dev74512.service-now.com.png

解説:

プラットフォーム上での画面ロード時の単純処理を定義。
基本用途は必須と読み取り専用をかけるために使用する。
上記イメージでは、選択肢を必須項目にしている。
クライアント側にあたる。

アクセスパス:

System UI > UI Policies

イメージ2

FireShot Capture 020 - Fields set to mandatory for all states - UI Policy - ServiceNow_ - dev74512.service-now.com.png

UIポリシー:Fields set to mandatory for all states
意味:すべての状態のフィールドに適応する必須項目
コンディション:すべての条件
動作:UIポリシーアクション
caller_id,short_description=>必須項目

後述記事

  • ビジネスルール
  • アクセスコントロール
  • ワークフロー
  • メール通知
  • サービスポータル については別記事にて記載する予定です。
5
9
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
5
9