Статус

Автор

ИнтерТраст

КомментарийИсточник: https://conf.inttrust.ru:8443/pages/viewpage.action?pageId=58524562

На этой странице:

Описание

Обработка клиентских сценариев для универсальных объектов с контент типом application/json.  

Настраиваемые действия передаются как НР-действия (view.type=action) c actionType=script.  Настраиваемые действия для универсальных объектов с контент типом application/json. Для остальных типов прикладных объектов СМ, например, РКК, применяется настройка произвольной операции (п.7. по ссылке Инструкция по использованию универсального объекта с типом TUNABLE_OBJECT в разработке функционала CMJ.). 

Перечень команд: 

Алиас действия

(поле script)

Краткое название

действия

КонтекстПодробное описание действий клиентаКомментарий

createForm

Получение заготовки нового объекта

Один из вариантов:

1) коллекция без выделенного документа,

2) один или более выделенных документов в коллекции

3) документ, открытый в режиме чтения, редактирования



  1. В элементе link ресурса "Действие" (см. описание ресурса "Действие" по ссылке 07. Кастомизированные кнопки на панели действий) клиент находит ссылку с rel=http://intertrust.ru/cmj/relations#createForm.

  2. Если контекстный документ открыт в режиме редактирования и признак saveContextObject=true или признак не передан, то клиент сохраняет контекстный объект по алгоритму savePost (savePut) в зависимости от признака new ресурса (если new=true, то savePost, иначе savePut). Если сервер не выполнит сохранение, то и  операция прекращается. Далее клиент для получения заготовки объекта выполняет Get запрос на ссылку rel=http://intertrust.ru/cmj/relations#createForm. Дальнейшие действия клиента в зависимости от ответа сервера:

    1. Сервер присылает ресурс, схема которого содержит ссылку на форму+ элемент mode<>"dialog" или отсутствует.

      Действие клиента: клиент отображает объект в режиме редактирования на весь экран. Сценарий завершен.

    2. Сервер присылает ресурс, схема которого содержит ссылку на форму+ элемент mode="dialog" .

      Действие клиента: клиент отображает диалог. Ресурс диалога клиент получает из ответа сервера. В урл формы передается значение mode="dialog". Далее клиент работает со стандартным НР-диалогом.

    3. Сервер присылает ресурс, схема которого НЕ содержит ссылку на форму.

      Действие клиента: клиент выполняет Post запрос на ссылку с rel=http://intertrust.ru/cmj/relations#createForm, в тело запроса передает данные в соответствие с правилом по ссылке Передача параметров операции (выделенные документы, диалог) с клиента на сервер.  

  3. При нажатии на кнопку submit в диалоге клиент отправляет post запрос на ссылку rel=http://intertrust.ru/cmj/relations#createForm. В тело запроса передает ресурс диалога + данные клиентского контекста в соответствии с правилом по ссылке Передача параметров операции (выделенные документы, диалог) с клиента на сервер.  Дальнейшие действия клиента в зависимости от ответа сервера (см. п.2).

В п.3 в тело запроса ресурс диалога передается не в поле data.resource , а как основной.
createFormAsCopyПолучение заготовки нового объекта как копии объекта контекста

Один из вариантов:

1) один выделенный документ в коллекции

2) документ, открытый в режиме чтения, редактирования

Обработка такая же, как и для View.action=createForm, но в п .2.а) добавляются действия (подобные действия с формой copy уже реализованы в клиенте):

    1. Клиент запрашивает форму для mode="сopy".

      1. Если сервер не возвращает форму, то клиент завершает сценарий без выдачи сообщения об ошибке.
    2. Клиент копирует поля из контекстного документа в новый в соответствии с полученной формой. Сценарий завершен.


openLinkedObjectОткрытие связанного объекта

Один из вариантов:

1) один выделенный документ в коллекции

2) документ, открытый в режиме чтения или редактирования



 Для данного действия в ресурс "Действие"  передается поле linkedDocRel, в котором значение relation ссылки, по которой нужно открыть связанный объект в режиме чтения. Ссылку клиент получает из ресурса контекстного объекта или выделенного объекта в коллекции.

Правило выделения документов в коллекции:

Выделенным считается только документ в фокусе (не галка).

operationПроизвольная операция над объектом(и).

Один из вариантов:

1) один выделенный документ в коллекции  

или

более выделенных документов в коллекции

