我正在尝试在服务器端编写一个脚本,将值从行项目字段复制到标题字段。奇怪的是,当我编辑记录时,脚本可以工作,但是当我创建新记录并测试脚本时,我收到 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
});
}
}
我怀疑错误的值是项目/作业记录的 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
});
}
}
希望有帮助