Удобный способ пропустить запущенный скрипт.

Сценарии сопоставления/уменьшения. Разве мы их не любим? Они выполняют сложные задачи обработки данных на больших наборах данных. Они разбивают большие наборы данных на более мелкие фрагменты для их параллельной обработки. Они являются решением многих проблем. Но как их остановить?

Много раз вы будете сталкиваться с ситуацией, когда конкретный Map/Reduce необходимо остановить как можно скорее, чтобы освободить очередь, перезапустить развертывание после некоторого обновления кода или свести к минимуму ущерб, причиняемый текущим запуском.

NetSuite позволяет мгновенно остановить сценарий Map/Reduce, но пока он еще не запущен. Вы также можете остановить выполнение развертывания, деактивировав запись скрипта. По моему опыту, для остановки развертывания может потребоваться от 5 до 25 минут. Не идеально.

Идея

Мне пришла в голову идея пропустить каждый этап сценария Map/Reduce, используя пользовательскую запись. Сценарий будет считывать значение этой записи в начале каждого этапа, чтобы определить, следует ли выполнять какую-либо логику. Пропуск всей логики не только значительно сократит время выполнения, но и предотвратит любые изменения данных учетной записи NetSuite.

Решение

Начните с определения новой пользовательской записи. Он должен иметь два настраиваемых поля:

  • 👉 Целое число
  • 👉 Флажок

Integer будет содержать внутренний идентификатор развертывания, на которое вы хотите повлиять. Флажок пометит запись как активную.

Примечание. NetSuite также позволяет выбирать поле «Развертывание скрипта», но, несмотря на все мои усилия, в этом поле не отображались фактические развертывания для выбора.

Следующий шаг включает в себя кодирование. Нам нужно создать функцию и поместить ее в любой скрипт, который нужно пропустить. Для запуска требуются модули «N/runtime» и «N/search». Цель функции — найти экземпляр пользовательской записи, где значение целочисленного поля соответствует идентификатору запущенного в данный момент развертывания Map/Reduce, а поле флажка выбрано:

Весь скрипт Map/Reduce будет выглядеть примерно так:

Как видите, на каждом этапе Map/Reduce будет запускаться функция skipCurrentStage(), чтобы увидеть, было ли текущее развертывание отмечено пользовательской записью. Если функция возвращает true , дальнейшая логика конкретного этапа скрипта будет пропущена.

Примечание. Приведенное выше решение может не работать, если у вас больше процессоров SuiteCloud и выполняется параллельное развертывание одного и того же скрипта.

Краткое содержание

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