2) документ, открытый в режиме чтения или редактирования

  1. В элементе link ресурса "Действие" клиент находит ссылку с rel= http://intertrust.ru/cmj/relations#operation.
  2. Если контекстный документ открыт в режиме редактирования и признак saveContextObject=true или признак не передан, то клиент сохраняет контекстный объект по алгоритму savePost (savePut) в зависимости от признака new ресурса (если new=true, то savePost, иначе savePut). Если сервер не выполнит сохранение, то и  операция прекращается.  Далее клиент отправляет Get запрос на ссылку с rel= http://intertrust.ru/cmj/relations#operation.
  3. Дальнейшие действия клиента в зависимости от ответа сервера:
    1. Сервер присылает ресурс, схема которого содержит ссылку на форму+ элемент mode="dialog".

      Действие клиента: клиент отображает диалог. Ресурс диалога клиент получает из ответа сервера. В урл формы передается значение mode="dialog". Далее клиент выполняет работает со стандартным НР-диалогом.

    2. Сервер присылает ресурс, схема которого НЕ содержит ссылку на форму.

      Действие клиента: клиент выполняет Post запрос на ссылку   с rel= http://intertrust.ru/cmj/relations#operation. В тело запроса передает данные в соответствие с правилом по ссылке Передача параметров операции (выделенные документы, диалог) с клиента на сервер. Дальнейшие действия клиента в зависимости от ответа сервера (см. п.3).

    3. Сервер не присылает ресурс (данный пустой ответ сервер присылает только на Post запросы данного сценария).

      Действие клиента: клиент переполучает коллекцию, если контекст - коллекция, закрывает окно объекта, если контекст - объект. Сценарий завершен.

    4. Сервер присылает ресурс, схема которого содержит ссылку на форму+ элемент mode="read" или mode="edit". Если mode отсутствует, то считаем,что режим чтения.

      Действие клиента:

      Клиент отображает присланный ресурс с режиме, соответствующем значению mode. Если в присланном ресурсе реквизит closeContextObject=true, то перед отображением итогового ресурса клиент закрывает контекстный объект (закрытие контекстного объекта актуально только для случая, когда контекстом является открытий ресурс документа, т.е. не коллекция). Сценарий завершен.

    5. Сервер присылает ресурс результата поиска("application/vnd.intertrust.cm.search-wait-results+json").

      Действие клиента: клиент отображает присланный ресурс как результат простого/расширенного поиска.

    6. [M] Сервер присылает монитор ("application/vnd.intertrust.cm.processes.monitor+json").

      Действие клиента: клиент завершает текущую настраиваемую операцию, обновляет перечень текущий процессов пользователя.

  4. При нажатии на кнопку submit в диалоге клиент отправляет Post запрос на ссылку из ресурса диалога с rel=http://intertrust.ru/cmj/relations#operation. В тело запроса передает ресурс диалога+ данные клиентского контекста в соответствии с правилом по ссылке Передача параметров операции (выделенные документы, диалог) с клиента на сервер.    Дальнейшие действия клиента в зависимости от ответа сервера (см. п.3).
[M] Поддерживается работа с мониторами асинхронных процессов.
savePostСохранение нового объекта1) документ, открытый в режиме редактирования
  1. В ресурсе контекстного документа клиент находит ссылку с rel= edit.

  2. Клиент отправляет post запрос на ссылку с rel= edit. В тело запроса передает ресурс. В данном случае клиент выполняет стандартную операцию сохранения ресурса, при которой в ресурс передаются вложения.

    1. Если в ответ на post сервер присылает ресурс, в котором элемент mode<>"dialog" или отсутствует, то клиент отображает ресурс по ссылке self, которая приходит в ответе. Клиент открывает ресурс в режиме чтения на весь экран. Сценарий завершен.

    2. Если в ответ на post сервер присылает ресурс, в котором элемент mode="dialog",  то клиент отображает диалог. Ресурс диалога клиент получает из ответа сервера. В урл формы передается значение mode=dialog. Далее клиент выполняет работает со стандартным НР-диалогом.

  3. При нажатии на кнопку submit в диалоге клиент отправляет post запрос на ссылку c rel= edit. ,   В тело запроса передает основной ресурс+ данные клиентского контекста в соответствии с правилом по ссылке Передача параметров операции (выделенные документы, диалог) с клиента на сервер.  В данном случае клиент выполняет стандартную операцию сохранения ресурса, при которой в ресурс передаются вложения.

        1. Далее действия клиента такие же как в п. 2a, b.


