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

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

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

Если требуется программно завершить задание, необходимо написать следующий метод:

/// <summary> /// Завершает задание. /// </summary> /// <param name="cardID">ID карточки</param> /// <param name="taskID">ID задание, которое требуется завершить</param> /// <param name="taskTypeID">ID типа задания</param> /// <param name="sessionUserID">ID пользователя из текущей сессии</param> /// <param name="sessionUserName">Иья пользователя из текущей сессии</param> /// <param name="comment">Коментарий при завершении задания</param> /// <param name="db">объект DbManager</param> /// <param name="cardMetadata">Метаинформация, необходимая для использования типов карточек совместно с пакетом карточек</param> /// <param name="cardRepository">Репозиторий для управления карточками</param> private void CompleteTask( Guid cardID, Guid taskID, Guid taskTypeID, Guid sessionUserID, string sessionUserName, string comment, DbManager db, ICardMetadata cardMetadata, ICardRepository cardRepository) { db.BeginTransaction();

var validationResult = new ValidationResultBuilder();

this.container.Resolve<ICardTransactionStrategy>() .ExecuteInWriterLock((Guid)cardID, CardComponentHelper.DoNotCheckVersion, validationResult, p => { // создаём запрос на получение информации по карточке от сервиса карточек. var getRequest = new CardGetRequest { CardID = cardID, GetMode = CardGetMode.ReadOnly, RestrictionFlags = CardGetRestrictionFlags.RestrictFiles | CardGetRestrictionFlags.RestrictTasks | CardGetRestrictionFlags.RestrictTaskHistory };

// загружаем карточку var getResponse = cardRepository.Get(getRequest);

if (!validationResult.IsSuccessful()) { logger.Error(validationResult); p.ReportError = true; return; }

var card = getResponse.Card;

// очищаем список всех заданий карточки card.Tasks.Clear();

// запрашиваем задание var taskContextList = cardGetStrategy.TryLoadTaskInstances( (Guid)cardID, card, db, cardMetadata, validationResult, sessionUserID, loadCalendarInfo: false, taskRowIDList: new Guid[] { taskID } );

if (taskContextList.Count == 0) { p.ReportError = true; return; }

var taskToComplete = card.Tasks[0];

// если пользователь входит в роль задания // завершаем задание if (taskToComplete.IsPerformer) { // Получаем секции задания var taskContext = taskContextList[0]; cardGetStrategy.LoadSections(taskContext);

string cardDigest; CardStoreRequest request; CardStoreResponse response;

// завершаем задание taskToComplete.Action = CardTaskAction.Complete; taskToComplete.State = CardRowState.Deleted;

// устанавливаем комментарий при завершении задания согласования // или при завершении задачи if (taskTypeID == DefaultTaskTypes.KrApproveTypeID) { taskToComplete.Card.Sections["KrTask"].Fields["Comment"] = comment; } else if (taskTypeID == DefaultTaskTypes.WfResolutionTypeID) { taskToComplete.Card.Sections[WfHelper.ResolutionSection] .Fields[WfHelper.ResolutionCommentField] = comment; }

taskToComplete.Flags = taskToComplete.Flags | CardTaskFlags.HistoryItemCreated;

// устанавливаем пользователя, если задание не взято в работу // для того чтобы были заполнены поля карточки "Согласовали" и "Не согласовали" // на вкладке "Процесс согласования" if (taskToComplete.StoredState == CardTaskState.Created) { taskToComplete.UserID = sessionUserID; taskToComplete.UserName = sessionUserName; }

// cоздаёт подписанный токен безопасности для заданной информации по карточке // с указанием прав для процесса согласования var token = tokenProvider.CreateToken(card.ID, card.Version); token.Set(card.Info);

// получаем Digest для заданной карточки, // или null, если Digest неизвестен или не требуется. cardDigest = cardRepository.GetDigest(card);

// удаляем информацию обо всех полях или строках всех секций карточки, // которые не были изменены card.RemoveAllButChanged();

request = new CardStoreRequest { Card = card };

// устанавливаем Digest для сохранения в историю действий с карточкой request.SetDigest(cardDigest);

// сохраняем карточку response = cardRepository.Store(request);

if (!response.ValidationResult.IsSuccessful()) { logger.Error(response.ValidationResult); p.ReportError = true; return; }

db.CommitTransaction(); } else { logger.Trace("Task cannot be completed. User is not performer."); p.ReportError = true; } }); }

Back to top