Перейти к содержанию

Отправка типовой задачи специального вида из плагина Chronos

Отправка типовой задачи специального вида из плагина Chronos

Пусть существует плагин Chronos, который должен по некоторым условиям отправить пользователю или группе пользователей задание с функциями типовых задач (отправка, подзадачи, визуализация). Такой плагин может быть серверным и работать от имени пользователя System.

// мы в серверном плагине Chronos, работаем от имени пользователя System var unityContainer = await new UnityContainer().RegisterServerForPluginAsync(); var cardRepository = unityContainer.Resolve<ICardRepository>();

// загружаем карточку var getResponse = cardRepository.Get(new CardGetRequest { CardID = cardID }); if (!getResponse.ValidationResult.IsSuccessful()) { // ошибка, надо залогировать и выйти return; }

var card = getResponse.Card;

// создаём бизнес-процесс и задачу "Постановка задачи" с указанным ID = mainTaskRowID Guid mainTaskRowID = Guid.NewGuid();

var storeInfo = new Dictionary<string, object>(StringComparer.Ordinal); storeInfo.SetStartingProcessName(WfHelper.ResolutionProcessName); storeInfo.SetStartingProcessTaskRowID(mainTaskRowID);

card.RemoveAllButChanged(); var storeRequest = cardRepository.Store(new CardStoreRequest { Card = card, Info = storeInfo }); if (!storeRequest.ValidationResult.IsSuccessful()) { // ошибка, надо залогировать и выйти return; }

// завершаем "Постановку задачи" с вариантом "Отправить" getResponse = cardRepository.Get(new CardGetRequest { CardID = cardID }); if (!getResponse.ValidationResult.IsSuccessful()) { // ошибка, надо залогировать и выйти return; }

card = getResponse.Card;

var task = card.Tasks.FirstOrDefault(x => x.RowID == mainTaskRowID); if (task == null) { // ошибка, надо залогировать и выйти return; }

// кому отправляем, любая роль, в т.ч. конкретный сотрудник Guid roleID = ...; string roleName = ...;

var performerRows = task.Card.Sections[WfHelper.ResolutionPerformersSection].Rows; var performer = performerRows.Add(); performer.RowID = Guid.NewGuid(); performer[WfHelper.ResolutionPerformerOrderField] = Int32Boxes.Zero; performer[WfHelper.ResolutionPerformerRoleIDField] = roleID; performer[WfHelper.ResolutionPerformerRoleNameField] = roleName; performer.State = CardRowState.Inserted;

// комментарий string comment = ...; var resolutionFields = task.Card.Sections[WfHelper.ResolutionSection].Fields; resolutionFields[WfHelper.ResolutionCommentField] = comment;

// планируемая дата завершения double durationInDays = ...; resolutionFields[WfHelper.ResolutionDurationInDaysField] = durationInDays; resolutionFields[WfHelper.ResolutionPlannedField] = null;

// вид задачи resolutionFields[WfHelper.ResolutionKindIDField] = new Guid("..."); // из справочника видов задач resolutionFields[WfHelper.ResolutionKindCaptionField] = "Тестовое задание";

// вариант завершения - отправить task.OptionID = DefaultCompletionOptions.SendToPerformer; task.Action = CardTaskAction.Complete; task.State = CardRowState.Deleted;

card.RemoveAllButChanged(); storeRequest = cardRepository.Store(new CardStoreRequest { Card = card }); if (!storeRequest.ValidationResult.IsSuccessful()) { // ошибка, надо залогировать и выйти return; }

Back to top