private static WorkItem ParseOrdinal(XmlNode workItemNode, WorkItem workItem) { var ordinal = SelectNodeValueOrDefault(workItemNode, "@ordinal", null); if(!String.IsNullOrEmpty(ordinal)) { workItem = workItem.UpdateOrdinal(XmlConvert.ToInt32(ordinal)); } return workItem; }
private void Create(WorkItem newWorkItem) { var leafStep = WorkflowRepository.GetLeafStep(newWorkItem.Path); if (leafStep.Type != WorkStepType.Begin) { throw new InvalidOperationException("Can only create work items in begin step"); } var classes = WorkflowRepository.GetWorkItemClasses(leafStep); newWorkItem = newWorkItem.MoveTo(leafStep, _timeSource.GetTime()).UpdateClasses(classes); WorkStep transientStep; if (WorkflowRepository.IsWithinTransientStep(leafStep, out transientStep)) { var parentItem = GetTransientParentWorkItem(transientStep); WorkflowRepository.UpdateWorkItem(parentItem.UpdateStatus(WorkItemStatus.ExpandLocked)); newWorkItem = newWorkItem.MoveTo(leafStep, _timeSource.GetTime()).UpdateParent(parentItem, WorkItemParentType.Expanded); foreach (var workItemClass in newWorkItem.Classes) { foreach (var rootClass in WorkItemClass.FindRootClasses(workItemClass)) { newWorkItem = newWorkItem.AddClass(rootClass); } } } else if (WorkflowRepository.IsWithinExpandStep(leafStep)) { throw new InvalidOperationException("Cannot create item directly under expand step"); } if (!newWorkItem.Ordinal.HasValue) { newWorkItem = newWorkItem.UpdateOrdinal(WorkflowRepository.GetNextOrdinal(newWorkItem)); } WorkflowRepository.CreateWorkItem(newWorkItem); }
private void Create(WorkItem newWorkItem) { var leafStep = WorkflowRepository.GetLeafStep(newWorkItem.Path); if (leafStep.Type != WorkStepType.Begin) { throw new InvalidOperationException("Can only create work items in begin step"); } var classes = WorkflowRepository.GetWorkItemClasses(leafStep); newWorkItem = newWorkItem.MoveTo(leafStep,_timeSource.GetTime()).UpdateClasses(classes); WorkStep transientStep; if (WorkflowRepository.IsWithinTransientStep(leafStep, out transientStep)) { var parentItem = GetTransientParentWorkItem(transientStep); WorkflowRepository.UpdateWorkItem(parentItem.UpdateStatus(WorkItemStatus.ExpandLocked)); newWorkItem = newWorkItem.MoveTo(leafStep,_timeSource.GetTime()).UpdateParent(parentItem,WorkItemParentType.Expanded); foreach (var workItemClass in newWorkItem.Classes) { foreach (var rootClass in WorkItemClass.FindRootClasses(workItemClass)) { newWorkItem = newWorkItem.AddClass(rootClass); } } } else if (WorkflowRepository.IsWithinExpandStep(leafStep)) { throw new InvalidOperationException("Cannot create item directly under expand step"); } if (!newWorkItem.Ordinal.HasValue) { newWorkItem = newWorkItem.UpdateOrdinal(WorkflowRepository.GetNextOrdinal(newWorkItem)); } WorkflowRepository.CreateWorkItem(newWorkItem); }