如何使用search.lookupFields()进行联合查找?

时间:2019-05-06 15:39:11

标签: netsuite suitescript2.0

我正在尝试获取有关某物料的一些信息,包括该物料的子公司徽标,这自然需要将该物料加入子公司。

search.lookupFields的文档说:

  

您可以通过以下语法通过此方法使用联合字段查找:

join_id.field_name 

因此,我适当地请求了我想要的字段,包括在subsidiary上的联接:

require(['N/search'], function(search) {
    var item = search.lookupFields({
        type: search.Type.ITEM,
        id: 2086,
        columns: ['itemid', 'displayname', 'subsidiary.logo'],
    });
    log.debug(item);
});

itemiddisplayname很好,但是当我尝试加入另一条记录时出现此错误:

{
  "type":"error.SuiteScriptError",
  "name":"SSS_INVALID_SRCH_COLUMN_JOIN",
  "message":"An nlobjSearchColumn contains an invalid column join ID, or is not in proper syntax: logo.",
  "stack":["doLookupFields(N/search/searchUtil.js)","<anonymous>(adhoc$-1$debugger.user:2)","<anonymous>(adhoc$-1$debugger.user:1)"],
  "cause":{
    "type":"internal error",
    "code":"SSS_INVALID_SRCH_COLUMN_JOIN",
    "details":"An nlobjSearchColumn contains an invalid column join ID, or is not in proper syntax: logo.",
    "userEvent":null,
    "stackTrace":["doLookupFields(N/search/searchUtil.js)","<anonymous>(adhoc$-1$debugger.user:2)","<anonymous>(adhoc$-1$debugger.user:1)"],
    "notifyOff":false
  },
  "id":"",
  "notifyOff":false,
  "userFacing":false
}

无论我尝试加入哪个记录和字段,这似乎都会发生。我想念什么?

5 个答案:

答案 0 :(得分:2)

尽管您可以从多选字段返回结果,但是您不能加入由多选字段(项目记录上的辅助字段是)的记录所引用的字段。另外,您不能在子记录中搜索徽标字段(未在NetSuite记录浏览器中的“子公司”下的“搜索”列中列出)。

这意味着您必须加载子公司记录才能获得徽标字段。换句话说:

require(['N/record', 'N/search'], function(record, search) {
    var item = search.lookupFields({
        type: search.Type.ITEM,
        id: 2086,
        columns: ['itemid', 'displayname', 'subsidiary'],
    });
    var subID = item.subsidiary[0].value; //internal id of *first* subsidiary
    var subRec = record.load({
        type: record.Type.SUBSIDIARY,
        id: subID
    });
    var logo = subRec.getText('logo'); //gets the file name - use getValue to get its ID instead
});

请注意,如果在项目上设置了多个子公司,则只会获取第一个子公司的值。如果需要,您可以遍历item.subsidiary结果来处理多个子公司的值。

答案 1 :(得分:1)

我相信您无法从lookupfield访问辅助记录,您应该进行适当的搜索。

https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2018_2/script/record/item.html

enter image description here

答案 2 :(得分:1)

您只能连接到“项目”搜索对象中允许的表。尝试在用户界面的“搜索结果”标签中查找“子公司...”。不在那里使用架构浏览器确定哪些字段和联接可用。

您无法像任何常规SQL搜索一样想到NetSuite搜索。您必须知道可以通过搜索对象使用哪些字段和哪些连接。

答案 3 :(得分:1)

正如人们所提到的,子公司不是项目记录中可用的联接字段,实现您要执行的操作的一种方法是:

  1. 进行查询以获取属于所需物料的子公司的内部ID。
  2. 然后进行查找以获取属于先前子公司的徽标图像(文件柜图像)的内部ID。
  3. 再次查找/加载图像文件以获得图像/徽标的URL

您可以尝试将上述步骤合并到一个保存的搜索中,但是我认为您可能需要加载图像文件以获取URL。

答案 4 :(得分:0)

这不会回答您的问题,但是将来可能会有所帮助。记录浏览器显示了您可以搜索和加入的所有内容,列和过滤器以及字段ID。建立搜索时非常有用。

NetSuite Records Browser - 2018.2