ServiceNow: JavaScript TypeError: Невозможно прочитать свойство undefined

1

Я пишу скрипт клиента onChange в ServiceNow и имею проблемы с ошибкой Javascript для внешнего клиента. Я продолжаю получать TypeError: Не могу прочитать свойство "u_emp_name" неопределенного. переменная, по-видимому, меняется, поскольку в какой-то момент я также получил неопределенное значение u_pos_office, однако данные корректно вытягиваются, и на мою функциональность кода нет влияния на производительность.

Любые предложения о том, что может вызвать ошибку типа?

Скрипт ниже:

function onChange(control, oldValue, newValue, isLoading) {

    var billNum = g_form.getReference('u_billet',findBilletInfo);
    console.log('Emp Name: ' + billNum.u_emp_name);
    console.log('OFfice: ' + billNum.u_pos_office);
    console.log('Career Field: ' + billNum.u_pos_career_field);

   if (isLoading || newValue == '') {
      return;
   }

    if (oldValue != newValue){

        findBilletInfo(billNum);

    }

    function findBilletInfo(billNum){

        console.log('Bill Num' + billNum);
        console.log('encumbent' + billNum.u_emp_name);

        var empName = billNum.u_emp_name;
        var empNameStr = empName.toString();

        console.log(empName);
        console.log(empNameStr);

        g_form.setValue('u_organization_office',billNum.u_pos_office);
        g_form.setValue('u_encumbent',billNum.u_emp_name);
        g_form.setValue('u_old_career_field',billNum.u_pos_career_field);
        g_form.setValue('u_old_career_specialty',billNum.u_pos_career_specialty);   
        g_form.setValue('u_old_occupational_series',billNum.u_pos_series);
        g_form.setValue('u_old_grade',billNum.u_pos_grade);
        g_form.setValue('u_old_work_category',billNum.u_pos_category);
        g_form.setValue('u_old_job_title',billNum.u_pos_title);
        g_form.setValue('u_losing_rater',billNum.u_emp_rater_name);
        g_form.setValue('u_losing_reviewer',billNum.u_emp_reviewer_name);   

    }


}
  • 0
    Вы отлаживали свой код?
  • 0
    Я собираюсь найти решение сейчас. Я знал, что было причиной ошибки в моем обратном вызове, но не знал об асинхронном запуске. был очень проницательным, дам вам знать, если я найду решение.
Теги:
onchange
reference
servicenow

1 ответ

2

Кажется, здесь ошибка.

var billNum = g_form.getReference('u_billet',findBilletInfo);
==> console.log('Emp Name: ' + billNum.u_emp_name);

В этом случае billNum не определено, поскольку getReference выполняется асинхронно. См. Документацию для этой функции.

Это означает, что он не гарантирует немедленное или отрицательное возвращение. Вероятно, поэтому вы иногда делаете запись, а не другие.

Вы можете переместить эти журналы отладки в ваш findBilletInfo вызов findBilletInfo чтобы проверить значения

if (isLoading || newValue == '') {
  return;
}

var billNum = g_form.getReference('u_billet',findBilletInfo);

function findBilletInfo(billNum) {

    console.log('Bill Num' + billNum);
    console.log('encumbent' + billNum.u_emp_name);
    console.log('OFfice: ' + billNum.u_pos_office);
    console.log('Career Field: ' + billNum.u_pos_career_field);

    ...
}

Если вы отлаживаете Firefox или Chrome, вы должны просто зарегистрировать объект на консоли, чтобы сразу исследовать весь объект.

function findBilletInfo(billNum) {

    console.log(billNum);

    ...
}

Результат будет выглядеть примерно так в консоли, и вы сразу увидите все поля.

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню