Я пишу сохраненный поиск в Netsuite, который требует вывода следующего:
Вместо просто списка выбранных значений из множественного выбора мне нужно вывести полный список и добавить к тем значениям, которые не выбраны, знак минус (-).
Вариант использования этого заключается в отправке этой информации в систему управления каналами, поэтому, если элементы не выбраны при множественном выборе, а не вообще не отображаются в списке, они должны быть -marketplace_name (например, готовая строка будет выглядеть следующим образом:
«Торговая площадка Amazon AU, -Bunnings, -Catch»
По сути, это означает:
Я хотел бы спросить, знает ли кто-нибудь, как получить список всех значений, которые не были выбраны, а не те, которые (поведение по умолчанию) входят в список с множественным выбором, или, альтернативно, как получить список всех значений, выбранных или нет?
Формула, которую я использую в настоящее время, представляет собой простое поле формулы (текст) для получения фактически выбранных значений следующим образом:
{custitem_pim_enabled_marketplaces_aus}
Ниже приведен скриншот того, чего я пытаюсь достичь:
подробнее, чего я пытаюсь достичь
Большое спасибо и, надеюсь, есть какой-то способ получить этот список, просто не прибегая к разбивке строк с помощью SUBSTR() и т. д.
Учитывая, что в настоящее время у меня есть только список «выбранных» элементов при множественном выборе, до сих пор я пытался сделать что-то похожее на следующее, хотя, по сути, я могу циклически перемещаться только по списку выбранных элементов, не полный список предметов, эта стратегия не сработает.
CASE WHEN {custitem_pim_enabled_marketplaces_aus} NOT LIKE ‘%Amazon AU Marketplace%’ THEN ‘-Amazon AU Marketplace’ ELSE END
Любые идеи были бы хорошы.
С уважением,
христианин
Если вы заранее знаете полный список возможных значений и его размер можно контролировать, вы можете указать этот список и использовать 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 лет.
Да, я тестировал с обязательным полем, поэтому пропустил это (ни одно пустое). Чтобы исправить это, можно легко исправить это, заключив его в CASE
(я отредактирую его в ответе). Вероятно, есть более элегантный способ справиться с этим в регулярном выражении, но сейчас мне уже слишком поздно работать :)
Спасибо за это, и в конце концов я сделал именно это. Теперь он успешно внедрен в производство, и флажки управляют другим приложением для включения и выключения торговых площадок, поэтому я бесконечно благодарен за вашу помощь!
Это дополнение к блестящему ответу @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();
)
Пожалуйста, отредактируйте вопрос, включив в него минимальный воспроизводимый пример с кодом, который вы используете для получения списка с множественным выбором (и полного списка значений) и вашей попытки решить проблему. Кроме того, если проблема не связана напрямую с базой данных Oracle, удалите тег [oracle] (так как это относится к проблемам с базой данных Oracle, а не к другим продуктам, принадлежащим корпорации Oracle).