VK Video
Может ли код-действия иметь несколько секций = ?
Да. Коды действий могут. Выглядит так:
a1=: set(table: 'table'; field: 'fild_name' = #new_value)
a2=: recalculate(table: 'summary')
Префиксы a
означают действие по любому триггеру — добавление, удаление, изменение или двойной клик.
Порядок выполнения будет в порядке указанной цифры, обработанной как строка.
Те a11
будет раньше чем a2
.
Какой префикс надо использовать, чтобы выполнить код действия только по определенному триггеру?
a
— общий (он будет вполнен раньше всех прочих).
ch
— только изменение.
ad
— только добавление.
dl
— только при удалении.
cl
— при двойном клике на заблокированное поле.
Получается, что в одном поле можно задать разные действия по разным триггерам:
a1=: pin(table: $#ntn; field: 'name'; where: 'id' = #id)
ad1=: set(table: 'table_1'; field: 'set_field' = $#nfv; where: 'link' = #id)
dl1=: set(table: 'table_1'; field: 'set_field' = ""; where: 'link' = #old.id)
a2=: recalculate(table: 'summary')
// Про предыдущие значения #old.** будет чуть дальше
В этом коде:
cекция a
, состоящая из двух действий a1
и a2
будет выполнятся всегда (должен быть включен хотябы один триггер).
ad1
только по триггеру добавление
(триггер должен быть включен).
dl1
только по триггеру удаление
(триггер должен быть включен).
Какие два способа доступны, что бы последовательно выполнить несколько действий?
Использовать несколько секций =:
с префиксами.
Использовать функцию while. Пример:
=: while(action: $action1; action: $action2)
action1: set(table: 'table'; field: 'set_field' + #new_value)
action2: recalculate(table: 'summary')
// Про относительное изменение при помощи set — field: 'set_field' + #new_value, будет рассказано чуть дальше
Если использовать только параметры action
в while, то они последовательно выполнятся один раз.
Можно ли добавить условия, проверяющие нужно ли выполнять действие?
Да, можно через if, например:
=: if(condition: $#nfv != ""; then: $action)
action: insert(table: 'table'; field: 'field' = $#nd)
// параметр else можно не указвать
// insert добавляет строки
В этом примере, если при изменении текущее поле не будет пустоты, то в таблицу table
будет добавлена строка, и в ней в поле field
будет установлена текущая дата.
Или через condition
в while:
=: while(condition: $#nfv != ""; action: $action)
action: insert(table: 'table'; field: 'field' = $#nd)
// action будет выполнен только если все condition выполнятся в true