api.tx Работа с транзакциями

  • api.tx.call(closure)

    Выполнение замыкания внутри новой транзакции.

    Для работы с транзакциями в контексте выполнения скрипта.

    Найденные объекты не рекомендуется использовать за пределами транзакции, вместо этого следует возвращать примитивные значения (строки, числа и т.д.). Если необходимо использовать объект вне транзакции, то его следует снова получить с использованием уникального признака (например, UUID).

    Параметр метода:

    • closure — замыкание, которое должно быть выполнено

    Пример.

    def obj1 = ...
    def obj2 = ...
    def closure = {
    utils.edit(obj1, [ state : 'closed' ]) // первое действие ...
    utils.edit(obj2, [ state : 'closed' ]) // и второе действие, будут выполнены в новой транзакции
    }
    api.tx.call(closure) 
  • api.tx.call

    Массовое удаление объектов.

    Благодаря оборачиванию действия в отдельную транзакцию и блок try-catch, ошибка на какой-либо итерации никак не повлияет на обработку остальных объектов и будет корректно обработана

    Пример.

    def objs = ...
    objs.each { obj ->
      try
      {
      api.tx.call { utils.delete(obj) }
      }
      catch (e)
      {
      logger.error('...', e)
      }
    }