Задание

Назначение

Предназначена для доставки на рабочие места пользователей информации о необходимости выполнения того или иного действия в рамках налаженного документооборота, а также доставки файлов, карточек и ссылок на внешние по отношению к системе Docsvision объекты.

Класс карточки

DocsVision.BackOffice.ObjectModel.Task

Для работы с карточкой предназначен сервис ITaskService, с помощью которого можно работать с заданиями. Позволяет создавать задания, настраивать и управлять ими.

Доступные операции:
  • Создание задания.

  • Управление состоянием задания.

  • Управление комментариями к заданию.

  • Управление исполнителями и контроллерами задания.

  • Управление делегированием задания.

  • Управление подписями задания.

  • Подготовка вложений задания.

  • Управление настройками задания.

  • Управление дочерними и родительскими заданиями.

Далее перечислены базовые сценарии работы с объектной моделью карточки "Задание", для которых действительно следующее:

  • Контекст объектов может быть получен в соответствии с примером, приведенным в разделе Инициализация контекста объектов.

  • Сервисы получаем стандартным способом:

    IDocumentService documentService = objectContext.GetService<IDocumentService>(); (1)
    ILinkService linkService = objectContext.GetService<ILinkService>(); (2)
    IReferenceListService referenceListService = objectContext.GetService<IReferenceListService>(); (3)
    IStaffService staffService = objectContext.GetService<IStaffService>(); (4)
    IStateService stateService = objectContext.GetService<IStateService>(); (5)
    ITaskService taskService = objectContext.GetService<ITaskService>(); (6)
    1 Сервис для работы с документами.
    2 Сервис для работы со "Справочником ссылок".
    3 Сервис для работы со списками ссылок.
    4 Сервис для работы со "Справочником сотрудников".
    5 Сервис для работы с "Конструктором состояний".
  • Для получения информации по классам и переменным, используемым в примерах, воспользуйтесь поиском.

Создание нового "Задания"

static void CreateTask()
{
 KindsCardKind kind = objectContext.GetObject<KindsCardKind>(new Guid("AB801854-70AF-4B6C-AB48-1B59B5D11AA9")); (1)

 StaffEmployee employee = objectContext.GetObject<StaffEmployee>(new Guid("00000000-0000-0000-0000-000000000000")); (2)

 Task task = taskService.CreateTask(kind); (3)
 task.MainInfo.Name = "Название задания";
 task.Description = "Дайджест созданного задания";
 task.MainInfo.Author = staffService.GetCurrentEmployee(); (4)
 taskService.AddSelectedPerformer(task.MainInfo, employee); (5)
 task.MainInfo.Priority = TaskPriority.Low; (6)
 task.MainInfo.EndDate = DateTime.Now.AddDays(1); (7)
 task.MainInfo.Content = "Данное задание является примером и не требует исполнения";
 objectContext.SaveObject(task); (8)
}
1 Получение вида для создаваемого задания. AB801854-70AF-4B6C-AB48-1B59B5D11AA9 — На исполнение.
2 Получение сотрудника, назначаемого исполнителем задания.
3 Создание задания и заполнение базовых данных.
4 Автор задания.
5 Добавление выбранного исполнителя.
6 Установка низкого приоритета.
7 Срок выполнения — "завтра".
8 Сохранение созданного задания.

Добавление файла в "Задание"

static void AddFile()
{
 string file = @"z:\Sample.docx"; (1)

 Task task = objectContext.GetObject<Task>(new Guid("00000000-0000-0000-0000-000000000000")); (2)

 ReferenceList referenceList = referenceListService.CreateReferenceList();
 task.MainInfo.ReferenceList = referenceList; (3)

 LinksLinkType linkType = linkService.FindLink("КЗ_ДополненияФайлы"); (4)

 KindsCardKind kind = objectContext.GetObject<KindsCardKind>(new Guid("F9A8D158-9884-4765-859D-31C4EFCA149D")); (5)
 Document fileCard = documentService.CreateDocument(file, kind); (6)
 fileCard.MainInfo.Name = "Файл для задания";
 objectContext.SaveObject(fileCard); (7)

 referenceListService.CreateReference(referenceList, linkType, fileCard, string.Empty, true); (8)
 objectContext.AcceptChanges();
}
1 Загружаемый файл.
2 Получение задания, в которое производится добавление файла.
3 Создание нового списка ссылок.
4 Получение типа ссылки по имени.
5 Создание карточки Файл для последующей загрузки в задание.
6 Получение вида карточки.
7 Создание документа.
8 Требуется сохранение.

Отправка Задания на исполнение

static void StartTask()
{
 Task task = objectContext.GetObject<Task>(new Guid("00000000-0000-0000-0000-000000000000")); (1)

 taskService.StartTask(task); (2)

 StatesStateMachineBranch branch = stateService.FindBranchByBuiltIn(Task.InitializationToStartedByStart, task.SystemInfo.State); (3)

 stateService.ChangeState(task, branch); (4)
}
1 Получение задания.
2 Запуск задания на исполнение.
3 Получение перехода Подготовка — Не начато.
4 Изменение состояния.

Делегирование задания

static void DelegateTask()
{
 Task task = objectContext.GetObject<Task>(new Guid("00000000-0000-0000-0000-000000000000")); (1)

 StaffEmployee newPerformer = staffService.Get(new Guid("00000000-0000-0000-0000-000000000001")); (2)

 taskService.Delegate(task, new StaffEmployee[] { newPerformer }, null, false, false, "Необходимо выполнить задание"); (3)

 stateService.ChangeState(task, stateService.FindStateByBuiltIn(Task.DelegatedState, task)); (4)
}
1 Получение задания.
2 Получение сотрудника, которому осуществляется делегирование задания.
3 Делегирование задания сотруднику "newPerformer".
4 Установка для задания состояния Делегировано.

Завершение "Задания"

static void CompleteTask()
{
 Task task = objectContext.GetObject<Task>(new Guid("00000000-0000-0000-0000-000000000000")); (1)

 BuiltInState state = taskService.CompleteTask(task, "Задание было завершено успешно"); (2)

 StatesState cancelState = stateService.FindStateByBuiltIn(state, task); (3)

 stateService.ChangeState(task, cancelState); (4)
}
1 Получение задания.
2 Завершение задания с комментарием.
3 Поиск в "Конструкторе состояний" состояния, соответствующего "встроенного" состоянию Завершено.
4 Изменение состояния.

Метод CompleteTask выполняет проверку и установку параметров, необходимых для корректного завершения задания, но фактическое изменение состояние производит метод ChangeState.

При работе с методами сервиса ITaskService нужно учитывать, что при выполнении статусных методов (отозвать, принять, отклонить и т.д.) статус самого задание не изменяется. Для непосредственной смены статуса используется метод IStateService.ChangeState(BaseCard, StatesState).