В ресурсе диалога сервер должен вернуть запрос на получение клиентского контекста с ключевым словом data.resource (подробнее Передача параметров операции). Это нужно для того, чтобы по submit Из диалога клиент передал в тело запроса не сам диалог, а основной ресурс с диалогом внутри (в поле data.resource).
savePutСохранение существующего объекта1) документ, открытый в режиме редактирования
  1. В ресурсе контекстного документа клиент находит ссылку с rel= edit.

  2. Клиент отправляет put запрос на ссылку с rel= edit. В тело запроса передает ресурс. В данном случае клиент выполняет стандартную операцию сохранения ресурса, при которой в ресурс передаются вложения.

    1. Если в ответ на put сервер присылает ресурс, в котором элемент mode<>"dialog" или отсутствует, то клиент отображает ресурс по ссылке self, которая приходит в ответе. Клиент открывает ресурс в режиме чтения на весь экран. Сценарий завершен.

    2. Если в ответ на put сервер присылает ресурс, в котором элемент mode="dialog", то клиент отображает диалог.Ресурс диалога клиент получает из ответа сервера. В урл формы передается значение mode=dialog. Далее клиент выполняет работает со стандартным НР-диалогом.

  3. При нажатии на кнопку submit в диалоге клиент отправляет put запрос на ссылку c rel= edit. , В тело запроса передает основной ресурс+ данные клиентского контекста в соответствии с правилом по ссылке Передача параметров операции (выделенные документы, диалог) с клиента на сервер.  

        1. Далее действия клиента такие же как в п. 2a, b.
В ресурсе диалога сервер должен вернуть запрос на получение клиентского контекста с ключевым словом data.resource (подробнее Передача параметров операции). Это нужно для того, чтобы по submit Из диалога клиент передал в тело запроса не сам диалог, а основной ресурс с диалогом внутри (в поле data.resource).
updateSubObject

Модификация без сохранения документа с использованием recalc

(см. 03. Вызов операций через recalс)

1) документ, открытый в режиме редактирования
  1. В элементе link ресурса "Действие" (см. описание ресурса "Действие" по ссылке 07. Кастомизированные кнопки на панели действий) клиент находит ссылку с rel= http://intertrust.ru/cmj/relations#param.
  2. Клиент запрашивает с сервера по ссылке с rel= http://intertrust.ru/cmj/relations#param ресурс параметров с полем mode=dialog.
  3.  В соответствии с мэппингом полей (по совпадению имен полей) клиент копирует значение полей из контекстного ресурса в ресурс параметров (03. Вызов операций, которые изменяют (без сохранения) поля документа, открытого в режиме редактирования через recalс).
  4. При наличии среди измененных полей ресурса параметров recalc-полей, выполняется recalc для ресурса параметров.
  5. Клиент отображает форму и редактирует ресурс параметров.
  6. При нажатии на кнопку submit в диалоге выполняется обратный мэппинг данных из ресурса параметров в контекстный ресурс. При наличии среди измененных полей контекстного ресурса recalc-полей, выполняется recalc для контекстного ресурса. В случае, когда измененных recalc полей более одного клиент передает в параметр changedField несколько полей.


updateLinkedDoc

Выбор документов через диалог "Добавлдение связи" без сохранения документа с использованием recalc

(см. 03. Вызов операций через recalс)

1) документ, открытый в режиме редактирования
  1. В элементе link ресурса "Действие" (см. описание ресурса "Действие" по ссылке 07. Кастомизированные кнопки на панели действий) клиент находит ссылку с rel= http://intertrust.ru/cmj/relations#param.
  2. Клиент запрашивает с сервера по ссылке с rel= http://intertrust.ru/cmj/relations#param ресурс параметров.
  3. Клиент отображает диалог "добавления связей", но с учётом параметров переданных в ресурсе, для получения областей поиска и коллекций для выбора документа клиент использует ссылки которые пришли в поле link ресурса параметров, а не из точки входа. Ссылки берутся по тем же relation, что и при типовой операции добавления связей.
  4. При нажатии на кнопку "Выбрать" в диалоге клиент вкладывает данные из ресурса параметров в поле контекстного ресурса, которое было указано в ref в кнопке и, если в этом поле установлен признак recalcIfChanged= true, вызывает recalc с измененным этого поля.


editОткрытие выделенного документа в режиме редактирования

1) Документ, выделенный в коллекции

