Метод UpdateRow обновляет одну запись в выбранной таблице. Это эквивалентно SQL-запросу UPDATE.

Этим методом можно обновить один или сразу несколько столбцов за один запрос. Обновление нескольких строк за один раз отключено, чтобы избежать потери данных в случае ошибки.

Метод может быть полезен в случае, если вы хотите отметить в дополнительных данных, что письмо было отправлено на определенный email. Вы можете сохранить отправляемые данные или сгенерировать email с одноразовыми предложениями (такими как купоны), используя методы GetRows и UpdateRow совместно.

1. Сигнатура метода

UpdateRow(table, updates, filters)

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

Параметр Тип Описание
table string Обязательное. Название таблицы.
updates
array of Update objects Обязательное. Массив объектов, описывающих столбцы, данные в которых будут обновлены (эквивалент раздела SET SQL-запроса UPDATE). По умолчанию все столбцы.
filters array of Filter objects Необязательное. Массив объектов, задающих параметры раздела WHERE запроса UPDATE. Используйте этот параметр, чтобы ограничить обновляемые записи теми, что подходят вашим критериям. Если фильтров не задано, критерии не будут применены. Если задано несколько фильтров, обновляемые записи будут соответствовать всем критериям (как при применении логического AND).

Параметры объекта Update

Параметр Тип Описание
Name string Column name
Value object Новое значение столбца. Тип значения зависит от типа столбца. Например, когда происходит фильтрация по номеру столбца, должен использоваться тип integer, - для текстовых столбцов - string и т.д. Также возможны простые преобразования типов. Например, string "123" отображает правильное целое integer значение 123. Это работает для дат, чисел с плавающей запятой и т.д..
type enumeration Тип обновления. Необязательный. Может быть:
  • UpdateType.Update (Присвоение значения, например "x = value". Используется по умолчанию.)
  • UpdateType.Increment (Инкрементирование значения, например "x = x + value"
  • Внимание: Инкремент не подходит для всех типов столбцов. Поддерживаемые типы: Number и Double (Числовой и Дробный). String и Text (Текстовый) также работают (будет произведена конкатенация строк).

Параметры объекта Filter

Параметр Тип Описание
Name string Column name
Modifier enumeration Модификатор операции. Может быть следующим:
  • EQ (равно, "=")
  • GT (больше чем, ">")
  • GE (больше или равно, ">=")
  • LT (меньше чем, "<")
  • LE (меньше или равно, "<=")
  • LIKE (SQL LIKE оператор)
  • NE (не равно, "<>")
Value object Значение столбца. Тип значения зависит от типа столбца.Например, когда происходит фильтрация по номеру столбца, должен использоваться тип integer, -для текстовых столбцов - string и т.д. Также возможны простые преобразования типов. Например, string "123" отображает правильное целое integer значение 123. Это работает для дат, чисел с плавающей запятой и т.д..

Фильтры работают так же, как и в методе GetRows. Более подробную информацию можно найти в документации по методу GetRows. .

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

Можно вызвать метод UpdateRow, используя синтаксис с фигурными скобками. Вы можете разместить этот метод в любом месте письма, так как он возвращает пустую строку.

Пример 1 - простейший вызов:

${UpdateRow('MyTable', new [] {new Update('MyColumn', 456)})}

Это эквивалентно SQL-запросу:

UPDATE TOP(1) MyTable SET MyColumn = 456

Однако данный способ используется редко, т.к. в большинстве случаев существует необходимость обновить отдельную строку (а не первую найденную). Последующие примеры показывают, как это осуществить, используя фильтры.

Пример 2 - обновление одного столбца в строке по заданным критериям:

${UpdateRow('MyTable', new [] {new Update('MyColumn', 456)}, new [] {new Filter('CustomerId', EQ, 123)})}

Это эквивалентно SQL-запросу:

UPDATE TOP(1) MyTable SET MyColumn = 456 WHERE CustomerId = 123

Пример 3 - обновление нескольких столбцов:

${UpdateRow('MyTable', new [] {new Update('MyColumn', 456), new Update('ProductName', 'Snowboard')}, new [] {new Filter('CustomerId', EQ, 123)})}

Это эквивалентно SQL-запросу:

UPDATE TOP(1) MyTable SET MyColumn = 456, ProductName = 'Snowboard' WHERE CustomerId = 123

Возможно применить несколько фильтров - это эквивалентно применению логического AND. Также возможно (а в большинстве случаев необходимо) сравнить обновляемые строки с полями подписчика, email и т.д. Для дополнительной информации смотрите примеры метода GetRows.

Пример 4 - увеличение значения столбца:

${UpdateRow('MyTable', new [] {new Update('MyCounterColumn', 5, UpdateType.Increment)}, new [] {new Filter('CustomerId', EQ, 123)})}

Это эквивалентно SQL-запросу:

UPDATE TOP(1) MyTable SET MyCounterColumn = MyCounterColumn + 5 WHERE CustomerId = 123

Возможно использовать несколько инкрементов или совмещать обычное обновление вместе с инкрементом.

Пример 5 - реальный пример отправки одноразовых купонов:

<!-- получаем купон из таблицы в переменную -->
<var rows="GetRows('Coupons', 1, null, new [] {new Filter('CustomerId', EQ, SubscriberProperty('customer_id')), new Filter('IsUsed', EQ, false)})"/>

<!-- показываем купон в письме -->
<p>Привет! Вот ваш купон: ${rows[0]['CouponCode']}</p>

<!-- отмечаем купон как использованный и удаляем -->
${UpdateRow('Coupons', new [] {new Update('IsUsed', true), new Update('UsedOn', System.DateTime.UtcNow)}, new [] {new Filter('CouponId', EQ, rows[0]['CouponId'])})}