Примеры использования расширенной модели записи (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), созданный ранее.
- Активен – Да
- Скрипт – создайте скрипт с использованием метода 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 |
- Добавьте на форму Задачи виджеты для выбора и отображения модели, созданные ранее. Среди полей формы вы увидите виджет для выбора модели. После выбора модели появится виджет для отображения атрибутов модели:

При выборе другого типа задачи отобразится соответствующий атрибут модели: