Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
iconfalse

Сервис для работы с мониторами процессов, их создания, получения, обновления, удаления.

Примечание
iconfalse

ru.intertrust.cmj.rest.tunable.object.processes.service.MonitorProcessingServiceImpl

Подсказка
iconfalse

extends: -

properties

name

return value

description

get

MonitorProcessingServiceПолучения сервиса из JS-обработчика

getData

TunableObjectREST.Resource

Возвращает ресурс, необходимый клиенту для использования на текущем шаге процесса

Параметры:

  • monitorId - String - UNID монитора процесса

deleteMonitor

Boolean

Удаляет монитор из хранилища

Параметры:

  • monitorId - String - UNID монитора процесса

getMonitor

IProcessMonitorВозвращает монитор процесса

getAll

List<IProcessMonitor>Возвращает мониторы всех процессов в системе

getAllByPerson

List<IProcessMonitor>

Возвращает мониторы для всех запущенных процессов указанного пользователя

Параметры:

getAllByClientId

List<IProcessMonitor>

Возвращает все мониторы проессовпо идентификатору активной вкладки браузера

Параметры:

  • clientId - String - идентификатор сессии web-клиента. Привязан к вкладке браузера

getParams

Map<String, String>

Возвращает параметры процесса

Параметры:

  • monitorId - String - UNID монитора процесса

methods

name

return value

description

updateProgress


Обновление прогресса операции, выполняющейся на сервере и отправка её на клиент по WebSocket

Параметры:

  • monitorId - String - UNID монитора процесса
  • total - Integer - сколько необходимо для завершения операции, в %
  • done - Integer - сколько пройдено, в %

updateByHandler


Запись в монитор разультатов работы обработчика

Параметры:

  • monitorId - String - UNID монитора процесса
  • command - IProcessMonitor.Command - команда для выполения веб-клиентом
  • currentStageTitle - String - заголовок текущего состояния процесса для отображения
  • data  - TunableObjectREST.Resource - ресурс, необходимый для следующего шаге процесса
  • params - Map<String,String> - параметры процесса, необходимые на следующих шагах проесса
deleteMonitorboolean

Удаляет монитор из хранилища

@param monitorId
     * @return - true, если монитор удалён

getMonitorIProcessMonitor
getAll  List<IProcessMonitor>Возвращает мониторы всех процессов в системе
getAllByPersonIProcessMonitor

    List<IProcessMonitor> getAllByPerson(SOPersonSystem person);

Возвращает мониторы для всех запущенных процессов указанного пользователя

@param - SOPersonSystem - person - владелец процессов
     * @return - мониторы всех процесов, запущенных указанным ползователем

getAllByClientId

  List<IProcessMonitor> getAllByClientId(String clientId);

Возвращает все мониторы проессовпо идентификатору активной вкладки браузера
     *
     * @param clientId - идентификатор сессии web-клиента. Привязан к вкладке браузера
     * @return

getParams(String monitorId)

getParams(String monitorId);

Возвращает патаметры процесса
     *
     * @param monitorId
     * @return параметры процесса

getData

    TunableObjectREST.Resource getData(String monitorId);

Возвращает ресурс, необходимый клиенту для испльзования на текущем шаге процесса
     *
     * @param monitorId
     * @return

setStatus

Установка опрдленного статуса процесса

setStatus(String monitorId, IProcessMonitor.Status status);

* @param monitorId
     * @param status    устанавливамый

updateStatus


Устанавливает статус в монитор с сохранением в базу

Параметры:

setStatus


Установка опредленного статуса процесса

Параметры:

setServerStatus


updateByHandler/**
     * Запись в монитор разультатов работы обработчика
     *
     * @param monitorId
     * @param command           - команда для выполения веб-клиентом
     * @param currentStageTitle - заголовок текущего состояния процесса для отображения
     * @param data              - ресурс, необходимый для следующего шаге процесса
     * @param params            - параметры процесса, необходимые на следующих шагах проесса
     */
    void updateByHandler(String monitorId, IProcessMonitor.Command command, String currentStageTitle, TunableObjectREST.Resource data,
            Map<String, String> params);
notifyClients(String monitorId);

Установка опредленного статуса серверной обработки процесса

.
     *
     * @param monitorId
     * @param serverStatus устанавливамый статус
     */
    void setServerStatus(String monitorId, IProcessMonitor.ServerStatus serverStatus);
prepareForHandlerProcessMonitor/**
     * Заполнение монитора данными перед запуском обработчика
     *
     * @param monitorId
     * @param currentStageTitle - заголовок текущего состояния процесса для отображения
     * @param handlerName       - название обработчика, который должен вызваться в рамках процесса
     * @param data              - ресурс, необходимый для следующего шаге процесса
     * @param httpSessionId     - дентификатор http-сессии пользователя
     * @param clientId          - идентификатор сессии web-клиента. Привязан к вкладке браузера
     */
    ProcessMonitor prepareForHandler(String monitorId, String currentStageTitle, String handlerName, TunableObjectREST.Resource data,
            String httpSessionId, String clientId);

  
 Отправка

