Как просмотреть список всех значений множественного выбора в сохраненном поиске Netsuite и получить список значений, которые не были выбраны?

Я пишу сохраненный поиск в Netsuite, который требует вывода следующего:

Вместо просто списка выбранных значений из множественного выбора мне нужно вывести полный список и добавить к тем значениям, которые не выбраны, знак минус (-).

Вариант использования этого заключается в отправке этой информации в систему управления каналами, поэтому, если элементы не выбраны при множественном выборе, а не вообще не отображаются в списке, они должны быть -marketplace_name (например, готовая строка будет выглядеть следующим образом:

«Торговая площадка Amazon AU, -Bunnings, -Catch»

По сути, это означает:

  1. Листинг на торговой площадке Amazon AU
  2. Удалить из Баннингса
  3. Удалить из улова

Я хотел бы спросить, знает ли кто-нибудь, как получить список всех значений, которые не были выбраны, а не те, которые (поведение по умолчанию) входят в список с множественным выбором, или, альтернативно, как получить список всех значений, выбранных или нет?

Формула, которую я использую в настоящее время, представляет собой простое поле формулы (текст) для получения фактически выбранных значений следующим образом:

{custitem_pim_enabled_marketplaces_aus}

Ниже приведен скриншот того, чего я пытаюсь достичь:

подробнее, чего я пытаюсь достичь

Большое спасибо и, надеюсь, есть какой-то способ получить этот список, просто не прибегая к разбивке строк с помощью SUBSTR() и т. д.

Учитывая, что в настоящее время у меня есть только список «выбранных» элементов при множественном выборе, до сих пор я пытался сделать что-то похожее на следующее, хотя, по сути, я могу циклически перемещаться только по списку выбранных элементов, не полный список предметов, эта стратегия не сработает.

CASE WHEN {custitem_pim_enabled_marketplaces_aus} NOT LIKE ‘%Amazon AU Marketplace%’ THEN ‘-Amazon AU Marketplace’ ELSE END

Любые идеи были бы хорошы.

С уважением,

христианин

Пожалуйста, отредактируйте вопрос, включив в него минимальный воспроизводимый пример с кодом, который вы используете для получения списка с множественным выбором (и полного списка значений) и вашей попытки решить проблему. Кроме того, если проблема не связана напрямую с базой данных Oracle, удалите тег [oracle] (так как это относится к проблемам с базой данных Oracle, а не к другим продуктам, принадлежащим корпорации Oracle).

MT0 25.04.2024 10:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы заранее знаете полный список возможных значений и его размер можно контролировать, вы можете указать этот список и использовать REPLACE и REGEXP_REPLACE, чтобы изменить способ его отображения. В следующем примере я начинаю с полного списка с добавленными дефисами (1). Затем я использую REPLACE для создания шаблона регулярного выражения (он заменяет запятые, которые NetSuite возвращает, на каналы (|), чтобы обеспечить «чередование» между различными возможными значениями (2). Он также заключает шаблон в круглые скобки, чтобы обеспечить обратную ссылку \1).

Если совпадение найдено, я заменяю его тем же значением, но с добавлением другого дефиса (3). Затем я заменяю все двойные дефисы пустой строкой (4).

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

REPLACE(                                             --4
  REGEXP_REPLACE(                                    --3
    '-Friday,-Monday,-Thursday,-Tuesday,-Wednesday', --1 (replace with your values)
    '(' || REPLACE(                                  --2
      {custrecord_sg_day_of_the_week},               --2 (replace with your custom field)
      ',', '|'                                       --2
    ) || ')',                                        --2
    '-\1'                                            --3
  ), 
  '--',                                              --4
  ''                                                 --4
)

Обновлено: Чтобы обработать сценарий, когда в некоторых записях не выбрано значение для этого поля, вы можете использовать оператор CASE для проверки этого и просто вернуть исходную строку, содержащую все значения с добавленным дефисом:

CASE WHEN {custrecord_sg_day_of_the_week} IS NULL THEN '-Monday, -Tuesday, -Wednesday, -Thursday, -Friday' ELSE REPLACE(
  REGEXP_REPLACE(
    '-Monday, -Tuesday, -Wednesday, -Thursday, -Friday', 
    '(' || REPLACE(
      {custrecord_sg_day_of_the_week}, 
      ',', '|'
    ) || ')', 
    '-\1'
  ), 
  '--', 
  ''
) END

Это работает почти идеально, так что спасибо за это! Исключением является случай, когда в множественном выборе вообще ничего не выбрано, что приводит к появлению «-» между каждым символом результата, например: -,-e-B-a-y-,-F-r-u-u-g-o-,‌​-K-o-g-a-n-,-M-y-D-e‌​-a-l-,-W-e-s-t-f-i-e‌​-l-d- В случае, если ничего не выбрано, все они должны быть "-marketplacename ". Манипулирование регулярными выражениями и строками всегда было для меня проблемой, хотя я программирую уже 30 лет.

Christian Bannard 26.04.2024 02:34

Да, я тестировал с обязательным полем, поэтому пропустил это (ни одно пустое). Чтобы исправить это, можно легко исправить это, заключив его в CASE (я отредактирую его в ответе). Вероятно, есть более элегантный способ справиться с этим в регулярном выражении, но сейчас мне уже слишком поздно работать :)

Krypton 26.04.2024 05:29

Спасибо за это, и в конце концов я сделал именно это. Теперь он успешно внедрен в производство, и флажки управляют другим приложением для включения и выключения торговых площадок, поэтому я бесконечно благодарен за вашу помощь!

Christian Bannard 27.04.2024 09:18

Это дополнение к блестящему ответу @krypton.

Я часто создаю поиск в консоли, чтобы вы могли генерировать его даже для больших, несколько «неуправляемых» списков. У вас будет доступ к API поиска в любом окне просмотра или редактирования. Откройте какую-нибудь запись, щелкните правой кнопкой мыши и выберите «Проверить», чтобы открыть консоль.

require(['N/search'], search=>{
    // make the name string
    const names = search.create({
        type:'customrecord_listing_markets', //record or list name
        filters:['isinactive', 'is', 'F'], 
        columns: 'name'
    }).run().getRange({start:0, end:1000}).map(ref=>('-'+ ref.getValue({name:'name'}))).join(',');

   //make a search you can open in the UI
    search.create({
    type:'item',
    filter: [...],
    columns: [
       'itemid',
       `formulatext:REPLACE(                                             
  REGEXP_REPLACE(                                    
    '${names}', 
    '(' || REPLACE(                                  
      {custitem_pim_enabled_marketplaces_aus},               
      ',', '|'                                       
    ) || ')',                                        
    '-\1'                                            
  ), 
  '--',                                              
  ''                                                 
)`],
title:'Item Marketplaces'
    }).save();
)


Другие вопросы по теме