【问题标题】:How do I do a joined lookup with search.lookupFields()?如何使用 search.lookupFields() 进行联合查找?
【发布时间】:2019-05-06 15:39:10
【问题描述】:

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

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
}

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

【问题讨论】:

    标签: netsuite suitescript2.0


    【解决方案1】:

    虽然您可以从多选字段返回结果,但您不能连接到多选字段引用的记录上的字段(项目记录上的子字段是)。此外,您无法搜索子公司记录上的徽标字段(未列在 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 结果以处理多个子公司的值。

    【讨论】:

    • 谢谢,这正是我需要的!
    【解决方案2】:

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

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

    【讨论】:

    • “进行适当的搜索”是什么意思?好像那里也没有子公司?
    • @Wolfgang 我的意思是,运行 search.create 而不是查找。文档:system.netsuite.com/app/help/…
    • 但是子公司没有显示在您的表格中,因为我可以加入搜索?
    • 进行两次搜索,加载您所有子公司的正确数据和您的项目,然后为您的每个项目找到正确的子公司,这对您有意义吗?
    【解决方案3】:

    您只能加入项目搜索对象中允许的表。尝试在 UI 的“搜索结果”选项卡中查找“子公司...”。它不在那里。使用模式浏览器确定可用的字段和连接。

    您无法将 NetSuite 搜索视为任何常规 SQL 搜索。您必须了解可以通过搜索对象使用哪些字段和哪些连接。

    【讨论】:

    • Martin 的模式浏览器屏幕截图说明了我的观点。
    【解决方案4】:

    正如人们所提到的,子公司不是项目记录中可用的连接字段,实现您想要做的事情的一种方法是:

    1. 进行查找以获取属于所需项目的子公司的内部 ID。
    2. 然后进行查找,获取属于上一个子公司的标识图像(文件柜图像)的内部 id。
    3. 再次查找/加载图像文件以获取图像/徽标的 URL

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

    【讨论】:

      【解决方案5】:

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

      NetSuite Records Browser - 2018.2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-16
        • 2012-07-28
        • 1970-01-01
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多