Параметры:

notifyClients


Отправка представления монитора всем клиентам по WebSocket с целью информирования о текущем состоянии процесса

* @param monitorIdПараметры:

  • monitorId - String - UNID монитора процесса

sendToClient


Отправка представления монитора на клиент по WebSocket с целью выполнения действий на клиенте

     *
     * @param monitorId
     */
    void sendToClient(String monitorId);

Параметры:

  • monitorId - String - UNID монитора процесса

sendToClientForSelectNewActiveSession


Отправка предсталения монитора всем клиентам для выбора клиента, который будет стартовать автоматическую операцию.
     * <p>
     * Выбор клиента происходит по следующей логике:     * -

  • первому попавшемуся клиенту отправляется монитор с разрешением на выполнение клиентской операции

     *
  • без привлечения внимания пользовтеля. При этом SessionId этого клиента записывается в монитор.
     * -
  • всем остальным клиентам монитор отправляется без такого разрашения.

     * <p>
     *
  • При этом, если клиент с сохраненным SessionId отключится, то берется следующий первый попавшийся клиент.

     *
     * @param monitor                     Параметры:

     * @param person                           * @param needSendToNotActiveSessions
  • needSendToNotActiveSessions - Boolean - true, если необходимо ли рассылать монитор всем клиентам
,
     */  void sendToClientForSelectNewActiveSession(IProcessMonitor monitor, SOPersonSystem person, boolean needSendToNotActiveSessions);

setActiveSessionAndSentAutoStartCommand


Установка активной websocket-сессии и отправка клиенту по этой сессии команды для автозапуска операции на клиенте@param monitorId           - монитор процесса
     * @param person              - инициатор процесса
     * @param activeWSSessionId  

Параметры:

  • monitorId - String - UNID монитора процесса
  • person - SOPersonSystem - инициатор процесса
  • activeWSSessionId - String - id webSocket-сессии для которой надо выдать разрешение для авторзапуска клиентской операции
     * @param
  • activeHttpSessionId - String - id http-сессии для которой надо выдать разрешение для авторзапуска клиентской операции
     * @param activeClientId      
  • activeClientId - String - id клиента который подключился, однозначно идентифицирует вкладку браузера.
     */
    void setActiveSessionAndSentAutoStartCommand(String monitorId, SOPersonSystem person, String activeWSSessionId,
            String activeHttpSessionId, String activeClientId);
startClientOperationboolean  /**
     *

startClientOperation

Boolean

Выдача разрешения клиенту на обработку процесса, если процесс еще не занят другим клиентом.


     *

При этом статус меняется с WAIT_DATA_FROM_USER на CLIENT_PROCESSING

     *
     * @param

Параметры:

  • monitorId - String - UNID монитора процесса
     * @param clientId  
  • clientId - String - идентификатор клиента
     * @return true, если пазрешение выдано. false - если нет.
     */
    boolean startClientOperation(String monitorId, String clientId);

releaseClientOperation


  /**
     *

Освобождение монитора клиентом, если пользователь отказался продолжать процесс прямо сейчас, но не превал её.


     *

При этом статус меняется с CLIENT_PROCESSING на WAIT_DATA_FROM_USER

     *
     * @param monitorId - UNID монитора процесса
     */
    void releaseClientOperation(String monitorId, boolean needNotify);
 
updateProgress  /**
     * Обновление прогресса операции, выполняющейся на сервере и отправка её на клиент по WebSocket
     *
     * @param monitorId

Параметры:

  • monitorId - String - UNID монитора процесса
     * @param total     - сколько необходимо для завершения операции, в %
     * @param done      - сколько пройдено, в %
     */
    void updateProgress(String monitorId, int total, int done);
writeErrorDialog  /**
     *

writeErrorDialog


Запись ошибки, блокирующей продолжение процесса.


     *

Формирование завершащего диалога для показа ошибки

     *
     * @param monitorId - id

Параметры:

  • monitorId - String - UNID монитора процесса
     * @param
  • errorText - String - текст ошибки
     */
    void writeErrorDialog(String monitorId, String errorText, String stacktrace);  markFinished
  • stacktrace - String - стек-трейс ошибки

 markFinished


Помечает процесс заверешённым

  void markFinished(String monitorId);Параметры:

  • monitorId - String - UNID монитора процесса

markAborted


Помечает процесс прерванным. Нужно для запуска отката изменений     *
     * @param monitorId - id монитора процесса

void markAborted(String monitorId);Параметры:

  • monitorId - String - UNID монитора процесса

markDeleted


Помечает процесс удалённым. такой монитор не возвращается клиенту,
     * и игнорирует попытки что-либо с ним сделать по инициативе клиента.

 *
     * @param monitorId - id монитора процесса
     */
    void markDeleted(String monitorId);

