runCommandВ функцию FunDB.runCommand(queryString) можно передать INSERT, UPDATE или DELETE запрос.
Это можно использовать в триггерах и процедурах (экшнах) для массовой вставки, изменения или удаления данных в соответствии с бизнес-логикой вашей системы
Недоступно использование
INSERTв таблице, на которой естьINSERTтриггер(ы)
Недоступно использованиеUPDATEдля поля в таблице, на котором естьUPDATEтриггер(ы).
Недоступно использованиеDELETEв таблице, на которой естьDELETEтриггер(ы)При попытке выполнить команду появится ошибка
"Mass modification on entities with triggers is not supported"
runCommand)Кейс: При добавлении нового сотрудника (base.people), добавляем его к списку "Ответственных" (owners_for_tasks.responsible) для всех активных задач с тегом "Общая" (tasks.tag = 'Общая'). Для таблицы ответственных за задачи (pm.owners_for_tasks) нет INSERT триггеров
/* trigger entity: base.people
trigger type: AFTER INSERT */
export default async function addToActiveTasks(event, args) {
const cmd = `{ $person reference(base.people) }:
INSERT INTO pm.owners_for_tasks(responsible, task)
SELECT $person as responsible, id as task
FROM pm.tasks
WHERE tag = 'Общая' AND status = 'active`
await FunDB.runCommand(cmd, { person: event.source.newId });
return true;
};
Кейс: Пишем экшн, позволяющий убрать сотрудника(base.people) из поле "Ответственный"(tasks.responsible) для всех его задач. Для поля "Ответственный" в таблице задач (pm.tasks) нет UPDATE триггеров.
export default async function updateResponsible(args) {
const cmd = `{ $person reference(base.people) }:
UPDATE pm.tasks
SET responsible = NULL
WHERE responsible = $person`;
await FunDB.runCommand(cmd, { person: args.person });
return { ok: true };
};
Кейс: После фиксации суммы остатков на счетах на определенную дату(balances.commit_date) удаляем все транзакции до этой даты. Для таблицы транзакций (fin.transactions) нет DELETE-триггеров.
/* trigger entity: fin.balances
trigger type: AFTER INSERT */
export default async function deleteOldTransactions(event, args) {
const cmd = `{ $datetime datetime }:
DELETE FROM fin.transactions
WHERE transaction_datetime <= $datetime`
await FunDB.runCommand(cmd, { datetime: args.commit_date });
return true;
};