Наименование | Описание |
---|---|
TN-объект | Универсальный объект с контент типом application/json. На доменном уровне объект обрабатывается классом TunableObjectImpl, на rest - TunableObjectREST. |
TN_UNID | Идентификатор НР-объекта в формате Replica-TN:UNID. Например, 44257B2B0049DECF-TN:21239088D63BEED143257E6D0033A47E |
CMJ | Сервер приложения |
submit | Настройка НР-кнопка , в которой поле «Действие» имеет значение submit. Предназначена для отправки post запросом ответа на сервер. |
cancel | Настройка НР-кнопка , в которой поле «Действие» имеет значение cancel |
УП | Условие применения |
Конфигурация TN-объекта
TN-объект конфигурируется с типом объекта TUNABLE_OBJECT.
Для обработки TN-объекта в CMJ используется классы
Для специальной обработки операций чтения, сохранения, когда нужно подгрузить в TN-карту сложные структуры или добавить дополнительную ссылку в rest-представление объекта, можно использовать дополнительную обработку. Для этого разрабатываются классы-стратегии, имплементирующие интерфейсы:
Стратегии работают каждый со своей схемой TN-объекта.
Интерфейс TN-объекта AnyTunableObject содержит методы setEntity(), entity() для установки и считывания объекта в прикладном интерфейсе. Метод setEntity необязателен при обработке.
Структура меню передается в едином формате Формы как для прикладного объекта, так и для коллекции. Элементы меню передаются в секции с идентификатором "RootMenu".
Действия задаются через Кнопки в секции "RootMenu". Для задания вложенности действия меню используются вложенные секции.
В форме НР-объекта задается секция с идентификатором "RootMenu".
Для коллекции вводится схема. Схема задается в настройке дескриптора. Задача схемы - передача меню действий коллекции через форму. Таким образом, в форме схемы коллекции может быть только одна секция. Это секция с идентификатором "RootMenu". Когда для заполнения TN-карты меню коллекции требуется хардкод, то предлагается разработать класс-стратегию StrategyRESTGet (см. пример GetSOPersonCollectionRESTStrategy).
В секции "RootMenu" можно задать действие. Через создание системного действия в секции "RootMenu" можно переопределять некоторые визуальные параметры данного системного действия. Например, переопределить видимость, иконку, порядок следования. Для переопределения системного действия необходимо создать кнопку с аналогичным идентификатором в секции "RootMenu". Для переопределения порядка следования используется тег position. Идентификаторы системных действий, а также правила нумерации действий см. в в таблице Таблица общесистемных действий меню.
Для конфигурации клиентской операции с TN-объектом используется кнопки создание, сохранение, открытие TN-объектов
В теге create указывается схема нового объекта и тип БД + комплект.
В простом случае, когда нужно просто показать форму для ввода реквизитов нового TN-объекта, одной настройки достаточно.
В иных случаях, когда нужен, например, набор диалогов или информационных сообщений требуется разработать класс-стратегию StrategyCreateDraft.
В теге create-child указывается схема нового объекта.
В схеме подчиненного TN-объекта должно быть предусмотрено свойство $parentunid с типом String. При формировании черновика подчиненного TN-объекта система положит в это поле идентификатор родителя, чтобы при сохранении сделать его ответным к родительскому TN-объекту.
В простом случае, когда нужно отобразить форму нового объекта без предварительных диалогов, одной настройки достаточно.
В иных случаях, когда нужно самостоятельно сформировать черновик, например, с предварительным набором диалогов или информационных сообщений, требуется разработать класс-стратегию StrategyCreateDraft. В этом случае установку значения в $parentunid дочернего объекта следует выполнять в классе-стратегии самостоятельно при передаче ресурса черновика в результат. Идентификатор родителя в классе-стратегии можно получить из объекта params через data.resourceid
Операция создания объекта в той же БД,что и выделенный объект, и на том же уровне иерархии, если выделенный объект - дочерний.
В теге create-sibling указывается схема нового объекта.
В простом случае, когда нужно отобразить форму нового объекта без предварительных диалогов, одной настройки достаточно.
Когда нужен, например, набор диалогов или информационных сообщений, требуется разработать класс-стратегию StrategyCreateDraft. Идентификатор контекстного объекта в классе-стратегия можно получить из объекта params через data.resourceid
В теге create-copy указывается схема нового объекта.
Cледует определить форму с mode=copy, как и ранее при настройке полей копирования.
В простом случае, когда нужно отобразить форму нового объекта без предварительных диалогов, одной настройки достаточно.
Когда нужен, например, набор диалогов или информационных сообщений требуется разработать класс-стратегию StrategyCreateDraft. Идентификатор контекстного объекта в классе-стратегия можно получить из объекта params через data.resourceid
Данный сценарий используется когда нужно модифицировать группу полей объекта, открытого в режиме редактирования, через диалог.
В теге change-subobject указывается схема диалога. В ресурсе диалога должно быть свойство mode с типом String и значением "dialog". Для передачи подмножества полей из объекта в диалог и обратно в схеме диалога должно быть задано это же подмножество полей. Например, для свойства control.date из объекта должно быть такое же свойство в схеме диалога - control.date.
Как работает сценарий:
Для TN-объекта конфигурируется два действия сохранения: Сохранение нового объекта (тег save), Сохранение существующего объекта (тег save-existing). При конфигурации данных действий следует правильно установить условие применения. Действие "Сохранение нового объекта" (тег save) может быть доступно только в новом еще несохраненном объекте. Действие "Сохранение существующего объекта" (тег save-existing) может быть доступно только в сохраненному объекте. Оба действия не должны быть доступны в режиме чтения.
Создается тег save или save-existing. Задается соответствующее условие применения.
В rest-ресурсе объекта должна быть предусмотрена ссылка с rel=edit. Объект ссылки должен быть сформирован через TunableObjectREST.Reference.
Данное действие может быть сконфигурировано для: 1) TN-объекта в режиме чтения, 2) для выделенного в коллекции документа.
Создается тег open-edit. Задается соответствующее условие применения.
Для случая конфигурации кнопки на форме открытого объекта: В простом случае, когда на форме TN-объекта не нужно задавать сложное УП на кнопку "Редактировать" не обязательно создавать данное действие. Кнопка "Редактировать" является системной и подгружается в меню на основании наличия ссылки с rel=edit. Но, если в меню (секции RootMenu) решили задать данное действие, то системную кнопку "Редактировать" следует скрыть, иначе на форме появятся две кнопки Редактировать.
Для случая, когда нужно по кнопке открыть документ в режиме редактирования из коллекции, настройка в секции RootMenu обязательна.
Для данной операции на сервере предусмотрен обработчик, имплементирующий интерфейс TunableOperation.
В теге operation указывается название вызываемого обработчика операций:
Если в сценарии сохранения объекта требуется добавить диалог(и), то нужно разработать класс-стратегию StrategyRESTUpdate.
В стратегии в result нужно передать ресурс диалога через метод setDialog. В этом случае клиент отобразит диалог и сохранения объекта не произойдет.
Схема диалога должна наследовать со схемы DialogForSave.
При нажатии на кнопку submit диалога клиент повторно отправляет запрос на сохранение объекта. В этом случае в метод стратегии внутри ресурса сохраняемого объекта в элементе $clientContext придет ресурс диалога с клиента с введенными пользователем данными.
В схеме сохраняемого объекта должно быть предусмотрено свойство с фиксированным именем $clientContext (см. пример схема SOEmployee). Схема $clientContext соответствовать структуре ClientContext (см. Передача параметров с клиента на сервер) в части задания элемента data.resource. Схема диалога задается в data.resource.
Каждый раз по кнопке submit диалога клиент будет возвращать внутри ресурса сохраняемого объекта в элементе $clientContext структуру, в поле data.resource которой будет ресурс диалога с клиента.
Далее при повторных попытках сохранить объект из диалога по кнопке submit, в ресурс диалога можно передавать порядковый номер диалога (если диалогов более одного) для последующей обработки в стратегии.
Если в диалог не передать кнопку submit, то пользователь не сможет вызвать операцию сохранения повторно. По кнопке cancel диалог закрывается.
См. пример в объекте "Справочник должностей". Схема PositionClassifier. В схеме PositionClassifier свойство. $clientContext. Через св. $clientContext идет обмен ресурсом диалога между клиентом и сервером при сохранении. См. обработчик сохранения UpdateBeforePositionClassifierRESTStrategy.
Коллекции TN-объектов конфигурируются так же, как и для других объектов. Единственное отличие - это передача в self идентификатора в формате TN_UNID.