Suitescript 2.x 客户端脚本在 Firefox 中完美运行,但在 Google chrome 中停止运行

问题描述 投票:0回答:1

我使用 saveRecord 函数编写了一个简单的客户端脚本,将一些信息从标题值复制到对应的行项目字段。在 Firefox 上测试时,我得到了每个行项目字段的预期结果,其中填充了标题中的相应字段,但是,当我在 google chrome 上测试时,没有抛出错误,但脚本停止工作,导致值似乎被复制,但行却没有t 提交,因此数据消失。有时它根本不会保存并卡在搜索框(其中一个字段是选择字段)上,其中包含正确的数据,但末尾神秘地添加了斜线(/)。有谁知道解决方法吗

function saveRecord(scriptContext) {

        try{
            var context = scriptContext.currentRecord
            var ran = false;
            var classValue = context.getText({
                fieldId: 'class'
            })
            var jobNumber = context.getText({
                fieldId: 'custbody_job_number'
            })
            var count = context.getLineCount({
                sublistId: 'item'
            })
            if(context.getText({fieldId: 'custbody_job_number'}) != '' && context.getText({fieldId: 'class'}) != '' ){
                console.info('All fields have data prepare for transfer')
                for(var i = 0; i <= count; i++){ 
                    context.selectLine({
                        sublistId: 'item',
                        line: i
                    })
                    if(context.getCurrentSublistText({sublistId: 'item', fieldId: 'item'}) != ''){
                        context.setCurrentSublistText({
                            sublistId: 'item',
                            fieldId: 'class',
                            text: classValue
                        })
                        context.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'customer',
                            value: jobNumber
                        })
                        context.commitLine({ 
                            sublistId: 'item',
        
                        })
                    }   
                }
                ran = true
            }```
javascript netsuite suitescript
1个回答
0
投票

如果

setCurrentSublistValue
返回SS 2.1的Promise,那就太好了

您的代码的一个问题是您过度索引子列表:

for(var i = 0; i < count; i++){ //for 0 based indexes the last index is count - 1

然而,发生的情况是您在

customer
字段完成采购之前提交了该行。

你至少想做的是:

context.setCurrentSublistValue({
    sublistId: 'item',
    fieldId: 'customer',
    value: jobNumber,
    forceSyncSourcing: true // so don't start to commit until sourcing is complete
})

有时这还不够,我不得不采取一些措施,例如将子列表索引放入数组中,例如:

var itemLines = Array.from({length:count}, (_, i)=>i); // modern browsers

function runLines(){
    if(!itemLines.length) return;
    var nxt = itemLines.shift(); // or .pop()
    // do things
    context.commitLine({ 
        sublistId: 'item',
    });
    setTimeout(runLines, 300); // delay by experimentation. add some for daily variability
}
runLines();
© www.soinside.com 2019 - 2024. All rights reserved.