Статья успешно отправлена на почту

Транзакции в таблицах в Mobile SMARTS

Применимо к продуктам: Mobile SMARTS платформа
Последние изменения: 2024-03-26

Транзакция представляет собой набор действий, необходимых для изменения состояния таблицы. Важная особенность транзакции — изменения по транзакции могут быть либо полностью применены, либо полностью отменены. Как пример — перевод денежных средств с одного счета на другой. Не должно возникнуть ситуации, когда деньги списались с одного счета, но не зачислились на другой.

На текущий момент транзакции применимы только к глобальным таблицам. За изменения состояния документа отвечает стек действий.

Так как таблицы — отдельные сущности, для каждой таблицы необходимо открывать свою транзакцию. Методы работы транзакций должны быть вызваны у типа таблицы, в которую вносятся изменения.

Методы

Метод Описание
bool BeginTransaction () Инициализирует транзакцию на основании текущего состояния таблицы. Данные, заносимые в таблицу, доступны только внутри данной транзакции.
bool CommitTransaction () Применяет изменения, вносимые данной транзакцией.
bool RollbackTransaction () Отменяет изменения данной транзакции.

Особенности работы

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

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

Пример использования

Задача: Существует глобальная таблица Stock содержащая в себе информацию о количестве товаров в наличии и их размещении. Необходимо переместить 5 единиц товара из одной ячейки в другую в реальном времени.

Решение:

* структура таблицы Stock

Рассмотрим решение подробнее:

  • В действии с именем метки «begin» вызываем метод открытия транзакции для таблицы Stock
  • В действии с именем метки «start progress» обрабатываем коллекцию строк объектов типа PackedProduct, а именно:
    • В действии с именем метки «remove» вычитаем количество в строке товара в исходной ячейке
    • В действии с именем метки «add» добавляем вычтенное ранее количество
  • После обработки всех строк вызываем метод применения транзакции к таблице в действии с именем метки «commit»
  • В случае успеха заносим запись в лог о том, что транзакция успешно проведена и завершаем выполнение операции.
  • В случае ошибки применения транзакции вызываем метод отката изменений транзакции в действии с именем метки «rollback», после чего прерываем выполнение операции.

Код примера

Была ли статья полезна?
Спасибо за ваш отзыв!
Отзыв
Заполните, пожалуйста, данную форму, что конкретно вы не нашли, оставьте свои комментарии о работе сайта / полезности / сложности с навигацией
0/500