Как мне сделать поиск с помощью search.lookupFields ()? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь получить некоторую информацию об объекте, включая логотип дочерней компании, что, естественно, требует присоединения элемента к дочерней компании.

Документация для 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);
});

itemid и displayname в порядке, но когда я пытаюсь присоединиться к другой записи, я получаю эту ошибку:

{
  "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 ]

2 голосов
/ 07 мая 2019

Хотя вы можете возвращать результаты из полей множественного выбора, вы не можете присоединиться к полям в записях, на которые ссылаются поля множественного выбора (что является вспомогательным полем в записи элемента).Кроме того, вы не можете выполнять поиск в поле логотипа в дочерней записи (не указано в столбцах поиска в разделе «Дочернее предприятие» в браузере записей 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 голос
/ 07 мая 2019

Как уже упоминалось, дочерняя компания не является полем объединения, доступным из записи элемента, один из способов добиться того, что вы пытаетесь сделать, это:

  1. Выполните поиск, чтобы получить внутренний идентификатор дочерней компании, принадлежащей нужному элементу.
  2. Затем выполните поиск, чтобы получить внутренний идентификатор изображения логотипа (изображение картотеки), принадлежащего предыдущей дочерней компании.
  3. Сделайте еще один поиск / загрузите файл изображения, чтобы получить URL изображения / логотипа

Вы можете попытаться объединить вышеуказанные шаги в одном сохраненном поиске, но я думаю, что вам может понадобиться загрузить файл изображения, чтобы получить URL.

1 голос
/ 06 мая 2019

Вы можете присоединиться только к таблицам, разрешенным в объекте поиска Предмета. Попробуйте найти «Дочернее ...» на вкладке «Результаты поиска» в пользовательском интерфейсе. Это не там. Используйте Браузер схемы, чтобы определить, какие поля и объединения доступны.

Вы не можете думать о поиске NetSuite как о обычном поиске SQL. Вы должны знать, какие поля и какие объединения можно использовать с помощью объекта поиска.

1 голос
/ 06 мая 2019

Я полагаю, что вы не можете получить доступ к вспомогательной записи из поля поиска, вам следует выполнить правильный поиск.

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

enter image description here

0 голосов
/ 07 мая 2019

Это не ответит на ваш вопрос, но может помочь в будущем. Браузер записей показывает все, что вы можете искать и объединять, столбцы и фильтры, а также идентификаторы полей. Очень полезно при построении поисков.

Браузер записей NetSuite - 2018,2

...