Ключевым атрибутом объекта, во многом определяющем его поведение, является поле FORM.
Этот атрибут задает набор экранных форм для визуализации объекта в разных режимах и правила,
описывающие поведение объекта для стандартных событий.
Мы не используем наследование, потому что это не нужно.
Обработчики событий для каждой формы хранятся во внешних модулях,
что позволяет настраивать логику поведения объекта без перезагрузки приложения.
Базовый состав событий, происходящих на сервере и связанных с формой, вполне предсказуем:
- beforeOpen — Для нового документа заполнение полей по умолчанию, для любого документа заполнение вычисляемых полей.
- beforeSave — Обработка документа перед сохранением.
- afterSave — Действия с базой после сохранения документа.
На клиенте тоже ничего нового:
- postOpenDoc – дополнительная инициализация экранной формы (используется редко).
- setAndVerify(true, false) – Заполняет вычисляемые поля экранной формы перед сохранением.
- setAndVerify(false, true) – Проверяет значения полей экранной формы перед сохранением.
- setAndVerify(true, true) – и то, и другое.
При разработке приложения всплывает множество дополнительных событий, требующих обработки.
В ДОБД это легко реализуется с помощью т.н. правил.
Правила добавляются в объект в процессе работы и связывают конкретный объект с соответствующим обработчиком.
Обработчики событий в свою очередь могут создавать, изменять и удалять правила.
Поскольку обработчики являются внешними модулями, разработка приложения упрощается,
центр тяжести системы сползает в сторону разработки внешних модулей, т.е. в область настроек.
Примеры правил (правило - это атрибут объекта, например 'linkRule':'clerk')
- groundRule – правило описывает создание нового объекта на основании существующего.
- linkRule – объект может ссылаться на другие объекты. Данное правило описывает действия со связанными объектами при сохранении основного.
- viewRule – правило описывает формирование html-разметки при отображении объектов в виде списка.
В нашем случае внешние обработчики – это скрипты на Python 3.3 или JS, которые хранятся в базе данных в виде текста.