簡體   English   中英

NetSuite中的腳本搜索無法正常工作

[英]Scripting search in NetSuite not working as expected

我在NetSuite中嘗試了一個搜索腳本,但我遇到的問題是,盡管我將訂單號放在了交易表搜索中,但搜索卻得到了多個結果。 如果我通過IU進行相同的搜索,我只會得到1個結果,這是正確的結果。

該腳本是

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運算符。

有什么線索我做錯了嗎?

提前致謝。

巴勃羅。

搜索交易時,您需要了解並使用mainline過濾器來調整所需的結果。 有關更多詳細說明,請參見此答案

不幸的是,我無法解釋為什么在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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM