Примеры использования расширенной модели записи (REM)
Для полноценного использования расширенной модели записи выполните некоторые дополнительные действия:
- Создайте расширенную модель записи.
- Создайте необходимые атрибуты и привяжите их к модели.
- Вы можете добавить атрибуты из созданной модели, используя соответствующий связанный список.
- Создайте новый виджет используя Simple-теги <rem> или <remform>. Поля, добавляемые с помощью тега <rem>, как правило встраиваются в существующую форму как дополнительная секция, в то время как <remform> создает самостоятельную форму из атрибутов расширенной модели записи.
- Добавьте созданный виджет на форму записи или на соответствующую страницу портала.
Пример 1
Например, вам нужно расширить таблицу Задачи (task) определенными атрибутами, которые позволят вам выполнять ежедневные обязанности. Для этого выполните следующие действия:
-
Создайте для этой таблицы модель расширения.
примечаниеСохраните ID модели. Он понадобится позже.
-
Создайте атрибуты.
-
Создайте виджет формы, как описано ниже, и сохраните его:
Шаблон<rem modelId="{data.model_id}" tableName="{data.table_name}" recordId = "{data.record_id}" />
Клиентский скрипт(() => {
window.s_widget_custom = window.s_widget_custom || {};
const parameter = new URLSearchParams(window.location.search).get('model_id');
s_widget.setFieldValue('model_id', parameter);
s_widget.setFieldValue('table_name', window.s_form.getTableName());
s_widget.setFieldValue('record_id', window.s_form.getUniqueValue());
})(); -
Добавьте созданный виджет на форму Задачи.
-
Перейдите к записи по URL-адресу вида
https://instance.example.com/record/task?model_id=XXXX
, подставив ID модели, которую вы используете, вместо XXXX.
В результате отображается форма с атрибутами указанной модели.
Пример 2
Используйте RE-модель для отображения атрибутов определенной записи на нужной вам форме. Например, вам нужно видеть информацию о пользователе, инициировавшем задачу. Информация хранится в REM-атрибутах таблицы Пользователи (user). Вы можете добавить атрибуты таблицы Пользователи (user), которые доступны только для чтения, в таблицу Задачи (task). Таким образом, атрибуты RE-модели одной таблицы будут отображаться на форме записи другой таблицы.
Для такой настройки нужны следующие сущности:
- RE-модель и ее атрибуты для таблицы Пользователи (user).
- REM-виджет для таблицы Пользователи (user).
- REM-виджет для таблицы Задачи (task).
Для этого выполните следующие действия:
-
Создайте виджет для таблицы Пользователи (user) со следующими значениями:
Поле Значение Активен true Таблица Пользователи Шаблон<rem
modelId="{data.model_id}"
tableName="{data.table_name}"
recordId = "{data.record_id}"
></rem>Клиентский скрипт( () => {
window.s_widget_custom = window.s_widget_custom || {};
const parameter = new URLSearchParams(window.location.search).get('model_id');
s_widget.setFieldValue('model_id', parameter);
s_widget.setFieldValue('table_name', window.s_form.getTableName());
s_widget.setFieldValue('record_id', window.s_form.getUniqueValue());
})(); -
Создайте RE-модель с нужными вам атрибутами для таблицы Пользователи (user).
примечаниеСохраните ID модели. Он понадобится позже.
-
Добавьте виджет, созданный на шаге 1, на форму Пользователь.
-
Перейдите к форме записи по URL-адресу вида
https://instance.example.com/record/task?model_id=XXXX
, подставив ID модели, которую вы используете, вместо XXXX. -
Заполните поля и сохраните запись.
-
Создайте виджет для таблицы Задачи (task) со следующими значениями:
Поле Значение Активен true Таблица Задачи Шаблон<div>
<rem
modelId="{data.model_id}"
tableName="{data.table_name}"
recordId = "{data.record_id}"
readOnly="true"
></rem>
</div>Клиентский скрипт( () => {
s_widget.setFieldValue('table_name', 'user');
s_widget.setFieldValue('model_id', '{id of the RE model created on Step 2}');
s_widget.setFieldValue('record_id', '{id of the User record created on Step 4}');
})(); -
Добавьте виджет, созданный на предыдущем шаге, на форму Задачи.
В результате, на форме Задачи отображаются доступные только для чтения значения REM-атрибутов записи Пользователя.
Пример 3
Цель этого примера – дать сотруднику, заполняющему форму таблицы Задачи, выбрать необходимый тип задачи и заполнить уникальные для этого типа задачи атрибуты. Для этого необходимо создать модель для таблицы Задачи, которая будет ссылаться на другие модели этой же таблицы.
Для этого выполните следующие действия:
-
Создайте модели. Перейдите в Расширенная модель записи → Модели. Создайте четыре модели для таблицы Задачи (task) и настройте их атрибуты:
- Тип задачи. У данной модели есть Reference атрибут Выберите тип задачи (related_model). Этот атрибут ссылается на таблицу Модели (sys_re_model). С помощью этой модели вы сможете выбрать одну из моделей, описанных ниже, на форме Задачи.
- Отправка груза. У данной модели есть String атрибут Адрес.
- Принятие груза. У данной модели есть String атрибут Номер запроса.
- Уборка офиса. У данной модели есть String атрибут Номер кабинета.
-
Создайте клиентский скрипт модели. Перейдите в Расширенная модель записи → Клиентские скрипты модели и создайте скрипт со значениями атрибутов, указанными ниже.
- Наименование – укажите наименование скрипта, например, Изменить модель.
- Контейнер – укажите модель Тип задачи, созданную ранее.
- Тип – При изменении
- Атрибут – кажите атрибут Выберите тип задачи (related_model), созданный ранее.
- Активен – Да
- Скрипт – cоздайте скрипт с использованием метода emit(eventType, data) класса SimpleEventBus. Этот скрипт запускает событие modelChanged при изменении модели и присваивает значение выбранной модели атрибуту Выберите тип задачи (related_model).
( () => {
SimpleEventBus.emit('modelChanged', s_form.getValue('related_model'));
})(); -
Создайте виджеты. Перейдите в Структура портала → Виджеты и создайте виджеты для таблицы Задачи (task).
Виджет для выбора модели
Шаблон<div simple-if="{data.visible}">
<remform
modelId="169936967202653693"
tableName="{data.table_name}"
></remform>
</div>remform modelId
– укажите ID модели Тип задачи, созданной ранее.Клиентский скрипт( () => {
s_widget_custom = s_widget_custom || {};
s_widget.setFieldValue('table_name', s_form.getTableName());
s_widget.setFieldValue('visible', !s_form.getUniqueValue());
})();Виджет для отображения модели
Шаблон<rem
modelId="{data.model_id}"
tableName="{data.table_name}"
recordId="{data.record_id}"
></rem>Клиентский скрипт( () => {
s_widget_custom = window.s_widget_custom || {};
SimpleEventBus.on('modelChanged', (data) => {
if (!s_form.getUniqueValue()){
s_widget.setFieldValue('model_id', data);
}
});
s_widget.setFieldValue('table_name', s_form.getTableName());
s_widget.setFieldValue('record_id', s_form.getUniqueValue());
})(); -
Создайте экземпляры виджетов. Перейдите в Структура портала → Экземпляры виджетов и создайте по одному экземпляру для каждого из виджетов, созданных ранее.
Атрибут Значение Виджет Выберите виджет, экземпляр которого вы хотите создать. Порядок Укажите порядок виджета на странице. Рекомендуется ставить порядок виджета для отображения модели выше, чем порядок виджета для выбора модели, чтобы атрибуты выбранной модели отображались под ее наименованием. Значения опций схемы [] Активен true -
Добавьте на форму Задачи виджеты для выбора и отображения модели, созданные ранее. Среди полей формы вы увидите виджет для выбора модели. После выбора модели появится виджет для отображения атрибутов модели:
При выборе другого типа задачи отобразится соответствующий атрибут модели: