Netsuite 搜索过滤条件不起作用
Netsuite search filter conditions not working
我正在执行 Netsuite 搜索,但过滤器实际上没有进行任何过滤? "budgetimport" 对象中有 314 个项目,无论我如何尝试过滤搜索,每次都会返回所有 314 个项目。
我错过了什么/做错了什么?
提前致谢。
P.S。我在这里:"best" 从搜索中获取 'amount' 列中的值的方法是什么? (搜索返回的应该只有一项,如果有更多怎么办?)
//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);
问题似乎出在该记录类型上。我在记录浏览器中找不到任何关于它的信息,所以我不确定允许的过滤器是什么。问题是这些字段没有过滤。如果您为 internalid 添加过滤器并输入其中一条记录的 internaid,它将进行过滤(见下文)。我建议向 NetSuite 提交关于此的案例,因为它似乎是此记录的缺陷。?
filters.push(new nlobjSearchFilter('internalid',null,'is','12345'));
我认为此记录类型在 NetSuite 中没有得到完整的 scripting/savedsearch 支持。
我在 NetSuite 调试器的脚本中添加了以下行以保存已保存的搜索。这部分工作但是当我尝试编辑它时出错。很可能不是完全支持的记录类型。
//var search = nlapiSearchRecord('budgetimport', null, filters, columns);
var search = nlapiCreateSearch( 'budgetimport', filters, columns );
var searchId = search.saveSearch('BudgetImport_SEARCH', 'customsearch_budgetimport_search');
如果 NetSuite 给您答案,请随时通知我们。
您的过滤器不起作用的原因可能是以下原因:
- 您正在使用文本而不是内部 ID 作为过滤值
- 你在使用任何运算符时没有传递数组
- 此外,不需要将 null 作为最后一个参数传递
尝试将 anyof
运算符与内部 ID 配对。
示例:
filters.push(new nlobjSearchFilter('year', null, 'anyof', *internal id of 'FY 2007'*, null));
这里没有提到这个,但是前几天我在编写我的一个脚本时 运行 遇到了这个问题:
//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));
如果所有这些字段都是 select 来自列表(自定义或非自定义)的字段,那么您需要 通过内部 ID 引用字段值(我说 "need" 因为这是我必须做的,以便通过定价正确过滤)。
因此,不要使用 "FY 2007",而是在其父列表的上下文中找到其内部 ID。
要找到您尝试过滤的值的内部 ID,您可以创建一个已保存的搜索,列出该值及其内部 ID,这可以从 [=25= 的任何父记录中完成] 场地。 (这是我必须使用的一种方法,以便找到价格水平的内部 ID,因为我无法在我们系统的其他任何地方找到它)。
如果它是自定义列表,请导航至您的自定义列表页面,找到该列表,并确定您尝试作为过滤依据的值的内部 ID。
几经折腾,问题出在NetSuite中的"non-standard"对象,所以"normal"处事方法不适用。
要过滤 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}'));
我正在执行 Netsuite 搜索,但过滤器实际上没有进行任何过滤? "budgetimport" 对象中有 314 个项目,无论我如何尝试过滤搜索,每次都会返回所有 314 个项目。
我错过了什么/做错了什么?
提前致谢。
P.S。我在这里:"best" 从搜索中获取 'amount' 列中的值的方法是什么? (搜索返回的应该只有一项,如果有更多怎么办?)
//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);
问题似乎出在该记录类型上。我在记录浏览器中找不到任何关于它的信息,所以我不确定允许的过滤器是什么。问题是这些字段没有过滤。如果您为 internalid 添加过滤器并输入其中一条记录的 internaid,它将进行过滤(见下文)。我建议向 NetSuite 提交关于此的案例,因为它似乎是此记录的缺陷。?
filters.push(new nlobjSearchFilter('internalid',null,'is','12345'));
我认为此记录类型在 NetSuite 中没有得到完整的 scripting/savedsearch 支持。
我在 NetSuite 调试器的脚本中添加了以下行以保存已保存的搜索。这部分工作但是当我尝试编辑它时出错。很可能不是完全支持的记录类型。
//var search = nlapiSearchRecord('budgetimport', null, filters, columns);
var search = nlapiCreateSearch( 'budgetimport', filters, columns );
var searchId = search.saveSearch('BudgetImport_SEARCH', 'customsearch_budgetimport_search');
如果 NetSuite 给您答案,请随时通知我们。
您的过滤器不起作用的原因可能是以下原因:
- 您正在使用文本而不是内部 ID 作为过滤值
- 你在使用任何运算符时没有传递数组
- 此外,不需要将 null 作为最后一个参数传递
尝试将 anyof
运算符与内部 ID 配对。
示例:
filters.push(new nlobjSearchFilter('year', null, 'anyof', *internal id of 'FY 2007'*, null));
这里没有提到这个,但是前几天我在编写我的一个脚本时 运行 遇到了这个问题:
//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));
如果所有这些字段都是 select 来自列表(自定义或非自定义)的字段,那么您需要 通过内部 ID 引用字段值(我说 "need" 因为这是我必须做的,以便通过定价正确过滤)。
因此,不要使用 "FY 2007",而是在其父列表的上下文中找到其内部 ID。
要找到您尝试过滤的值的内部 ID,您可以创建一个已保存的搜索,列出该值及其内部 ID,这可以从 [=25= 的任何父记录中完成] 场地。 (这是我必须使用的一种方法,以便找到价格水平的内部 ID,因为我无法在我们系统的其他任何地方找到它)。
如果它是自定义列表,请导航至您的自定义列表页面,找到该列表,并确定您尝试作为过滤依据的值的内部 ID。
几经折腾,问题出在NetSuite中的"non-standard"对象,所以"normal"处事方法不适用。
要过滤 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}'));