Скрипт отладки Netsuite suitescript в исключении Chrome

Поэтому я пытаюсь добавить кнопку в форму заказа на продажу в netsuite, которая проверяет определенные поля на основе того, что вы ввели в предыдущих полях. У меня возникли проблемы с тестированием и отладкой этого в google chrome в netsuite. Во-первых, вот мой код: я добавляю кнопку, которая вызывает эту функцию, в запись клиентского скрипта.

   function vsoeValidate(){

    var calc = nlapiGetFieldValue('custbody_cv_vsoe_calculation');

    calc = nlapiGetFieldValue('custbody_cv_renewal_rev_amount') - (nlapiGetFieldValue('custbody_cv_vsoe_cola') * nlapiGetFieldValue(1-'custbody_cv_vsoe_partner_disc')) - (nlapiGetFieldValue('custbody_cv_vsoe_bts_fees') * (1-nlapiGetFieldValue('custbody_cv_vsoe_partner_disc'))) /  
           (nlapiGetFieldValue('custbody_cv_vsoe_software_amt') * (1- nlapiGetFieldValue('custbody_cv_vsoe_multiyear_disc')));

    nlapiSetFieldValue('custbody_cv_vsoe_calculation', calc);

    var display = nlapiGetFieldValue('custbody_cv_vsoe_calculation_disp');
    var bucket = nlapiGetFieldValue('custbody_cv_vsoe_bucket');

    if(bucket === 'X'){
        return false;
    }        
    if(calc > (nlapiGetFieldValue('custbody_cv_vsoe_bucket.custrecord_cv_vsoe_maintenance_rate') *1.15) || calc < ('custbody_cv_vsoe_bucket.custrecord_cv_vsoe_maintenance_rate'*0.85)){
        display = '<div style="; background-color:red; color:white;font-weight:bold;text-align:center">Out of bounds</div>';
        return true;
    } 
    else{ 
        display = '<div style="; background-color:green; color:white;font-weight:bold;text-align:center">In bounds</div>';
        return true; 
    }

}

когда я нажимаю кнопку, я получаю сообщение об ошибке TypeError undefined is not a function.

Я действительно не уверен, что делать дальше, это потому, что логика внутри vsoeValidate неверна, или я использую неправильный тип функции? Любая помощь будет большой спасибо!

Обновление: вот скриншот моей записи скрипта!

введите здесь описание изображения

введите здесь описание изображения


person Jess Anastasio    schedule 04.08.2014    source источник
comment
мне нужно передать что-то в качестве параметра для vsoeValidate()?   -  person Jess Anastasio    schedule 04.08.2014
comment
Все ваши имена полей должны быть в виде строк. Вы ссылаетесь на них как на несуществующие переменные. Вместо nlapiGetFieldValue(custbody_cv_vsoe_calculation) должно быть nlapiGetFieldValue('custbody_cv_vsoe_calculation'), обратите внимание на кавычки.   -  person erictgrubaugh    schedule 04.08.2014
comment
@egrubaugh360 egrubaugh360 это имеет смысл, поэтому я изменил это, но все равно выдает то же исключение undefined is not a function   -  person Jess Anastasio    schedule 04.08.2014


Ответы (3)


Попробуйте передать имя функции в виде строки, т.е.

form.addButton('custpage_validatevsoe', 'Validate VSOE', 'vsoeValidate');
person Saqib    schedule 04.08.2014

Вы упомянули, что установили vsoeValidate как функцию validateField. Вы хотите, чтобы эта функция запускалась, когда пользователи нажимают кнопку или когда запускается событие NetSuite valdiateField (при изменении поля до сохранения значения)?

Если вы хотите, чтобы это выполнялось при событии NetSuite validateField, функция должна возвращать true или false; он не может вернуться недействительным. Прямо сейчас в вашей логике у вас есть:

if (bucket = 'x') {
    return;
}

if (bucket = 'x') — это операция присваивания, а не проверка на равенство. Эта операция присваивания вернет «x», что является истинным значением, поэтому ваш код войдет в этот блок if. Затем вы возвращаете void (undefined), поэтому я предполагаю, что NetSuite пытается что-то сделать с результатом, возвращаемым вашей функцией, но не может, потому что он вернул undefined.

Функция validateField также получает параметр, предоставляющий идентификатор проверяемого поля.

Вы также захотите вставить некоторые журналы консоли в разные моменты, чтобы вы могли выяснить, где ваш сценарий дает сбой, вместо того, чтобы просто пытаться угадать синтаксис чтения.

person erictgrubaugh    schedule 04.08.2014
comment
Спасибо!! Ничего себе, я не понял, что ведро = 'x' должно быть === 'x'. Что касается параметра для validateVSOE, я запутался и не уверен, что поставить - person Jess Anastasio; 05.08.2014
comment
потому что, когда я пытаюсь указать идентификатор проверяемого поля «custbody_cv_vsoe_calculation», он имеет ошибку и говорит об ошибке синтаксиса - person Jess Anastasio; 05.08.2014

Можете ли вы предоставить нам снимок экрана с настройками вашей записи скрипта?

Кроме того, поскольку вы используете сценарий на стороне клиента, вам не нужно использовать событие pageInit для добавления пользовательской кнопки.

Существует вложенная вкладка «Кнопки» на вкладке «Сценарии», когда вы создаете запись сценария в NetSuite. Эта вложенная вкладка находится рядом с вложенной вкладкой «Библиотеки».

Здесь есть два столбца: «Ярлык» и «Функция».

Итак, в вашем случае вы можете просто указать «Проверить VSOE» в поле «Метка» и vsoeValidate в поле «Функция».

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

person Rusty Shackles    schedule 04.08.2014
comment
загрузил скриншоты записи скрипта. Я собираюсь возиться с созданием кнопки через запись, я понятия не имел, что смогу это сделать! - person Jess Anastasio; 05.08.2014
comment
Поэтому я добавил кнопку, которая появилась! тем не менее, когда страница загружается, я получаю исключение referenceerror validateVSOE не определено. Я предполагаю, что это потому, что у меня нет параметров? Я не уверен, что передать в качестве параметра. - person Jess Anastasio; 05.08.2014
comment
Вы сказали, что это функция validateVSOE, но имя функции vsoeValidate. - person erictgrubaugh; 05.08.2014
comment
к сожалению, это была опечатка с моей стороны, у меня есть это для кнопки vsoeValidate ... так что все, что у меня есть для записи сценария, - это кнопка, которая запускает vsoeValidate при нажатии, ничего в других функциональных полях. когда я нажимаю кнопку, он говорит мне, что теперь typeerror undefined не является функцией, и я понятия не имею, что делать - person Jess Anastasio; 05.08.2014
comment
Эта часть nlapiGetFieldValue('custbody_cv_vsoe_bucket.custrecord_cv_vsoe_maintenance_rate') мне не подходит. nlapiGetFieldValue ожидает идентификатор поля, но «custbody_cv_vsoe_bucket.custrecord_cv_vsoe_maintenance_rate» не выглядит как допустимый идентификатор поля. Это похоже на объединение, которое невозможно с помощью nlapiGetFieldValue. - person Rusty Shackles; 06.08.2014