updateStatus  /**
     * Устанавливает статус в монитор с сохранением в базу
     *
     * @param monitorId - id монитора процесса
     * @param status - статус монитора
     */
    void updateStatus(String monitorId, IProcessMonitor.Status status);

5.Работа с монитором

Сервис работы с монитором подключается так:

Java-код:

@Autowired    
private MonitorProcessingService monitorService;

JS-код:

var monitorService = MonitorProcessingServiceImpl.get();

При старте обработчика необходимо изменить статус монитора

monitorService.setServerStatus(monitorId, IProcessMonitor.ServerStatus.HANDLER_PROCESSING);
В мониторе все данные можно разделить на 3 типа:

1.системные данные, например, время модификации, инициатор процесса, идентификатор сессии клиента. 

При необходимости можно их взять, получив сам монитор:

String processTitle = monitorService.getMonitor(monitorId).getTitle();

2.ресурс, передаваемый клиент, и получаемый от клиента, как правило, это НР-диалог.

Вычисление ресурса предыдущего диалога:

TunableObjectREST.Resource data = monitorService.getData(monitorId);

3.строковые параметры, в которых можно хранить любую информацию для использования в обработчиках, например UNID-ы выделенных документов, данные которые пользователь вводил в предыдущие диалоги, итд.

пример получения строкового параметра PARAM_LIST_TEMPSTORAGE_IDS - имя параметра

String listTempStorageIdsStr = monitorService.getParams(monitorId).get(PARAM_LIST_TEMPSTORAGE_IDS);

При этом есть набор констант имён системных параметров, они могут использоваться как сервером так и веб-клиентом:

/**,
* unid бороды инициатора операции
*/
INITIATOR_BEARD_UNID("initiatorBeardUnid"),
/**
* unid-ы обрабатываемых документов
*/
PARAM_IDS("ids"),
/**
* идентификатор нажатой кнопки
*/
PARAM_ACTION_REL("actionRel"),
/**
* число процентов прогресса на текущий момент
*/
PROGRESS_DONE("DONE"),
/**
* общее число процентов для вычисления прогресса в процессе (по умолчанию 100%)
*/
PROGRESS_TOTAL("TOTAL");

Во время работы серверного обработчика пользователь видит прогресс бар процесса. Можно его актуализировать указаным методом, он отпарвляет указанные знаения на веб-клиент по WebSocket.

monitorService.updateProgress(monitorId, 100, 30);
Можно отметить процесс завершённым и ничего больше не возвращать пользователю, например если пользователь его прервал. После этого можно будет больше ничего не писать в монитор:
monitorService.markFinished(monitorId);
В конце нужно обновить состояние монитора, записть в него нужнуые параметры и ресурс для следующего показа клиенту(либо другой команды). Это делается вызовом одного метода, чтобы монитор сохранялся только один раз(не считая вызовов updateProgress(...))
monitorService.updateByHandler(monitorId, IProcessMonitor.Command.SHOW_DIALOG, TITLE_FINISH, dialogResource, params);

В данном примере:

 
IProcessMonitor.Command.SHOW_DIALOG - говорит о том что веб-клеинт должен показать ресурс пользователю как НР-диалог.

Еще предусмотрена команда подписания группы документов в рамках процесса IProcessMonitor.Command.LOCKER_SIGN - в неё передаётся список id подписываемых документов во временном хранилище. подробнее Детальное описание реализации длительных (групповых) операций в CMJ#%D0%94%D0%B5%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8%D0%B4%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%28%D0%B3%D1%80%D1%83%D0%BF%D0.11

Пример формирования такого ресурса в методе класса ru.intertrust.cmj.rest.tuning.operations.approving.ApprovingGroupOperationUtils.createResourceForSign(List<String> ids, String signType, String processTitle)

TITLE_FINISH - заоловок завершения данного этапа процесса. покажется пользовалю. Например: "листы согласования успешно сформированы".

dialogResource - ресурс TunableObjectREST.Resource для команды веб-клиенту.

params - карта параметров типа Map<String, String>

6.Вспомогательные методы

Для удобства создан класс  ru.intertrust.cmj.rest.tunable.object.action.OperationHelper , в который вынесены часто используемые методы, например:

createProgressUpdatePlan(int allCount, int startValue, int finishValue) -  метод вычисляющий план обновления прогрессса операци  на основании числа обрабатываемых документов
getSignFailuresMap(TunableObjectREST.Resource data) - Парсинг Tunable-ресурса с информацией о результатах подписания в карту и формирование информации об ошибках подпсиания в виде:"id документа, который не удалось подписать" - "причина, по которой не удалось подписать"
Для работы с процессом согласования создан класс  ru.intertrust.cmj.rest.tuning.operations.approving.ApprovingGroupOperationUtils. Он содержит методы для формирования и обработки НР-диалогов.

Параметры:

  • monitorId - String - UNID монитора процесса


Свойства страницы
Статус

Статус
colourYellow
titleВ РАБОТЕ

Комментарий
панель

Методы, свойства, внутренние классы

Оглавление