Как создать мини-карточку добавления
Glossary Item Box
Общие положения
Для быстрого добавления записей в раздел, а также для просмотра краткой информации о записях, в bpm'online реализованы мини-карточки. Добавление мини-карточек, отображающих информацию о записях, описано в статьях "Создание мини-карточки" и "Добавление мини-карточки к произвольному модулю".
Чтобы в существующем разделе реализовать пользовательскую мини-карточку добавления новой записи:
- В пользовательский пакет добавьте схему модели представления карточки. В качестве родительского объекта выберите схему BaseMiniPage.
- При помощи специального SQL-запроса внесите изменения в системную таблицу SysModuleEdit базы данных bpm’online.
- Добавьте необходимую функциональность мини-карточки в исходный код схемы.
- Добавьте системную настройку HasProductMiniPageAddMode.
К СВЕДЕНИЮ
Для разделов bpm'online, в которых мини-карточки реализованы по умолчанию, существуют системные настройки, коды которых соответствуют маске Has[Код раздела]MiniPageAddMode (например, HasAccountMiniPageAddMode). Эти системные настройки используются для переключения между режимами добавления новой записи и редактирования существующей с помощью мини-карточки.
Описание примера
Создать пользовательскую мини-карточку добавления новой записи в раздел [Продукты]. Мини-карточка должна добавлять базовый набор полей [Название] и [Код].
Исходный код
Пакет со схемой мини-карточки раздела [Продукты], реализующей этот пример, вы можете скачать по ссылке.
Алгоритм реализации кейса
1. Создание схемы представления модели мини-карточки
В разделе [Конфигурация] ([Configuration]) на вкладке [Схемы] ([Schemas]) выполните команду меню [Добавить] — [Расширенные] — [Схема модели представления карточки] ([Add] — [Additional] — [Schema of the Edit Page View Model]) (рис.1).
Рис. 1. — Добавление схемы представления мини-карточки
Для схемы представления мини-карточки заполните ее свойства (рис. 2).
- [Название] — "UsrProductMiniPage".
- [Заголовок] — "Мини-карточка продукта" ("Product Mini Page").
- [Пакет] — пользовательский пакет, в котором ведется разработка, например, Custom.
- [Родительский объект] — схема BaseMiniPage из пакета NUI.
Рис. 2. — Свойства схемы модели представления мини-карточки
2. Регистрация мини-карточки в базе данных
Для внесения изменений в базу данных выполните следующий SQL-запрос.
DECLARE -- Название схемы представления создаваемой мини-карточки. @ClientUnitSchemaName NVARCHAR(100) = 'UsrProductMiniPage', -- Название схемы объекта, к которому привязывается мини-карточка. @EntitySchemaName NVARCHAR(100) = 'Product' UPDATE SysModuleEdit SET MiniPageSchemaUId = ( SELECT TOP 1 UId FROM SysSchema WHERE Name = @ClientUnitSchemaName ) WHERE SysModuleEntityId = ( SELECT TOP 1 Id FROM SysModuleEntity WHERE SysEntitySchemaUId = ( SELECT TOP 1 UId FROM SysSchema WHERE Name = @EntitySchemaName AND ExtendParent = 0 ) );
Результатом выполнения данного запроса будет уникальный идентификатор мини-карточки, записанный в таблице SysModuleEdit в поле MiniPageSchemaUId записи, соответствующей разделу [Продукты] (рис.3).
Рис. 3. — Значение уникального идентификатора мини-карточки в таблице SysModuleEdit
ВАЖНО
Поскольку изменения выполнялись непосредственно в базе данных, то для того, чтобы bpm'online узнала о них, необходимо выполнить повторный вход в систему. В некоторых случаях требуется перекомпиляция приложения из раздела [Конфигурация].
3. Отображение полей основного объекта
Добавьте приведенный ниже исходный код в схему модели представления мини-карточки, созданную на первом шаге.
define("UsrProductMiniPage", ["UsrProductMiniPageResources"], function(resources) { return { entitySchemaName: "Product", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, attributes: { "MiniPageModes": { "value": [this.Terrasoft.ConfigurationEnums.CardOperation.ADD] } }, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "parentName": "MiniPage", "propertyName": "items", "name": "Name", "values": { "isMiniPageModelItem": true, "layout": { "column": 0, "row": 1, "colSpan": 24 }, "controlConfig": { "focused": true } } }, { "operation": "insert", "parentName": "MiniPage", "propertyName": "items", "name": "Code", "values": { "isMiniPageModelItem": true, "layout": { "column": 0, "row": 2, "colSpan": 24 } } } ]/**SCHEMA_DIFF*/ }; });
Здесь атрибуту MiniPageModes, объявленному в базовой схеме, присваивается массив, содержащий коллекцию необходимых операций, выполняемых мини-карточкой. В массив модификаций diff добавлены два объекта, которые конфигурируют поля [Название] и [Код].
К СВЕДЕНИЮ
Если кроме операции добавления новой записи требуется отображение мини-карточки на странице раздела (см. "Создание мини-карточки"), то в массив, присваиваемый атрибуту MiniPageModes, также необходимо добавить значение this.Terrasoft.ConfigurationEnums.CardOperation.VIEW.
ВАЖНО
Если обязательные колонки объекта не указаны в массиве diff, то они будут выведены внизу мини-карточки.
4. Добавить системную настройку HasProductMiniPageAddMode
В разделе [Системные настройки] дизайнера системы добавьте системную настройку со следующими свойствами (рис. 4):
- [Название] ([Name]) — "HasProductMiniPageAddMode".
- [Код] ([Code]) — "HasProductMiniPageAddMode".
- [Тип] ([Type]) — "Логическое" ("Boolean").
- [Значение по умолчанию] ([Default value]) — признак установлен.
Рис. 4. — Системная настройка
В результате выполнения примера при добавлении нового продукта будет отображаться мини-карточка с двумя полями (рис. 5).
Рис. 5. — Мини-карточка добавления продукта
После сохранения мини-карточки соответствующая запись появится в реестре раздела (рис. 6).
Рис. 6. — Запись в разделе [Продукты]
ВАЖНО
Запись в реестре раздела будет отображена только после обновления страницы браузера. Чтобы запись отображалась сразу же после сохранения мини-карточки, необходимо добавить соответствующую функциональность в схему мини-карточки и страницы раздела, используя механизм сообщений ("Sandbox. Обмен сообщениями между модулями").