2016-06-22 41 views
0

我在NetSuite中尝试了一个搜索脚本,但我遇到的问题是,尽管我在订单表搜索中放置了订单号,但搜索仍获得多个结果。如果我通过IU进行相同的搜索,我只会得到1个结果,这是正确的。NetSuite中的脚本搜索无法按预期方式工作

剧本是

var filters = new Array(); 

filters[0] = new nlobjSearchFilter('item', null, 'is', 'ITEM123'); 
filters[1] = new nlobjSearchFilter('type', null, 'is', 'SalesOrd'); 
filters[2] = new nlobjSearchFilter('companyname', 'customer', 'contains', 'CustomerName'); 
filters[3] = new nlobjSearchFilter('number', null, 'is', 'ORDER9887'); 


var columns = new Array(); 
columns[0] = new nlobjSearchColumn('item'); 
columns[1] = new nlobjSearchColumn('type'); 
columns[2] = new nlobjSearchColumn('name','item'); 
columns[3] = new nlobjSearchColumn('companyname','customer'); 
columns[4] = new nlobjSearchColumn('number'); 


var searchResults = nlapiSearchRecord('transaction', null, filters, columns); 
var values = 'TOTAL RESULTS: ' + searchResults.length; 
if(searchResults != null) 
{ 
    for(i = 0 ; i< searchResults.length ; i++) 
    { 
    values = values + '\r\nITEM ' + searchResults[i].getValue(columns[0]) + 
      '\r\nTYPE ' + searchResults[i].getValue(columns[1]) + 
      '\r\nITEM NAME ' + searchResults[i].getValue(columns[2]) + 
      '\r\nCOMPANY NAME ' + searchResults[i].getValue(columns[3]) + 
      '\r\nTRANSACTION NUMBER ' + searchResults[i].getValue(columns[4]); 
    } 
    alert(values); 
} 

所以也没有太大的意义对我来说,我们假设过滤器是含蓄与AND运营商。

有什么线索我做错了吗?

在此先感谢。

Pablo。

回答

2

在搜索交易时,您需要了解并使用mainline过滤器来调整所需的结果。有关更详细的解释,请参阅this answer

不幸的是,我无法解释为什么你在UI和脚本之间获得完全相同的标准的不同结果。我还需要查看UI搜索以排除故障。

您正确地提供以这种方式提供的搜索过滤器始终与AND运算符。您可以改为使用过滤器表达式来显式声明逻辑运算符。有关过滤器表达式的示例,请参阅标题为的NetSuite帮助文档。过滤搜索

使用过滤器表达式和主线过滤器,我可以写你的搜索类似:

// Filter expression syntax 
var filters = [ 
    ['item', 'is', 'ITEM123'], 'and', 
    ['type', 'is', 'SalesOrd'], 'and', 
    ['mainline', 'is', 'F'], 'and', // mainline=F gives me only line item results 
    ['customer.companyname', 'contains', 'CustomerName'], 'and', 
    ['number', 'is', 'ORDER9887'] 
]; 

var columns = [ 
    new nlobjSearchColumn('item'), 
    new nlobjSearchColumn('type'), 
    new nlobjSearchColumn('name','item'), 
    new nlobjSearchColumn('companyname','customer'), 
    new nlobjSearchColumn('number') 
]; 

// I always default my search results to [] to avoid the null check later 
var searchResults = (nlapiSearchRecord('transaction', null, filters, columns) || []); 

// Logging to console assuming client script, otherwise use nlapiLogExecution 
console.log('TOTAL RESULTS: ' + searchResults.length); 

// I prefer using Array.map or Array.forEach when iterating over arrays in SuiteScript 
var resultString = searchResults.map(
    function (result) { // Change each result to its String representation 
     return 'ITEM ' + result.getValue('item') + 
      '\r\nTYPE ' + result.getValue('type') + 
      '\r\nITEM NAME ' + result.getValue('name', 'item') + 
      '\r\nCOMPANY NAME ' + result.getValue('companyname','customer') + 
      '\r\nTRANSACTION NUMBER ' + result.getValue('number'); 
    } 
).join("\r\n"); // Join all of the result strings with a newline 

console.log(resultString); 
+0

Eric,你好我想你的变化,我得到了70笔,它应该,因为我们是把我应该只得到1订单号码。 是否还有其他要添加以滤除结果? – Pablo

+2

我怀疑搜索忽略了'['数字','是','ORDER9887']'。该条款应该是'['tranid','是','ORDER9887']'。 'number'是一个整数字段,所以如果你知道使用'['number','equalto','9887']' – bknights

+0

'的事务的基数,你可能还想添加'和['cogs', '是','F']' – bknights

相关问题