LoginSignup
0
0

More than 3 years have passed since last update.

ServiceNow - 複数チェックボックスの中で1つの選択を必須にする

Posted at

概要

二つ以上の項目の選択を必須にするスクリプトです。ServiceNowフォーラムでの質問の回答です。
一つ以上の選択を必須にする場合はUIポリシーで1つのチェックボックスを必須にするとチェックを必須にできます。
image.png

二つ以上の選択を必須にする場合はUIポリシーで2つのチェックボックスを必須にしても1つの選択で登録することができます。
二つ以上の選択を必須にするにはクライアントスクリプトを作成する必要があります。

手順

変数の定義

次のようにラベルと3つのチェックボックスを定義します。
image.png

UIポリシー

最低一つの選択を必須にするためにUIポリシーを作成します。
image.png
フォームを開いて見ると次のようにラベルの右に赤い「*」が表示されて選択が必須であることを示します。
image.png
但し残念なことに1つを選択すると黒くなります。これはしょうがないとします。
image.png

クライアントスクリプト

次のスクリプトを作成します。変数「mandatoryCount」は選択必須項目の数です。今回は2つの選択を必須にするので「2」にします。

function onSubmit() {
    //Set the mandatory checkbox variable names and total mandatory count here
    var mandatoryVars = 'club_wembely_membership,education,player_status_competitions';
    var mandatoryCount = 1;

    var passed = forceMandatoryCheckboxes(mandatoryVars, mandatoryCount);
    if (!passed) {
        //Abort the submit
        var message = 'You must select at least ' + mandatoryCount + ' options.';
        g_form.addErrorMessage(message);
        return false;
    }
}

function forceMandatoryCheckboxes(mandatory, count) {
    //Split the mandatory variable names into an array
    mandatory = mandatory.split(',');
    var answer = false;
    var varFound = false;
    var numTrue = 0;
    //Check each variable in the array
    for (var x = 0; x < mandatory.length; x++) {
        //Check to see if variable exists
        if (g_form.hasField(mandatory[x])) {
            varFound = true;
            //Check to see if variable is set to 'true'
            if (g_form.getValue(mandatory[x]) == 'true') {
                numTrue ++;
                //Exit the loop if we have reached required number of 'true'
                if (numTrue >= count) {
                    answer = true;
                    break;
                }
            }
        }
    }
    //If we didn't find any of the variables allow the submit
    if (varFound == false) {
        answer = true;
    }
    //Return true or false
    return answer;
}

実行

フォームを開いて試して見ます。項目1つを選択しただけで「Order Now」ボタンを押下すると次のようにエラーメッセージが表示されます。
image.png

以上

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