Действия

Действия - это доступные команды, которые можно выполнять над объектом класса.

JSON

{
      "id": "SAVE",
      "caption": "Сохранить",
      "visibilityCondition": null,
      "enableCondition": null,
      "needSelectedItem": false,
      "signBefore": false,
      "signAfter": false,
      "isBulk": false
 }

Описание полей

Поле Наименование Допустимые значения Описание
"id" Код «CREATE» - создать объект/объект ссылочного поля Внутренний код действия с объектом.
    «EDIT» - изменить объект/привязанный объект ссылочного поля  
    «DELETE» - удалить объект  
    «CREATE-INLINE» - создать объект (не переходя на форму создания) Создание объекта без открытия формы создания, для ускорения заведения объектов.
    «SAVEANDCLOSE» - сохранить изменения и закрыть фрейм  
    «SAVE» - сохранить изменения  
    «REMOVE» - удалить привязку к объекту по ссылке  
    «ADD» - добавить привязку к объекту по ссылке  
"caption" Имя Строка Видимое наименование - подпись на кнопке действия (при наличии).
"visibilityCondition" Условие видимости Строка или null Условие, при котором кнопка действия будет отображена.
"enableCondition" Условие активности Строка или null Условие, при котором кнопка действия будет активна.
"needSelectedItem" Условие видимости - наличие выбранного элемента Логическое значение Поле выставляется в true для действий, которым необходимо наличие выбранного элемента для активации.
"signBefore" ЭП входящих данных Логическое значение  
"signAfter" ЭП исходящих данных Логическое значение  
"isBulk" Групповая Логическое значение Признак пакетной операции, для действий ссылочных полей. Выставляется в true для действий, которые выполняются со всеми привязанными объектами одновременно.

Логика действий над ссылочными объектами

Операция "Выбрать" - это установление связи между объектами, вне зависимости от типа связи должна быть возможность ее установить (и разорвать) на уровне бизнес логики.

  1. Если это связь по ссылке один ко многим, т. е. ссылка на ключ - то приняв сторону «один» за A, сторону «многие» за B, реализуем:
    • на стороне объекта B (ссылка на A): Операция "Выбрать" (SELECT) - находим объект (A), устанавливаем значение ссылочного атрибута объекта B равным ключу объекта A (обнуляем атрибут для разрыва связи);
    • на стороне объекта A (коллекция или т.н. обратная ссылка): операция "Добавить" (ADD) - находим объект (B), устанавливаем значение ссылочного атрибута этого объекта (B) равное ключу объекта A, операция "Извлечь" (REMOVE) - выбираем в коллекции объект (B), обнуляем ссылку на A.
  2. Если это связь по ссылке многие ко многим, т. е. ссылка на не ключевой атрибут, то для обоих концов коллекции реализуем связи:
    • Операция «Добавить» (ADD) - находим объект, устанавливаем значение его ссылки равным соответствующему атрибуту контейнера. При этом объект окажется в коллекциях всех контейнеров с таким же значением атрибута, это специфика данного типа связей)
    • Операция "Извлечь" (REMOVE) - выбираем объект в коллекции, обнуляем ссылку, при этом объект также удаляется из коллекций всех контейнеров с соответствующим значением атрибута.
  3. Если это связь многие-ко-многим без ссылки (связь через системную промежуточную сущность, сюда относятся и «прямые» коллекции и «обратные», как разные концы связи), то для обоих коллекций реализуем:
    • Операция "Добавить" (ADD) - находим объект, создаем сущность-связь с контейнером - объект появляется только в коллекции данного контейнера
    • Операция "Извлечь" (REMOVE) - выбираем объект в коллекции, удаляем сущность-связь с контейнером - объект пропадает только из коллекции данного контейнера

С точки зрения UI различий между типами связей вообще нет никаких - везде имеем дело с коллекциями, везде потенциально доступны операции добавления и извлечения. А настраивать наличие тех или иных кнопок у поля колекции можно и нужно на уровне модели представления. В бизнес логике должны быть реализованы стандартные обработчики для кнопок ADD и REMOVE в соответствии с описанной выше логикой.

Логика действий над объектами класса

Поле "commands", заданное в общей части меты представлений класса, задает список действий, допустимых над объектами данного класса.

В общей части меты представлений класса могут быть указаны команды следующих кодов "id":

  1. "CREATE" - создать объект
  2. "EDIT" - изменить объект
  3. "DELETE" - удалить объект
  4. "SAVEANDCLOSE" - сохранить изменения и закрыть
  5. "SAVE" - сохранить изменения

Для представления атрибутов со свойством "type":2 применяются следующие действия:

  1. "SELECT" - добавить
  2. "EDIT" - править
  3. "REMOVE" - удалить

Структура в mongoDB (registry)

{
    "id" : "SAVE",
    "caption" : "Сохранить",
    "visibilityCondition" : null,
    "enableCondition" : null,
    "needSelectedItem" : false,
    "signBefore" : false,
    "signAfter" : false,
    "isBulk" : false
}