2

ServiceNow プラットフォームを使用しています。カタログ アイテム レコード プロデューサーのフォーム フィールドを検証するカタログ クライアント スクリプトを作成しています。

検証が検査に合格しない場合、 return false を使用してフォームの送信を停止しています。

無効なデータ (特殊文字を含むグループ名または既に存在するグループ名) を入力してこれをテストしたところ、問題がキャッチされ、エラー メッセージが表示されます。無効なデータを入力して複数回送信できますが、機能します。

ただし、問題:

最初に無効なデータを入力して送信した後、スクリプトの実行が「停止」したように見えます。次に、データを修正して送信ボタンをもう一度押します。それはただそこに座っているだけで、何もしません。フォームを再度リロードする必要がありますが、これは望ましくありません。

制御フローで何が起こっていますか? データが無効な場合にフォームをきれいに停止し、ユーザーが間違いを修正して送信ボタンをもう一度押して続行できるようにするにはどうすればよいですか?

スクリプトが実行されるたびに「スクリプトが実行されました」という警告ボックスが表示されるため、スクリプトが再度実行されないことがわかります。最初に無効なデータを送信し、次に有効なデータを入力して送信を押した後、ある時点で実行が停止します。

function onSubmit() {
    g_form.hideAllFieldMsgs('error');
    alert("script run");

    //Group Name contain letters numbers and dashes only
    var group_name = g_form.getValue('u_group_name');
    // Group name regular expression
    var regGrpName = /^([A-Za-z0-9\-]+)$/;
    // Check name against regular expression
    if (regGrpName.test(group_name) == false) {
        g_form.showFieldMsg('u_group_name', "Group Name must contain only letters, numbers or dashes. ", 'error');
        //Do not submit
        //g_form.submitted = false;
        return false;
    }

    //Check if google group already exists
    var rec = new GlideRecord('u_google_user_accounts');
    rec.addQuery('u_account_email', new_group_email);
    rec.query();

    while (rec.next()) {
        g_form.showFieldMsg('u_group_name',rec.u_account_email + " already exists as an account.",'error');
        return false;
    }

    //Group Members Email List separated by commas
    // Hide error message
    //g_form.hideErrorBox('u_group_members');
    var group_members = g_form.getValue('u_group_members');
    // Comma separate list
    var member_split = group_members.split(',');
    // Loop over list of email addresses
    for (var n = 0; n < member_split.length; n++) {
        // Trim whitespace
        var member_info = trim ? member_split[n].trim() : member_split[n];
        // Email validation regular expression
        var regEmail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
        // Check each item against regular expression
        if (member_info.search(regEmail) == false) {
            g_form.showFieldMsg('u_group_members', "Group Members contains an invalid email address. " + member_info, 'error');
            //Do not submit
            //g_form.submitted = false;
            return false; 
        } else if (member_info.search(validRegExp) == true) {
            g_form.setValue('u_group_members', group_members);  
        }
    }
    return true;
}
4

2 に答える 2

0

私は問題を解決したと思います。検証をチェックする完全に別の関数を作成しました。onSubmit は検証関数を呼び出し、戻り値をチェックします。戻り値が false の場合、フォームは停止します。そうしないと、無効なデータで複数回試行した後でも送信されます。これでうまくいくと思います。誰かが問題を見ることができるかどうか教えてください。助けてくれてありがとう。

function onSubmit() {
    var isValid = checkGoogleGroup();
    if (isValid == false) {
        g_form.submitted = false;
        return false;
    }
}
function checkGoogleGroup() {
    g_form.hideAllFieldMsgs('error');
    //Group Name contain letters numbers and dashes only
    var group_name = g_form.getValue('u_group_name');
    // Group name regular expression
    var regGrpName = /^([A-Za-z0-9\-]+)$/;
    // Check name against regular expression
    validGroupName = regGrpName.test(group_name);
    if (validGroupName == false) {
        g_form.showFieldMsg('u_group_name', "Group Name must contain only letters, numbers or dashes. ", 'error');
        //Do not submit
        return false;
        }
//Check if google group already exists
    var rec = new GlideRecord('u_broad_user_accounts');
    rec.addQuery('u_account_email', new_group_email);
    rec.query();
    while (rec.next()) {
        g_form.showFieldMsg('u_group_name',rec.u_account_email + " already exists as an account.",'error');
        return false;
    }
//Group Members Email List separated by commas
    var group_members = g_form.getValue('u_group_members');
    // comma separate list
    var member_split = group_members.split(',');
    // loop over list of email addresses
    for (var n = 0; n < member_split.length; n++) {
        // trim whitespace
        var member_info = trim ? member_split[n].trim() : member_split[n];
        // validation regular expression
        var validRegExp = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
        // check each item against regular expression
        if (member_info.search(validRegExp) == -1) {
            g_form.showFieldMsg('u_group_members', "Group Members contains an invalid email address. " + member_info, 'error');
            return false;
        }
    }
}
于 2015-05-15T20:35:16.467 に答える