Example #1
0
        /// <summary>
        /// InternalExecute
        /// </summary>
        protected override void InternalExecute()
        {
            var workItem   = this.WorkItem.Get(ActivityContext);
            var id         = this.WorkItemId.Get(ActivityContext);
            var fieldValue = this.ItemValue.Get(ActivityContext);
            var fieldName  = this.FieldName.Get(ActivityContext);

            switch (this.Action)
            {
            case WorkItemTrackingAction.GetById:
                var returnedWorkItem = WorkItems.GetWorkItemById(ProjectCollection, id);
                returnedWorkItem.Reset();
                returnedWorkItem.Open();
                this.WorkItem.Set(ActivityContext, returnedWorkItem);
                break;

            case WorkItemTrackingAction.Save:
                ArgumentValidation.ValidateObjectIsNotNull(workItem, "WorkItem");

                if (workItem.IsDirty)
                {
                    try
                    {
                        workItem.Save();
                    }
                    catch (WITClient.ValidationException e)
                    {
                        throw new InvalidOperationException("Work item is not valid", e);
                    }
                }

                break;

            case WorkItemTrackingAction.Reset:
                ArgumentValidation.ValidateObjectIsNotNull(workItem, "WorkItem");
                workItem.Reset();

                break;

            case WorkItemTrackingAction.GetFieldValue:
                ArgumentValidation.ValidateObjectIsNotNull(workItem, "WorkItem");
                ArgumentValidation.ValidateStringIsNotEmpty(fieldName, "FieldName");
                if (workItem.Fields.Contains(fieldName))
                {
                    fieldValue = workItem.Fields[fieldName].Value;
                    this.ItemValue.Set(ActivityContext, fieldValue);
                }
                else
                {
                    throw new ArgumentException("Field name is not valid for this work item", fieldName);
                }

                break;

            case WorkItemTrackingAction.SetFieldValue:
                ArgumentValidation.ValidateObjectIsNotNull(workItem, "WorkItem");
                ArgumentValidation.ValidateStringIsNotEmpty(fieldName, "FieldName");
                ArgumentValidation.ValidateObjectIsNotNull(fieldValue, "FieldValue");
                if (workItem.Fields.Contains(fieldName))
                {
                    workItem.Fields[fieldName].Value = fieldValue;
                }
                else
                {
                    throw new ArgumentException("Field name is not valid for this work item", fieldName);
                }

                break;

            default:
                throw new ArgumentException("Action not supported");
            }
        }