Рассмотрим несколько примеров работы с типом данных таблица в сценариях.
В примерах будем использовать два приложения.
Заказы (orders) с полем типа таблица (content), которая состоит из четырех колонок:
- Товар (item) — ссылка на приложение Товары;
- Цена (price) — цена товара берется из приложения Товары с помощью формулы;
- Количество (amount) — количество товара в заказе;
- Стоимость (total) — формула $price * $amount . По этой колонке также рассчитывается общая сумма.
Приложение Товары (products), содержит поля:
- Наименование (__name) — ключевое поле;
- Цена (price) — деньги;
- Остаток (stock) — число;
Для каждого примера будем создавать простой бизнес-процесс и запускать его с помощью кнопки на карточке элемента приложения.
Работа с результатом колонки таблицы
Сгенерируем счет по шаблону с указанием общей стоимости заказа из таблицы.
В контексте бизнес-процесса нам понадобится два поля: Заказ (order), типа приложение и Сумма заказа (total_price), типа деньги.
Для того, чтобы использовать сумму заказа в генерации файла, нужно сначала записать ее в контекст. Сделаем это с помощью сценария:
Код:
async function getTotal(): Promise {
// Получаем заказ
const order = await Context.data.order!.fetch();
// Записываем в контекст результат колонки total
Context.data.total_price = order.data.content!.result.total;
}
После этого можно использовать контекстную переменную Сумма заказа в блоке генерация по шаблону.
Удаление строк таблицы
Проверим, есть ли в таблице заказа позиции, в которых не указано количество товара, и удалим такие строки:
Код:
async function deleteEmptyRows(): Promise {
// Получаем заказ
const order = await Context.data.orders!.fetch();
// Проходим циклом по каждой строке
for (let i = order.data.content!.length - 1; i >= 0; i--) {
const row = order.data.content![i];
// Проверяем, заполнено ли поле Количество
if(!row.amount) {
// Удаляем строку, если не заполнено
order.data.content!.delete(i);
}
}
// Сохраняем заказ
await order.save();
}
Подобным образом можно итерировать строки таблицы и удалять, исходя из любых параметров.
Добавление строк в таблицу
Предположим, клиент решил добавить в заказ еще один товар. Предусмотрим для менеджера возможность выбрать в задаче элемент приложения Товар и указать количество.
Затем добавим выбранный товар в таблицу заказа с помощью сценария:
Код:
async function addToOrder(): Promise {
// Получаем заказ
const order = await Context.data.orders!.fetch();
// Вставляем строку
const row = order.data.content!.insert();
// Заполняем строку
row.item = Context.data.product!;
row.amount = Context.data.amount!;
// Сохраняем заказ
await order.save();
}
Обновление элементов приложения, используемых в таблице
После успешно выполненного заказа, можно посчитать остатки на складе.
Напишем сценарий, который обновит значение поля Остаток (stock) для всех элементов приложения Товары, выбранных в таблице:
Код:
async function updateStock(): Promise {
// Получаем заказ
const order = await Context.data.orders!.fetch();
// Используем цикл, чтобы применить действия к каждой строке таблицы в заказе
for (let row of order.data.content!) {
// Получаем выбранный в строке элемент приложения Товары
const product = await row.item.fetch();
// Считаем остаток
product.data.stock! -= row.amount;
// Сохраняем элемент приложения
await product.save();
}
}
После выполнения сценария остатки обновятся.