/// <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"); } }