我目前正在尝试构建一个RESTlet脚本,该脚本将每天运行以从NetSuite同步新的工作订单数据到另一个web应用程序(Tulip)用于生产。我正在尝试获取工作订单中组装项的itemid,以便我可以在Tulip中的数据表中找到它的等价物。
目前,我可以从工作订单中输出项目的记录作为字符串,但我发现,首先,这个脚本输出每个工作订单6次,一个用于装配项目的每个组件,另外,即使我得到正确的一个,我不确定如何利用脚本中的项目记录ID输出从项目记录中找到itemid。
如果我尝试使用nlapiSearchRecord()
然后通过itemid找到项目记录,以便我可以提取正确的数据,我总是收到一个空返回。
查看执行日志,我收到以下错误:
Filter expecting numeric value was removed, as non-numeric value 'nlobjSearchColumn(item, null, null, type=select)' was provided.
我已经看过谷歌和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;
}
有没有人能告诉我在做搜索时如何从"项目"字段拉子记录数据?如果这是一个愚蠢的问题,我很抱歉,我是新手,有点撕裂我的头发试图弄清楚它。
此脚本对每个工单输出6次
为Main Line = Yes添加一个过滤器,以便只返回标题信息以避免这种情况。这将为每个记录提供一行,仅显示组装项并过滤掉组件行。
我不确定如何利用脚本中的项目记录ID输出从项目记录中查找itemid。
你可以通过简单地用res.getText('item')
代替res.getValue('item')
来得到这个结果。通常,在搜索中返回的任何选择(列表/记录)字段都有getValue()
和getText()
方法可用。getValue()
将返回内部id,getText()
将返回同一字段的显示值。
好吧,我已经想到了一个解决方案,在我的情况下足够有效。
由于我能够利用NetSuite记录ID来查找库存项目,并且我知道如果记录已加载,我可以将该项目访问为'assemblyitem',因此我创建了一个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;
}
我将不得不解析我想要提取的所有数据并将其作为数组输出,但这对我来说是有效的。