Расширенная модель записи
Расширенная модель записи (REM) позволяет дополнить набор полей таблицы. Табличная структура REM повторяет структуру справочников с таблицами и колонками. Вместо колонок в REM используются атрибуты. Вы можете связать атрибуты REM с таблицей с помощью Модели (sys_re_model). Кроме того, вы можете создать коллекции атрибутов − универсальные наборы атрибутов, которые могут быть использованы в нескольких моделях одновременно.
Вы можете просмотреть справочники связанные с REM через категорию меню Расширенная модель записи.
Концепция REM
Каждая таблица имеет свою собственную модель данных, заданную бизнес-логикой. Модель данных представлена набором колонок. Эта модель данных может быть расширена с помощью дочерних таблиц с теми же атрибутами, что и у родительской таблицы, и, в дополнение, своими собственными атрибутами, недоступными родительской. Например, диаграмма ниже показывает, что все атрибуты таблицы Пользователи унаследованы таблицей Сотрудники.
В случае, если дочерних таблиц немного и большая часть колонок совпадает, модель данных будет работать нормально. Но когда количество дочерних таблиц увеличивается, а количество совпадающих колонок уменьшается, управлять такой моделью становится сложнее. Модель данных с большой и сложной структурой наследования таблиц имеет следующие недостатки:
- Требуется больше места для хранения записей.
- Скрипты начинают выполняться медленнее.
- Настройка функциональности определенной таблицы становится сложнее. Например, импорт данных, настройки макетов и другое.
Каталог запросов по шаблонам можно рассмотреть как один из примеров таких таблиц. Есть родительская таблица для каталога и запись таблицы для каждого шаблона запроса с определенными атрибутами.
Для решения этой проблемы и была создана концепция Расширенной модели записи (REM).
Когда к определенной записи применяется расширенная модель, для нее создается обязательный набор записей, содержащих информацию об определенных значениях атрибутов. Таким образом, запись имеет колонки, унаследованные от таблицы, и еще атрибуты из расширенной модели.
Настройка расширенных моделей
Для настройки расширенной модели вам нужно:
- Создать расширенную модель.
- Создать атрибуты и включить их в модель.
- (опционально) Настроить коллекцию атрибутов.
- (опционально) Настроить клиентский скрипт расширенной модели записи.
На диаграмме ниже вы можете увидеть разницу между моделями и коллекциями. Модели создаются с определенным набором атрибутов, которые используются только в этой модели. Коллекции содержат атрибуты, которые могут применяться к разным моделям.
Не рекомендуется создавать коллекции с большим количеством атрибутов. Эффективнее будет создать несколько коллекций, в каждой из которых будет один атрибут. Такой подход обеспечит гибкость в настройке моделей.
Создание модели
Для создания модели выполните следующие шаги:
- Перейдите в Расширенная модель записи → Модели.
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти.
Поля формы Модель
Поле | Обязательно | Описание |
---|---|---|
Заголовок | Да | Укажите заголовок модели. Можно задать его на любом языке. |
Таблица | Да | Дайте ссылку на таблицу, которая будет затронута моделью. После сохранения формы поле Таблица становится доступным только для чтения. |
Описание | Нет | Введите описание модели. |
Скрипт после создания | Нет | Введите скрипт, который должен выполняться после создания записи. Для разработки скрипта можно использовать методы SimpleRecord Server-Side. |
Активно | Нет | Установите флажок, чтобы сделать модель активной. |
Иконка | Нет | Загрузите изображение для идентификации модели. |
Связанные списки:
- Атрибуты – cписок атрибутов, связанных с расширенной моделью.
- Элементы формы модели – cписок элементов формы, связанных с расширенной моделью записи.
- Используемые коллекции – cвязанные с моделью коллекции атрибутов.
- Клиентские скрипты модели – cписок клиентских скриптов, связанных с моделью.
- Не создавайте и не добавляйте атрибуты в модель c таким же наименованием, как у существующего атрибута, связанного с этой моделью.
- Не переименовывайте уже созданные атрибуты таким образом, чтобы новое наименование совпадало с уже существующим атрибутом, связанным с этой моделью.
Настройка атрибутов
В SimpleOne вы можете создавать соотношение атрибутов для моделей и коллекций. Соотношение данных — это процесс соединения поля данных из одной таблицы с полем данных в другой таблице. Это снижает вероятность ошибок, помогает стандартизировать ваши данные и упрощает их понимание, поскольку устанавливает прямые связи между вашими данными в нескольких таблицах одновременно.
Чтобы создать атрибут, выполните следующие шаги:
- Перейдите в Расширенная модель записи → Атрибуты.
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти.
Поля формы Атрибуты
- Общее
- Параметры типа
- Значение по умолчанию
- Определитель ссылок
Поле | Обязательно | Описание |
---|---|---|
Контейнер | Да | Укажите ранее созданную модель. |
Тип атрибута | Да | Укажите тип атрибута. |
Заголовок | Да | Укажите заголовок атрибута. Вы можете использовать латиницу, кириллицу, цифры от 0 до 9, пробел и символ нижнего подчеркивания ( _ ). Заголовок атрибута может быть локализован. |
Наименование атрибута | Да | Системное наименование атрибута. Поле заполняется автоматически заголовком, используются только латинские буквы, цифры от 0 до 9 и символ ( _ ). После сохранения записи поле доступно только для чтения. |
Связать с колонкой | Нет | Укажите колонку целевой таблицы для связи значения атрибута до создания записи (в том числе до срабатывания бизнес-правила типа до). Для выбора доступны колонки таблицы, указанной в связанной модели или ее дочерних таблиц. Если целевая колонка является обязательной, значение будет сохранено до того, как оно будет обработано на стороне сервера. Также, обязательную целевую колонку не нужно добавлять на форму записи, иначе механизм проверки с клиентской стороны может помешать сохранению записи. Связывание значения атрибута через поле Связать с колонкой доступно только если тип атрибута совпадает с типом целевой колонки. Следующее сообщение появится, если в целевой таблице нет колонки: Атрибут "{attribute_name}" не может быть записан в колонку, т.к. она отсутствует в таблице |
Комментарии | Нет | Напишите комментарий, описывающий атрибут. |
Активно | Нет | Установите флажок, чтобы сделать атрибут активным. |
Только для чтения | Нет | Установите флажок, чтобы сделать добавленное с помощью этого атрибута поле доступным только для чтения. |
Обязательно | Нет | Установите флажок, чтобы сделать добавленное с помощью этого атрибута поле обязательным для заполнения. |
Поле | Обязательно | Описание |
---|---|---|
Зависит от поля | Да | Укажите колонку Таблицы типа Reference, которая ссылается на справочник Таблицы и имеет системное имя table_id. Поле появляется, когда выбран один из типов атрибутов:
|
Максимальная длина | Нет | Укажите максимальную длину значения для колонки. Поле появляется, когда выбран один из следующих типов атрибута:
|
Таблица с опциями | Нет | Укажите таблицу, в которой хранятся опции выбора. Поле появляется, когда выбран тип атрибута Choice. Максимальная длина не может превышать разрешенную длину указанного типа атрибута. |
Опции из поля | Да | Укажите колонку Таблицы с опциями, которая содержит опции выбора. Поле появляется, когда заполнено значение в Таблица с опциями. |
Тип списка | Да | Выберите тип списка опций:
|
Дополнительные атрибуты | Нет | Укажите дополнительные настройки для поля. Например, введите следующий текст для того, чтобы применить стиль радиокнопок к полю опций:choice_decorator=radio Поле появляется, когда выбран один из следующих типов атрибутов:
|
Ссылка | Да | Укажите таблицу со значениями, которые вам необходимы. Поле появится после того, как в поле Тип атрибута будет выбрано значение List или Reference. |
При удалении | Нет | Выберите действие, которое будет выполняться при удалении записи, на которую есть ссылка. Доступные варианты выбора:
|
Удаление записи А приведет к ошибке обновления ссылаемой на нее записи Б, если колонка, которая ссылается на запись А, является обязательной, а действие при удалении установлено Присвоить NULL.
Невозможно обновить запись {link}, так как она ссылается на удаленную запись
Поле | Обязательно | Описание |
---|---|---|
Значение по умолчанию | Да/Нет | Укажите значение по умолчанию, которым будет предзаполнено поле при создании записи. Поле обязательно для заполнения, когда тип списка выбора Выпадающий список без опции –Нет—(укажите значение по умолчанию). |
Динамическое значение по умолчанию | Нет | Установите флажок, если хотите, чтобы значение по умолчанию генерировалось динамически. |
Динамическое значение по умолчанию | Да | Поле появляется, когда выбран флажок Динамическое значение по умолчанию. Выберите скрипт из справочника Динамические значения по умолчанию (sys_default_value_dynamic), чтобы результаты его выполнения были автоматически высчитаны и внесены в это поле. Это значение будет значением по умолчанию для указанной колонки.
|
Поле | Обязательно | Описание |
---|---|---|
Тип определителя ссылок | Нет | Укажите тип определителя ссылок: **
|
Условия определителя ссылок | Нет | Настройте фильтры, используя конструктор условий. Поле появляется, когда выбран Простой тип определителя ссылок. |
Динамический определитель ссылок | Нет | Выберите динамический определитель ссылок из списка. Поле появляется, когда выбран Динамический тип определителя ссылок. |
Зафиксировать определитель | Нет | Установите флажок, чтобы зафиксировать фильтр в навигационной цепочке. Эта функция блокирует использование конструктора условий. Поле появляется, когда выбран один из следующих типов атрибута:
|
Настройка коллекций атрибутов
Коллекции атрибутов реализованы для использования связи "многие-ко-многим", поэтому они позволяют повторно использовать одни и те же атрибуты в различных моделях вместо того, чтобы добавлять их отдельно в каждую модель.
Не рекомендуется создавать коллекции с большим количеством атрибутов. Эффективнее будет создать несколько коллекций, в каждой из которых будет один атрибут. Такой подход обеспечит гибкость в настройке моделей.
Для использования, выполните следующие шаги:
- Создайте запись коллекции, как описано ниже.
- Добавьте в нее созданные ранее атрибуты или создайте новые, используя связанный список Атрибуты.
- Свяжите коллекцию с раннее созданными моделями, используя связанный список Используется в моделях.
После этого все атрибуты, которые содержатся в этой коллекции, будут использоваться во всех моделях, с которыми эта коллекция связана.
- Если вам нужно создать связь значений атрибутов коллекции с колонками целевой таблицы, вам нужно указать Таблицу на форме записи коллекции. В другом случае, оставьте поле пустым.
- Коллекции с заполненным полем Таблица могут быть добавлены только к моделям, у которых указана та же таблица, или к моделям дочерних от указанной таблиц.
Чтобы создать коллекцию, выполните следующие шаги:
- Перейдите в Расширенная модель записи → Коллекции.
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти.
Поля формы Коллекция
Поле | Обязательно | Описание |
---|---|---|
Заголовок | Да | Укажите заголовок коллекции. |
Активно | Нет | Установите флажок, чтобы сделать коллекцию активной. |
Таблица | Нет | Укажите таблицу, к которой относится коллекция. |
Связанные списки
- Атрибуты – cоздайте атрибут, который будет относиться к коллекции, или выберите существующий из таблицы.
- Элементы формы – cоздайте элементы формы, который будет относиться к коллекции, или выберите существующий из таблицы.
- Используется в моделях – cоздайте модель, которая будет относиться к коллекции, или выберите существующую из таблицы.
- Клиентские скрипты – cоздайте клиентский скрипт модели, который будет относиться к коллекции, или выберите существующий из таблицы.
- Не переименовывайте атрибут коллекции таким образом, чтобы новое наименование атрибута совпадало с наименование атрибута, созданного или добавленного в связанную модель или коллекции связанной модели.
- Коллекция и модель могут быть связаны только один раз.
- Модель и коллекция, у которых есть хотя бы один одноименный атрибут, не могут быть связаны друг с другом.
Настройка клиентских скриптов модели
Чтобы создать клиентский скрипт расширенной модели записи, выполните следующие шаги:
- Перейдите в Расширенная модель записи → Клиентские скрипты модели.
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти.
Поля формы Клиентский скрипт модели
Поле | Обязательно | Описание |
---|---|---|
Наименование | Да | Укажите название клиентского скрипта. |
Контейнер | Да | Укажите созданную ранее модель. |
Тип | Да | Выберите тип скрипта. Доступные опции:
|
Атрибут | Да | Укажите атрибут, изменение которого запустит выполнение скрипта. Поле появляется, когда выбран тип При изменении. |
Описание | Нет | Добавьте описание клиентского скрипта. |
Активно | Нет | Установите флажок, чтобы сделать скрипт активным. |
Порядок | Нет | Определите порядок выполнения скрипта. Скрипты выполняются в порядке возрастания. |
Скрипт | Нет | Введите клиентский скрипт. В скрипте можно использовать методы класса SimpleForm. Если модель отображается с помощью Simple-тега <rem> и ссылается на ту же таблицу, то объект s_form будет соответствовать родительской форме, на которой размещен виджет. В случае, если на странице с формой записи одной таблицы присутствует RE-модель записи другой таблицы, которая добавлена на форму с помощью виджета с Simple-тегом <rem>, или RE-модель выведена с помощью тега <remform>, клиентский скрипт модели не сможет обратиться напрямую к основной форме записи через переменную s_form. В данном случае на странице находятся два независимых объекта форм. Для оперирования основной формой записи, используйте конструкцию s_widgets.getForm('formName'), где formName – название представления формы. |
Настройка элементов формы модели или коллекции
На форму записи можно вынести только одну расширенную модель. Если вы добавите больше одной расширенной модели, форма будет функционировать некорректно.
Вы можете организовать поля атрибутов расширенной модели записи или коллекции атрибутов в определенном порядке, как на представлении формы.
Вы можете настроить положение коллекции из связанного списка Элементы формы моделей на форме модели, но положение атрибутов внутри коллекции необходимо настраивать из связанного списка Элементы формы моделей на форме коллекции.
Сгруппируйте атрибуты по общим параметрам и дайте им заголовок. На скриншоте ниже пользовательские атрибуты разделены на две колонки:
Если вы хотите определить заголовок для группы атрибутов, которые организованы в один блок, используйте элемент блока Начало. Заголовок появится на соответствующей странице портала.
Чтобы изменить порядок отображения атрибутов, выполните следующие шаги:
- Перейдите в Расширенная модель записи → Модели или в Расширенная модель записи → Коллекции в зависимости от того, что вы хотите настроить.
- Откройте запись необходимой модели или коллекции.
- В области Связанные списки откройте вкладку Элементы формы моделей.
- Организуйте атрибуты, изменяя значения в поле Позиция. Атрибуты выводятся на форму по возрастанию.
Используйте встроенное редактирование: щелкните на ячейку в колонке Позиция, введите новое значение и нажмите Enter, чтобы сохранить изменения.
Чтобы добавить новые элементы в модель или коллекцию (например, разделители), выполните следующие шаги:
- Перейдите в Расширенная модель записи → Модели или в Расширенная модель записи → Коллекции в зависимости от того, что вы хотите настроить.
- Откройте запись необходимой модели или коллекции.
- В области Связанные списки откройте вкладку Элементы формы моделей.
- Нажмите Создать и заполните поля.
- Нажмите Сохранить или Сохранить и выйти, чтобы добавить элемент.
Поля формы Элемент формы модели
Поле | Обязательно | Описание |
---|---|---|
Контейнер | Да | Укажите ранее созданную модель или коллекцию. Если элемент создается из связанного списка, то поле заполняется автоматически. |
Позиция | Да | Укажите позицию элемента на форме. Элементы выводятся на форму по возрастанию. |
Элемент блока | Да | Выберите тип элемента. Доступные опции:
|
Заголовок блока | Нет | Укажите заголовок группы полей. Заголовок будет отображаться над группой атрибутов на соответствующей странице. Поле появляется, когда в поле Элемент блока выбран тип Начало. |