Блокировка таблицы серийных записей CustomRecord - PullRequest
0 голосов
/ 29 сентября 2018

У нас есть скрипт Fulfillment в версии 1.0, который извлекает серийный номер из пользовательской записи на основе SKU и других параметров.Существует поиск, который создается на основе SKU, и используется первая доступная запись.Одним из критериев поиска является то, что вы не являетесь конечным пользователем, связанным с ключом.

Мы работаем над преобразованием сценария в 2.0.Что я не могу понять, так это то, что если сценарий (скажем, вышеупомянутая функциональность включена в функцию Map для сценария MR) будет работать в нескольких очередях / экземплярах, означает ли это, что существует потенциальная вероятность того, что 2 экземпляра может попасть вта же запись пользовательской записи?Какой обходной путь должен гарантировать, что X экземпляров функции Map не заканчивают нас, используя тот же SN / Key?В 2.0 это может произойти так, что 2 экземпляра Map одновременно отправят запрос на поиск в пользовательской записи и получат те же результаты, поскольку первая карта не завершила обработку и пометила ключ как использованный (обновление информации конечного пользователя вkey).

Есть ли лучший способ сделать это в 2.0, или мне нужно создать еще одну пользовательскую запись, которую сценарий должен будет прочитать, чтобы можно было извлечь ключ.Также есть ли ожидание, которое я могу реализовать, если таблица заблокирована?

Thx

1 Ответ

0 голосов
/ 02 октября 2018

Вероятно, лучшее, что здесь можно сделать, - это разбить процесс назначения на две части или реструктурировать его, чтобы в итоге вы получили сценарий Scheduled, которому вы даете явную очередь.Таким образом, ваш доступ к серийным номерам будет сериализован, и вам не потребуется выполнять дополнительную работу.Если вам нужен совет по обработке больших партий с помощью SS2, см. https://github.com/BKnights/KotN-Netsuite-2 для служебного скрипта, который может потребоваться для обработки больших партий.

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

Когда вы хотите получить серийный номер, который вы: читаете из таблицы блокировки с помощью функции поля поиска.Если это не 0, тогда подождите *.Если это 0, тогда сгенерируйте случайное целое число от 0 до MAX_SAFE_INTEGER.

попробуйте записать это в «Таблицу блокировок» с помощью функции отправки поля.Тогда прочитайте это прямо сейчас.Если он содержит ваше случайное число, значит, у вас есть блокировка.Если этого не произойдет, тогда подождите *.

Если у вас есть блокировка, тогда продолжайте и назначьте серийный номер.Снимите блокировку, записав обратно 0.

  • wait: это сложно в NS.Поскольку я не ожидаю, что задание s / n займет много времени, я иногда инициировал ожидание, просто повторяя то, что, как я надеюсь, является трудоемкой задачей ЦП, не требующей затрат на управление до истечения некоторого времени.
...