2015-05-15 2 views
2

Я использую платформу ServiceNow. Я пишу сценарий клиента каталога, чтобы проверить поля формы в изготовителе записей каталога.ServiceNow Script onSubmit не работает должным образом

Я прекращаю отправку формы с помощью return false, если проверка не проходит проверку.

Я проверил это, введя недопустимые данные (имя группы со специальными символами или уже существующее имя группы), и она улавливает проблему и показывает сообщение об ошибке. Я могу ввести неверные данные и отправить несколько раз, и он работает.

Однако вопрос:

Сценарий, кажется, «остановить» работает после того, как я первый ввести неверные данные и отправить, а затем я снова исправить данные нажмите кнопку отправки. Он просто сидит и ничего не делает. Я снова должен перезагрузить форму, что нежелательно.

Что происходит с потоком управления? Как я могу чисто остановить форму, если данные недействительны, но затем разрешить пользователю исправить ошибку и снова нажать кнопку отправки, чтобы продолжить?

Я могу сказать, что сценарий не запускается снова, потому что у меня появляется окно предупреждения, в котором говорится, что «запуск скриптов» выполняется каждый раз при запуске скрипта. Он просто прекращает работу в какой-то момент после подачи неверных данных сначала, а затем ввода некоторых действительных данных и нажатия submit.

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; 
} 
+0

Вы видите какие-либо ошибки JavaScript на стороне клиента, которые вызывают на странице либо при первоначальной попытке отправки, либо в последующих попытках отправить после того, как страница не прошла проверку? – Bryan

ответ

0

Я думаю, что я решил проблему. Я сделал совершенно отдельную функцию, которая проверяет правильность. OnSubmit вызывает функцию проверки и проверяет возвращаемое значение. Если возвращаемое значение ложно, оно останавливает форму. В противном случае он отправляется даже после нескольких попыток с недопустимыми данными. Я думаю, это будет трюк. Сообщите мне, есть ли у кого-нибудь проблемы. Спасибо за помощь.

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; 
     } 
    } 
} 
1

Я рад, что вы нашли решение выше, но я хотел, чтобы оставить комментарий, а также, чтобы спросить, если вы пытались попробовать {} поймать {} блок для обработки неверных данных?

Смежные вопросы