НАЧАЛО >> Виртуальная справка >> Workflow VirtualRef📄 Скачать в DOCX
Workflow задает статусы и разрешенные переходы вопроса внутри проекта VirtualRef. Проект WORKFLOWPROJECT выбирает workflow по проектному типу объекта вопроса или через fallback-соответствие v920 -> workflow; если отдельный ключ workflow не задан, используется ключ проекта. Сам workflow хранится записью WORKFLOW. Статусы и переходы редактируются из карточки выбранного workflow и хранятся отдельными управляемыми записями, поэтому их можно настраивать и защищать стандартными правами объекта.
| Код | Статус | Статус для 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.
| Переход | Из | В | Источник 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 используется как отдельное действие Отправить ответ и меняет статус только после того, как подготовленный ответ уже сохранен.
Ответственный хранится в поле 8. Кнопка Взять в работу выполняет переход take, а вспомогательная кнопка Назначить мне выполняет keep-status переход assignResponsible.
Наблюдатели хранятся в повторяемом поле 9 и индексируются префиксом VRWATCHER=. Кнопки Наблюдать, Не наблюдать и Убрать выполняются через keep-status workflow-переходы. История изменений ведется в стандартном поле ИРБИС 907: ^A дата, ^T время, ^B исполнитель, ^C этап, ^D действие, ^E исходный статус, ^F новый статус, ^G комментарий. Для workflow-событий дополнительно заполняются ^W workflow, ^P проект и ^N переход.