2) Документ, открытый в режиме чтения



  1. Для документа из коллекции клиент считывает объект из node.
  2. Клиент ищет в линках документа ссылку с rel=edit.
  3. Если ссылка с rel=edit присутствует, то клиент выполняет полноэкранное открытие документа в режиме редактирования. Повторно считывать объект по ссылке rel=edit в этом пункте не нужно.
  4. Если ссылка с rel=edit отсутствует, то клиент выдает сообщение "Недостаточно прав для выполнения операции."

Правило выделения документов в коллекции:

Выделенным считается только документ в фокусе (не галка).

Для контекста " Документ, открытый в режиме чтения", если данное действие будет передано в меню, то со стороны сервера системная кнопка "Редактировать" должна быть скрыта. Скрытие системных кнопок задается признаком hidden для кнопки с соот. кодом из таблицы Таблица общесистемных действий меню.

showDialogПоказ диалога на основании ресурса, заранее полученного от серверанет привязки к контексту

Применяется в рамках асинхронных процессов.

  1. [M] в объекте "монитор", переданном от сервера, клиент находит поле command = showDialog
  2. клиент находит в поле link в мониторе ссылку с rel = http://intertrust.ru/cmj/relations#operation и запрашивает по ней ресурс с mode="dialog"(с типом application/json).
  3. по ссылке из ресурса клиент запрашивает схему и форму. Показывает пользователю диалог.
  4. При нажатии пользователем кнопки submit клиент отправляет на сервер POST-запрос по ссылке, взятой из ресурса с rel = http://intertrust.ru/cmj/relations#operation. В теле запроса передаётся заполненный ресурс
  5. [M] Сервер возвращает клиенту либо объект "монитор", либо новый ресурс с mode="dialog", который нужно показать в диалоге, в котором также должна быть ссылка с rel = http://intertrust.ru/cmj/relations#operation.

Применяется в рамках асинхронных процессов, не может быть привязан к НР-кнопке в ActionBar-e.


[M] Работа с мониторами асинхронных процессов.

lockerSignПодписание набора документов с использованием Locker-а.

Применяется в рамках асинхронных процессов.

  1. [M] в объекте "монитор", переданном от сервера, клиент находит поле command = lockerSign
  2. клиент находит в поле link в мониторе ссылку с rel = http://intertrust.ru/cmj/relations#operation и запрашивает по ней ресурс с информацией для подписания(объект с типом application/json).
  3. Клиент берет из присланного все необходимые данные. Запускает на клиенте процесс подписания с привлечением пользователя и использованием сервисов CMJ.
    Алгоритм работы web-клиента:
    1. Из монитора берет ссылку для получения представления подписываемых данных.  Возвращает информацию о подписываемых данных в сгруппированном виде: content-type = "application/vnd.intertrust.cmj.locker+json;type=documentlist.by.policy".
    2. Клиент скачивает файлы из документов на локальную машину для формирования ЭП.
    3. Клиент отображает последовательно диалоги с представлением подписываемой информации. Каждый диалог соответствует конкретной политике подписи. Если для всех подписываемых документов используется одна политика подписи, то диалог будет один.
    4. Для каждой группы документов, соответствующей политике подписи, запрашивается необходимая для подписи информация: политика подписи,
    5. Формируется ЭП для каждого документа и отправляется на сервер несколькими запросами - с использованием существующего сервиса, обрабатывающего несколько документов по одной политике.
    6. Формируются протоколы создания ЭП, с использованием уже существующего сервиса.
    7. В остальном алгоритм не отличается от стандартной операции подписания документов.

  4. Результат работы записывается в переданный ранее ресурс.
  5. Клиент в этом же ресурсе ищет в поле link ссылку с rel = http://intertrust.ru/cmj/relations#operation и отправляет POST-запрос по этой ссылке. В теле запроса передаётся заполненный ресурс
  6. [M] Сервер возвращает клиенту либо объект "монитор" для продолжения либо завершения процесса.

Применяется в рамках асинхронных процессов, не может быть привязан к НР-кнопке в ActionBar-e.


[M] Работа с мониторами асинхронных процессов.


Если в диалоге требуется наличие нескольких кнопок submit, то НР-кнопки Submit должны быть привязаны к любому свойству с типом boolean. При нажатии на одну из кнопок submit клиент должен установить в поле, которое привязано к кнопке, значение true.

Во всех сценариях в случае когда сервер выдает ошибку 400, клиент отображает сообщение ошибки по-прежнему, с учетом параметра hideSystemInformation.