Сравнение версий
Ключ
- Эта строка добавлена.
- Эта строка удалена.
- Изменено форматирование.
Информация | ||
---|---|---|
| ||
Сервис для работы с мониторами процессов, их создания, получения, обновления, удаления. |
Примечание | ||
---|---|---|
| ||
ru.intertrust.cmj.rest.tunable.object.processes.service.MonitorProcessingServiceImpl |
Подсказка | ||
---|---|---|
| ||
extends: - |
properties
name | return value | description |
---|---|---|
createMonitorget | ProcessMonitor |
methods
name | return value | description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
createMonitor | ProcessMonitor | ProcessMonitor createMonitor(String processTitle, String currentStageTitle, String handlerName, TunableObjectREST.Resource data, Создание нового монитора для проесса, выполняющегося на сервере @param processTitle - - заголовок процесса @return монтитор процесса | |||||||||
deleteMonitor | boolean | Удаляет монитор из хранилища @param monitorId | |||||||||
getMonitor | IProcessMonitor | getAll | List<IProcessMonitor>MonitorProcessingService | Получения сервиса из JS-обработчика | |||||||
getData | TunableObjectREST.Resource | Возвращает ресурс, необходимый клиенту для использования на текущем шаге процесса Параметры:
| |||||||||
deleteMonitor | Boolean | Удаляет монитор из хранилища Параметры:
| |||||||||
getMonitor | IProcessMonitor | Возвращает монитор процесса | |||||||||
getAll | List<IProcessMonitor> | Возвращает мониторы всех процессов в системе | |||||||||
getAllByPerson | List<IProcessMonitor List<IProcessMonitor> getAllByPerson(SOPersonSystem person); > | Возвращает мониторы для всех запущенных процессов указанного пользователя@param Параметры:
| |||||||||
getAllByClientId | List<IProcessMonitor> getAllByClientId(String clientId);getAllByClientId | List<IProcessMonitor> | Возвращает все мониторы проессовпо процессов по идентификатору активной вкладки браузера * Параметры:
| getParams(String monitorId) | getParams(String monitorId); Возвращает патаметры процесса | getData | TunableObjectREST.Resource getData(String monitorId); Возвращает ресурс, необходимый клиенту для испльзования на текущем шаге процесса | setStatus | Установка опрдленного статуса процесса setStatus(String monitorId, IProcessMonitor.Status status); * @param monitorId | setServerStatus | Установка опредленного статуса серверной обработки процесса. * * @param monitorId * @param serverStatus устанавливамый статус */ void setServerStatus(String monitorId, IProcessMonitor.ServerStatus serverStatus); |
prepareForHandler | ProcessMonitor | /** * Заполнение монитора данными перед запуском обработчика * * @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); | |||||||||
updateByHandler | /** * getParams | Map<String, String> | Возвращает параметры процесса Параметры:
|
methods
name | return value | description | ||||
---|---|---|---|---|---|---|
updateProgress | Обновление прогресса операции, выполняющейся на сервере и отправка её на клиент по WebSocket Параметры: | |||||
updateByHandler | Запись в монитор разультатов работы обработчика ** @param monitorId * @param command Параметры:
void updateByHandler(String monitorId, IProcessMonitor.Command command, String currentStageTitle, TunableObjectREST.Resource data, Map<String, String> params); | |||||
notifyClients(String monitorId); | Отправка updateStatus | Устанавливает статус в монитор с сохранением в базу Параметры:
| ||||
setStatus | Установка опредленного статуса процесса Параметры:
| |||||
setServerStatus | Установка опредленного статуса серверной обработки процесса Параметры:
| |||||
notifyClients | Отправка представления монитора всем клиентам по WebSocket с целью информирования о текущем состоянии процесса * @param monitorIdПараметры:
| |||||
sendToClient | Отправка представления монитора на клиент по WebSocket с целью выполнения действий на клиенте ** @param monitorId */ void sendToClient(String monitorId); Параметры:
| |||||
sendToClientForSelectNewActiveSession | Отправка предсталения монитора всем клиентам для выбора клиента, который будет стартовать автоматическую операцию.
*
* <p> *
*
*/ void sendToClientForSelectNewActiveSession(IProcessMonitor monitor, SOPersonSystem person, boolean needSendToNotActiveSessions); | |||||
setActiveSessionAndSentAutoStartCommand | Установка активной websocket-сессии и отправка клиенту по этой сессии команды для автозапуска операции на клиенте@param monitorId - монитор процесса Параметры:
*/ String activeHttpSessionId, String activeClientId); | |||||
startClientOperation | boolean | /** * startClientOperation | Boolean | Выдача разрешения клиенту на обработку процесса, если процесс еще не занят другим клиентом. * При этом статус меняется с WAIT_DATA_FROM_USER на CLIENT_PROCESSING ** @param Параметры:
* @return true, если пазрешение выдано. false - если нет. */ boolean startClientOperation(String monitorId, String clientId); | releaseClientOperation | /** *
|
releaseClientOperation | Освобождение монитора клиентом, если пользователь отказался продолжать процесс прямо сейчас, но не превал её. * При этом статус меняется с CLIENT_PROCESSING на WAIT_DATA_FROM_USER ** @param monitorId - UNID монитора процесса */ void releaseClientOperation(String monitorId, boolean needNotify); | updateProgress | /** * Обновление прогресса операции, выполняющейся на сервере и отправка её на клиент по WebSocket * * @param monitorId Параметры:
* @param done - сколько пройдено, в % */ void updateProgress(String monitorId, int total, int done); | writeErrorDialog | /** *
| |
writeErrorDialog | Запись ошибки, блокирующей продолжение процесса. * Формирование завершащего диалога для показа ошибки ** @param monitorId - id Параметры:
void writeErrorDialog(String monitorId, String errorText, String stacktrace); markFinished
| |||||
markFinished | Помечает процесс заверешённым void markFinished(String monitorId);Параметры:
| |||||
markAborted | Помечает процесс прерванным. Нужно для запуска отката изменений * Параметры:
void markAborted(String monitorId); | |||||
markDeleted | Помечает процесс удалённым. такой монитор не возвращается клиенту, * | 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. Он содержит методы для формирования и обработки НР-диалогов.
Параметры:
|
Свойства страницы | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
панель | |
---|---|
Методы, свойства, внутренние классы
|