我目前正在尝试构建一个RESTlet脚本,它将每天运行,将新的工作订单数据从NetSuite同步到另一个web应用程序(郁金香)以供生产。我试图在工作订单中获取组装项的itemid,以便在郁金香的数据表中找到它的等效项。
目前,我可以以字符串的形式从工作顺序输出项目的记录,但是我发现,首先,这个脚本为每个工作顺序输出6次,为组装项的每个组件输出一个,另外,即使我得到了正确的一个,我也不知道如何利用脚本中的item记录ID输出来从项目记录中查找项目ID。
如果我试图使用nlapiSearchRecord()
,然后通过itemid查找项记录,以便能够提取正确的数据,则始终会收到空返回。
查看执行日志,我收到以下错误:
Filter expecting numeric value was removed, as non-numeric value 'nlobjSearchColumn(item, null, null, type=select)' was provided.
我查阅了google和1.0 API文档,试图找到从子记录中获取值的方法,但我还是被困住了。
下面是脚本的当前版本,我将使用该脚本提取tranid、状态和组装项ID:
function getWOSoftLock() {
var dataoutput = nlapiSearchRecord(
'workorder',
null,
new nlobjSearchFilter('status', null, 'is', 'WorkOrd:B'),
[
new nlobjSearchColumn('tranid'),
new nlobjSearchColumn('status'),
new nlobjSearchColumn('item')
]
);
if(!dataoutput) {
nlapiLogExecution('AUDIT', 'No released work orders');
return [];
}
var mainreturn = dataoutput.map(function(res){
return {
tranid:res.getValue('tranid'),
status:res.getValue('status'),
item:res.getValue('item')
};
});
return mainreturn;
}
有人能指点我在搜索时如何从“item”字段中提取子记录数据吗?如果这是个愚蠢的问题,我很抱歉,我对这个问题并不熟悉,我想弄清楚我的头发。
发布于 2022-07-07 08:07:36
此脚本为每个工作顺序输出6次
为Main Line = Yes添加一个筛选器,以便只返回标头信息以避免出现这种情况。这将为每条记录提供一行,只显示组装项,并过滤出组件行。
我不知道如何利用脚本中的item记录ID输出来从item记录中查找itemid。
您可以通过简单地使用res.getText('item')
而不是res.getValue('item')
来实现这一点。通常,在搜索中返回的任何select (list/record)字段都有可用的getValue()
和getText()
方法。getValue()
将返回内部id,getText()
将返回相同字段的显示值。
发布于 2022-07-06 11:50:55
好吧,所以我想出了一个在我的情况下很有效的解决方案。
由于我能够使用库存项目的NetSuite记录ID来查找它,而且我知道如果已经加载了该记录,我可以将该项目作为“组装项”访问,所以我创建了一个for循环,它在搜索中找到的每个工作顺序中运行,加载它,并提取我需要的数据。
如果这对其他人有帮助,下面是早期的实现:
function getWOSoftLock() {
var dataoutput = nlapiSearchRecord(
'workorder',
null,
new nlobjSearchFilter('status', null, 'is', 'WorkOrd:B'),
[
new nlobjSearchColumn('tranid'),
new nlobjSearchColumn('status'),
new nlobjSearchColumn('item'),
]
);
if(!dataoutput) {
nlapiLogExecution('AUDIT', 'No released work orders');
return [];
}
for (var i = 0; i < dataoutput.length; i++)
{
var woid = dataoutput[i].getId();
var worecord = nlapiLoadRecord('workorder', woid);
var assemblyid = worecord.getFieldValue('assemblyitem');
var parsedoutput = {"filID":assemblyid};
}
return parsedoutput;
}
我必须解析我想要提取的所有数据,并将其作为数组输出,但这对我来说是有效的。
https://stackoverflow.com/questions/72876786
复制