SuiteScript 2.x N/search模块isdropshipitem查询恒返回false问题
SuiteScript 2.x查询装配物料字段返回值异常问题
问题现象
在对装配项(assembly item)记录执行关联成员/组件物料的查询操作时,使用SuiteScript 2.x的N/search模块获取结果出现如下异常:
- 「Is Drop Ship(是否直运)」对应字段
isdropshipitem的返回值始终为false - 成员物料上的两个自定义复选框字段返回值完全正常
后续使用N/query模块开展测试时,直运字段可正常返回正确值,但最初搭建完带关联逻辑的完整query执行时,成员物料上的自定义复选框字段又始终返回false。
测试代码
以下是简化后的测试代码(仅省略结果处理逻辑、对自定义复选框字段做了重命名处理),依次包含N/search实现、N/query实现:
require(['N/query', 'N/search'], (query, search) => { let itemList = [ /* 物料记录内部ID列表 */]; // N/search 查询逻辑 let itemFilt = [ ["internalid","anyof",itemList] ], itemCols = [ search.createColumn({ name : "itemid" }) , search.createColumn({ name : "isdropshipitem" }) // 该字段返回值始终为false , search.createColumn({ name : "memberitem" }) , search.createColumn({ name : "memberquantity" }) , search.createColumn({ name : "custitem_checkbox_1" , join : "memberitem" }) // 该字段返回值始终正常 , search.createColumn({ name : "custitem_checkbox_2" , join : "memberitem" }) // 该字段返回值始终正常 ]; let itemResults = search.create({ type : "assemblyitem" , filters : itemFilt , columns : itemCols }).run().getRange({ start : 0 , end : 1000 }); itemResults.forEach(res => { // 此处返回值恒为false log.audit({ title : "直运复选框字段值" , details : res.getValue({ name : "isdropshipitem" }) }); }); /////////////////////// /////////////////////// /////////////////////// // N/query 查询逻辑(该模块问题已解决,无需关注) let compQuery = query.create({ type : query.Type.ITEM }); let filtOne = compQuery.createCondition({ fieldId : "id" , operator : query.Operator.ANY_OF , values : itemList }); compQuery.condition = compQuery.and(filtOne); let memberJoin = compQuery.joinFrom({ fieldId : "item" // , source : "itemmember" // 错误关联方式 , source : "member" // 正确关联方式 }); let memberItemJoin = memberJoin.joinTo({ fieldId : "item" , target : "item" }); compQuery.columns = [ compQuery.createColumn({ fieldId : "id" }) , compQuery.createColumn({ fieldId : "itemid" }) , compQuery.createColumn({ // 该字段返回值始终正常 fieldId : "isdropshipitem" }) , memberJoin.createColumn({ fieldId : "id" , alias : "memberitem.id" }) , memberJoin.createColumn({ fieldId : "quantity" , alias : "memberitem.quantity" }) , memberItemJoin.createColumn({ fieldId : "itemid" , alias : "memberitem.itemid" }) , memberItemJoin.createColumn({ // 该字段曾返回值始终为false fieldId : "custitem_checkbox_1" , alias : "memberitem.custitem_checkbox_1" }) , memberItemJoin.createColumn({ // 该字段曾返回值始终为false fieldId : "custitem_checkbox_2" , alias : "memberitem.custitem_checkbox_2" }) ]; let compResults = compQuery.run({ }).asMappedResults(); }
排查进展
- 经定位,N/query模块的问题源于列关联配置错误:需要关联到
member而非itemmember,修正后query模块中组件物料的字段取值已恢复正常,该部分问题无需再关注。 - 目前仍未明确N/search模块下
isdropshipitem复选框字段始终返回false的根因。当前临时方案是执行两次独立查询获取全量正确数据,该方案存在明显优化空间。 - 代码中已通过注释明确标记出search模块返回结果异常的具体位置。
内容的提问来源于stack exchange,提问作者Michael McCauley
相关产品推荐
相关产品推荐

