2016-06-22 45 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

相關問題