⟵ сюдатуда ⟶
  • Учебный курс
  • Создание простых таблиц и полей
  • Коды базовый уровень
  • Селекты и связь между таблицами
  • Настройки таблиц базовый уровень
  • Префильтры базовый уровень
  • Условное форматирование базовый уровень
  • Коды действия базовый уровень
  • Назначить новое значение в другое поле при изменении в текущем
  • Выполнение нескольких действий последовательно
  • Выполнение кода из кнопки, запись лога
  • Добавить или удалить строки в таблице
  • Как пересчитать строки в таблице
  • Как засетить разные значения в зависимости от значений в колонке?
  • Использование всплывающих окон
  • Циклы базовый уровень
  • Роли и пользователи в web
  • Коды продвинутый уровень
  • Коды действий продвинутый уровень
  • Префильтры продвинутый уровень
  • Настройки полей и таблиц продвинутый уровень
  • Циклы продвинутый уровень
  • Форматирование продвинутый уровень
  • Селект-дерево
  • Выполнения кода действия по расписанию
  • Печать и отправка email
  • Нотификации
  • Взаимодействие по API
  • Адаптивность и секции
  • Графики
  • Вид таблицы панелями и поворот строчной части
  • Анонимные таблицы для неавторизованного доступа
  • Внешние формы для сбора информации
  • Обновление и бэкапирование
  • Дублирование схем и перенос таблиц между базами
  • Консольная утилита bin/totum
  • Выполнение нескольких действий последовательно

    code_action

    Может ли код-действия иметь несколько секций = ?

    Да. Коды действий могут. Выглядит так:

    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 только по триггеру удаление (триггер должен быть включен).

    Какие два способа доступны, что бы последовательно выполнить несколько действий?

    1. Использовать несколько секций =: с префиксами.

    2. Использовать функцию 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