Netsuite搜索过滤条件不起作用

时间:2016-09-08 07:12:00

标签: javascript netsuite suitescript

我正在进行Netsuite搜索,但过滤器实际上没有进行任何过滤? " budgetimport"对象有314个项目,无论我如何尝试过滤搜索,每次都会返回所有314个项目。

我错过了什么/做错了什么?

提前致谢。

P.S。虽然我在这里:最好的"最好的"如何获得“金额”的价值'搜索栏? (应该只有一个项目从搜索中返回,但如果还有更多?)

//add search columns
var columns = [];
columns.push(new nlobjSearchColumn('year'));
columns.push(new nlobjSearchColumn('department'));
columns.push(new nlobjSearchColumn('account'));
columns.push(new nlobjSearchColumn('amount'));

//add search filters
var filters = [];
filters.push(new nlobjSearchFilter('year', null, 'anyof', 'FY 2007', null));
filters.push(new nlobjSearchFilter('department', null, 'anyof', 'Bass', null));
filters.push(new nlobjSearchFilter('account', null, 'anyof', 'Administration Expenses', null));

//execute the search
var search = nlapiSearchRecord('budgetimport', null, filters, columns);

6 个答案:

答案 0 :(得分:2)

经过大量的游戏和挫折后,问题在于NetSuite中的“非标准”对象,因此“正常”的处理方法不适用。

要过滤budgetimport对象,您需要使用“formulatext”并设置过滤器,例如。

//add search filters
var filters = [];
filters.push(new nlobjSearchFilter('formulatext', null, 'is', fiscalyear).setFormula('{Year}')); //NOTE : Capital 'Y' in Year
filters.push(new nlobjSearchFilter('formulatext', null, 'is', costcentre).setFormula('{department}'));

答案 1 :(得分:1)

尝试将anyof运算符与内部ID配对。

示例:

filters.push(new nlobjSearchFilter('year', null, 'anyof', *internal id of 'FY 2007'*, null));

答案 2 :(得分:0)

看起来问题与该记录类型有关。我在记录浏览器中找不到任何关于它的内容,所以我不确定允许的过滤器是什么。问题是那些字段没有过滤。如果为innerid添加过滤器并输入其中一个记录的internaid,它将进行过滤(见下文)。我建议向NetSuite提交一个案例,因为这个记录似乎有缺陷。?

filters.push(new nlobjSearchFilter('internalid',null,'is','12345'));

答案 3 :(得分:0)

我不认为此记录类型在NetSuite中获得完整的脚本/已保存搜索支持。

我在NetSuite调试器的脚本中添加了以下行以保存已保存的搜索。当我尝试编辑它时,这部分可以解决错误。很可能不是完全支持的记录类型。

//var search = nlapiSearchRecord('budgetimport', null, filters, columns);
var search = nlapiCreateSearch( 'budgetimport', filters, columns );
var searchId = search.saveSearch('BudgetImport_SEARCH', 'customsearch_budgetimport_search');

如果NetSuite给您答案,请及时通知我们。

答案 4 :(得分:0)

您的过滤器无法正常工作的原因可能是以下原因:

  • 您使用的是文本作为过滤值而不是内部ID
  • 当您使用anyof operator
  • 时,您没有传递数组
  • 此外,不需要将null作为最后一个参数传递

答案 5 :(得分:0)

不要在这里看到这个,但是当我前几天处理我的一个脚本时遇到了这个问题:

//add search filters
var filters = [];
filters.push(new nlobjSearchFilter('year', null, 'anyof', 'FY 2007', null));
filters.push(new nlobjSearchFilter('department', null, 'anyof', 'Bass', null));
filters.push(new nlobjSearchFilter('account', null, 'anyof', 'Administration Expenses', null));

如果所有这些字段都是来自列表的选择字段(自定义或非自定义),那么您需要通过内部ID 引用字段值(我说"需要"因为这是我为了过滤价格而必须做的事情。)

因此,不要使用" FY 2007",而是在其父列表的上下文中查找其内部ID。

要查找您要尝试过滤的值的内部ID,您可以创建一个已保存的搜索,列出该值及其内部ID,这可以从选择字段的任何父记录中完成。 (这是我必须使用的方法,以便找到价格水平的内部ID,因为我在我们的系统中的任何其他地方都找不到)。

如果它是自定义列表,请导航到您的自定义列表页面,找到列表,并标识您要尝试过滤的值的内部ID。