- Создатель Васильев Антон, отредактировано 22.11.2022
Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Сравнить с текущим просмотр истории страницы
« Предыдущий Версия 3 Следующий »
Сервис для работы с мониторами процессов, их создания, получения, обновления, удаления.
ru.intertrust.cmj.rest.tunable.object.processes.service.MonitorProcessingServiceImpl
extends: -
properties
name | return value | description |
---|---|---|
createMonitor | ProcessMonitor | Создание нового монитора для проесса, выполняющегося на сервере processTitle createMonitor(String processTitle, String currentStageTitle, String handlerName, TunableObjectREST.Resource data, Map<String, String> params, String httpSessionId, String clientId) |
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> | Возвращает мониторы всех процессов в системе |
getAllByPerson | IProcessMonitor | List<IProcessMonitor> getAllByPerson(SOPersonSystem person); Возвращает мониторы для всех запущенных процессов указанного пользователя @param - SOPersonSystem - person - владелец процессов |
getAllByClientId | List<IProcessMonitor> getAllByClientId(String clientId); Возвращает все мониторы проессовпо идентификатору активной вкладки браузера | |
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 | /** * Запись в монитор разультатов работы обработчика * * @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 | |
sendToClient | Отправка представления монитора на клиент по WebSocket с целью выполнения действий на клиенте * * @param monitorId */ void sendToClient(String monitorId); | |
sendToClientForSelectNewActiveSession | Отправка предсталения монитора всем клиентам для выбора клиента, который будет стартовать автоматическую операцию. void sendToClientForSelectNewActiveSession(IProcessMonitor monitor, SOPersonSystem person, boolean needSendToNotActiveSessions); | |
setActiveSessionAndSentAutoStartCommand | Установка активной websocket-сессии и отправка клиенту по этой сессии команды для автозапуска операции на клиенте @param monitorId - монитор процесса | |
startClientOperation | boolean | /** * Выдача разрешения клиенту на обработку процесса, если процесс еще не занят другим клиентом. * При этом статус меняется с WAIT_DATA_FROM_USER на CLIENT_PROCESSING * * @param monitorId - UNID монитора процесса * @param clientId - идентификатор клиента * @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 - UNID монитора процесса * @param total - сколько необходимо для завершения операции, в % * @param done - сколько пройдено, в % */ void updateProgress(String monitorId, int total, int done); | |
writeErrorDialog | /** * Запись ошибки, блокирующей продолжение процесса. * Формирование завершащего диалога для показа ошибки * * @param monitorId - id монитора процесса * @param errorText - текст ошибки */ void writeErrorDialog(String monitorId, String errorText, String stacktrace); | |
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. Он содержит методы для формирования и обработки НР-диалогов.
Статус | В РАБОТЕ |
---|---|
Комментарий |
Методы, свойства, внутренние классы
- Нет меток