首页 文章

在Chrome异常中调试脚本Netsuite suitescript

提问于
浏览
0

因此,我尝试在netsuite中的“销售订单”表单中添加一个按钮,根据您在先前字段中输入的内容验证某些字段 . 我在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不是一个函数 .

我真的不知道从哪里开始,是因为vsoeValidate内部的逻辑不对,还是我使用了错误的函数类型?任何帮助都会非常感谢你!

更新:这是我的脚本记录的屏幕截图!

enter image description here

enter image description here

3 回答

  • 0

    您能为我们提供脚本记录设置的屏幕截图吗?

    此外,由于您使用的是客户端脚本,因此无需使用pageInit事件来添加自定义按钮 .

    在NetSuite中创建脚本记录时,在“脚本”选项卡下有一个“按钮”子选项卡 . 此子选项卡位于“库”子选项卡旁边 .

    这里有两列,'标签'和'功能' .

    因此,在您的情况下,您可以在“标签”字段中输入“验证VSOE”,在“功能”字段中输入vsoeValidate .

    请注意,如果您这样做,只有在创建或编辑记录时才会显示该按钮 .

  • 0

    尝试将函数名称作为字符串传递,即

    form.addButton('custpage_validatevsoe', 'Validate VSOE', 'vsoeValidate');
    
  • 0

    您提到将vsoeValidate设置为validateField函数 . 您是否希望在用户单击按钮或触发NetSuite的valdiateField事件时运行此函数(在字段更改时,在存储值之前)?

    如果你想在NetSuite的validateField事件上运行它,那么该函数必须返回 truefalse ;它无法归还无效 . 现在,按照你的逻辑,你有:

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

    if (bucket = 'x') 是赋值操作,而不是相等性检查 . 此赋值操作将返回'x',这是一个真值,因此您的代码将输入if-block . 然后你返回void( undefined ),所以我的猜测是NetSuite试图对你的函数返回的结果做一些事情,但不能因为它返回undefined .

    validateField函数还会传递一个参数,该参数提供要验证的字段的ID .

    您还需要在各个点注入一些控制台日志记录,以便您可以找出脚本失败的位置,而不是仅仅想要读取语法 .

相关问题