Workflow VirtualRef


НАЧАЛО >> Виртуальная справка >> Workflow VirtualRef📄 Скачать в DOCX


Workflow задает статусы и разрешенные переходы вопроса внутри проекта VirtualRef. Проект WORKFLOWPROJECT выбирает workflow по проектному типу объекта вопроса или через fallback-соответствие v920 -> workflow; если отдельный ключ workflow не задан, используется ключ проекта. Сам workflow хранится записью WORKFLOW. Статусы и переходы редактируются из карточки выбранного workflow и хранятся отдельными управляемыми записями, поэтому их можно настраивать и защищать стандартными правами объекта.

1. Статусы

Код Статус Статус для API Цвет на карте
0 Новый вопрос 0 - Новое серый
1 Вопрос в обработке 1 - В работе синий
2 Выполнено 2 - Выполнено зеленый
3 В списке частозадаваемых вопросов 2 - Выполнено зеленый
4 Отклонено 3 - Отклонено красный

Статусы настраиваются записями типа WORKFLOWSTATUS в модуле WorkflowStatus.

Поле Назначение
1^A ключ workflow
1^B код статуса
1^C название статуса
1^D активность: 1 - активен, 0 - скрыт
1^E порядок сортировки
1^F признак начального статуса
1^K признак финального статуса
1^L числовой статус для API: 0 - Новое, 1 - В работе, 2 - Выполнено, 3 - Отклонено; от этого значения зависит цвет статуса на карте workflow
1^M координата X на карте workflow
1^N координата Y на карте workflow

Отбор записей по очередям больше не задается флагами статусов. Для этого используются WorkflowFilter и WorkflowFilterScheme.

2. Переходы

Переход Из В Источник ALLOWAPPLY Назначение
take 0 1 ALLOWANSWER взять вопрос в работу
editAnswer 1 и итоговые, кроме FAQ текущий ALLOWANSWER отредактировать и сохранить ответ без смены статуса
finish 1 2 ALLOWANSWER отправить подготовленный ответ и завершить вопрос
return 2, 4 1 ALLOWANSWER вернуть вопрос в работу
reject 0, 1 4 ALLOWANSWER отклонить вопрос
faq 2 3 ALLOWMARKFAQ опубликовать как FAQ
unfaq 3 2 ALLOWMARKFAQ снять публикацию FAQ
assignResponsible * текущий ALLOWANSWER назначить текущего пользователя ответственным
watch * текущий ALLOWWATCH добавить текущего пользователя в наблюдатели
unwatch * текущий ALLOWWATCH удалить текущего пользователя из наблюдателей
unlinkUser * текущий ALLOWASK убрать вопрос из списка вопросов пользователя

Переходы настраиваются записями типа WORKFLOWTRANSITION в модуле WorkflowTransition.

Поле Назначение
1^A ключ workflow
1^B ключ перехода
1^C название перехода, отображается на кнопке действия
1^D исходные статусы; в редакторе выбираются из списка статусов workflow, внутри записи хранятся коды через запятую или *
1^E целевой статус; в редакторе выбирается из списка статусов workflow, внутри записи хранится код
1^F активность: 1 - активен, 0 - скрыт
1^G порядок сортировки
1^H CSS-класс кнопки
1^I старое право проекта, используется только для переноса прав в ALLOWAPPLY
1^J screenKey экрана Workflow; если пусто, переход выполняется без отдельного запроса данных
1^K имя condition-формата; переход разрешен, если формат возвращает непустое значение, не 0, не false и не нет
1^L не используется
1^M keepStatus: 1 - переход не меняет статус и использует текущий статус как целевой; поле 1^E в этом режиме не требуется
2 упорядоченный список post-functions перехода: тип gbl или command, ключ действия, порядок и параметры

Список выбора статусов в карточке перехода строится по текущему ключу workflow в поле 1^A. Если ключ workflow изменен у уже открытой карточки, сохраните запись и откройте ее снова, чтобы список статусов перестроился для нового workflow.

Доступ к выполнению перехода проверяется правом ALLOWAPPLY на записи WORKFLOWTRANSITION. Старые проектные права в таблице выше используются только как источник групп, которым при синхронизации системного JSON выдается ALLOWAPPLY на соответствующие переходы. ФЛК отдельно в переходе не настраивается: она выполняется штатно при сохранении записи. Если нужна проверка доступности кнопки до сохранения, используйте condition-формат.

Карта workflow открывается из редактора записи WORKFLOW через общий action Workflow/WorkflowOverview и показывает статусы и переходы выбранного рабочего процесса.

Переходы выполняются через общий workflow engine. Он проверяет маршрут, право и condition, обновляет состояние записи в 113^A=LINK^B=WORKFLOW, синхронизирует доменные поля, выполняет post-functions и сохраняет вопрос один раз в конце перехода.

Post-functions на первом этапе поддерживают два типа:

Тип Назначение
gbl сценарий глобальной корректировки из разрешенного MNU, выполняется над рабочей копией вопроса
command специальная workflow-функция модуля из __call/Workflow/*; список строится автоматически по классам команд

Workflow-command получает DTO WorkflowContext и должна возвращать WorkflowCommandResult. Классы таких функций наследуются от ObjectModuleExternalFunctionWorkflow, чтобы контракт выполнения перехода был единым для всех модулей.

Переход take использует command VirtualRef.AssignResponsible: она назначает ответственного из параметра user, а если параметр не указан - текущего пользователя. Keep-status переходы assignResponsible, watch, unwatch и unlinkUser используют command VirtualRef.AssignResponsible, VirtualRef.AddWatcher, VirtualRef.RemoveWatcher и VirtualRef.UnlinkUser.

Экран перехода с запросом данных открывается по настройке screenKey, заданной в записи перехода. Переход editAnswer с screenKey=answer запускает общий экран Workflow/WorkflowScreen, который находит запись WorkflowScreen и открывает he3 по рабочему листу virtualrefanswer.ws. Черновик создается через Workflow/InitWorkflowScreenDraft, сохранение выполняется через Workflow/ApplyWorkflowScreen: данные WS штатно попадают в запись через he3, а затем workflow применяет переход. Для VirtualRef дополнительная доменная логика ответа сведена к post-function VirtualRef.ApplyAnswerAuthor, которая записывает автора ответа. Переход finish используется как отдельное действие Отправить ответ и меняет статус только после того, как подготовленный ответ уже сохранен.

3. Ответственный, наблюдатели и история

Ответственный хранится в поле 8. Кнопка Взять в работу выполняет переход take, а вспомогательная кнопка Назначить мне выполняет keep-status переход assignResponsible.

Наблюдатели хранятся в повторяемом поле 9 и индексируются префиксом VRWATCHER=. Кнопки Наблюдать, Не наблюдать и Убрать выполняются через keep-status workflow-переходы. История изменений ведется в стандартном поле ИРБИС 907: ^A дата, ^T время, ^B исполнитель, ^C этап, ^D действие, ^E исходный статус, ^F новый статус, ^G комментарий. Для workflow-событий дополнительно заполняются ^W workflow, ^P проект и ^N переход.