SuiteScipt 2.x 用户事件脚本 INVALID_API_USAGE

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

我正在尝试在服务器端编写一个脚本,将值从行项目字段复制到标题字段。奇怪的是,当我编辑记录时,脚本可以工作,但是当我创建新记录并测试脚本时,我收到 INVALID_API_USAGE 错误,并显示此消息“无效的 API 使用。您必须使用 getSublistValue 返回使用 setSublistValue 设置的值”。此外,我尝试从 getSublistText() 函数切换到 getSublistValue() 函数,该函数复制了错误的值,但没有收到错误。我最初尝试使用 record.load 使用记录模块封装记录,但在获取记录 Id 时遇到了问题,我假设这是因为我正在使用 beforsubmit 函数,因此尚未生成 id,但aftersubmit 函数也有类似的问题。有人可以帮忙吗?

const beforeSubmit = (scriptContext) => {
        try{
            var count = scriptContext.newRecord.getLineCount({
                sublistId: 'item'
            })
            for(var i = 0; i < count; i++){ 
                if(scriptContext.newRecord.getSublistText({sublistId: 'item', fieldId: 'job', line: i}) != ''){
                    var jobNumber = scriptContext.newRecord.getSublistText({
                        sublistId:'item',
                        fieldId: 'job',
                        line: i
                    });
                    i = count
                }
            }
            scriptContext.newRecord.setText({
                fieldId: 'custbody_job_number',
                value: jobNumber
                
            });
        }
        catch(e){
            log.error ({ 
                title: e.name,
                details: e.message
            }); 
        }
        }
suitescript suitescript2.0
1个回答
0
投票

我怀疑错误的值是项目/作业记录的 id,而您正在尝试获取该子列表字段的文本/名称?我将继续这个假设。

我还要注意,如果字段 custbody_job_number 是一个自由文本字段,您仍然可以使用 setValue/getValue,当字段类型为列表/记录时,两者都可以像 getText 方法一样工作(或者,这是我的理解)它的用法,很高兴得到纠正)。

我以前遇到过此类错误,因此通常避免使用 getText 或 getSublistText。

Will Charbonneau 在这里很好地回答了此错误的原因。 Netsuite API 使用无效。您必须使用 getValue 来返回使用 setValue 设置的值

可以在此处找到相关帮助(Will 也有链接) Record.getText(选项)

我解决这个问题的方法是动态查找值。您可能需要稍微更改一下我使用的查询,但原理保持不变。

我稍微修改了它的形状,并包括了 SuiteQL 的使用,所以你需要 N/query 模块

const beforeSubmit = (scriptContext) =>
{
    try
    {
        var count = scriptContext.newRecord.getLineCount({
            sublistId: 'item'
        });
        
        for (var i = 0; i < count; i++)
        {
            if (scriptContext.newRecord.getSublistText({ sublistId: 'item', fieldId: 'job', line: i }) != '')
            {
                var jobNumber = scriptContext.newRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'job',
                    line: i
                });
                let jobResult = SuiteQL.runQuery({
                    query: 'SELECT companyname FROM job WHERE id = ?',
                    params:[jobNumber]
                });

                if(jobResult.length > 0)
                {
                    scriptContext.newRecord.setText({
                        fieldId: 'custbody_job_number',
                        value: jobResult[0].companyname
                    });
                    break;
                }
            }
        }
    }
    catch (e)
    {
        log.error({
            title: e.name,
            details: e.message
        });
    }
}

希望有帮助

© www.soinside.com 2019 - 2024. All rights reserved.