/// <summary> /// Sets the resource assignments for this task. Assumes 100% allocation for each resource /// </summary> /// <param name="userNames">The list of user names as they are displayed in the Hansoft client. Assumes strings.</param> public void SetResourceAssignmentsFromUserStrings(IList userNames) { Project project = Project.GetProject(MainProjectID); List <Resource> resources = new List <Resource>(); foreach (string rs in userNames) { string trimmed = rs.Trim(); User user = project.Members.Find(u => u.Name == trimmed); if (user != null) { resources.Add(user); } else { User groupMember = project.Members.Find(u => u.Groups.Find(g => g.Name == trimmed) != null); if (groupMember != null) { Group group = groupMember.Groups.Find(g => g.Name == trimmed); resources.Add(group); } } } HPMTaskResourceAllocation allocation = new HPMTaskResourceAllocation(); allocation.m_Resources = new HPMTaskResourceAllocationResource[resources.Count]; for (int i = 0; i < resources.Count; ++i) { allocation.m_Resources[i] = new HPMTaskResourceAllocationResource(); allocation.m_Resources[i].m_PercentAllocated = 100; allocation.m_Resources[i].m_ResourceID = resources.ElementAt(i).UniqueID; } HPMUniqueID taskID = SdkSession.TaskRefGetTask(UniqueID); Session.TaskSetResourceAllocation(taskID, allocation, true, EHPMTaskSetStatusFlag.None); }
/// <summary> /// Sets the resource assignments for this task. Assumes 100% allocation for each resource /// </summary> /// <param name="userNames">The list of user names as they are displayed in the Hansoft client. Assumes strings.</param> public void SetResourceAssignmentsFromUserStrings(IList userNames) { Project project = Project.GetProject(MainProjectID); List<Resource> resources = new List<Resource>(); foreach (string rs in userNames) { string trimmed = rs.Trim(); User user = project.Members.Find(u => u.Name == trimmed); if (user != null) resources.Add(user); else { User groupMember = project.Members.Find(u => u.Groups.Find(g => g.Name == trimmed) != null); if (groupMember != null) { Group group = groupMember.Groups.Find(g => g.Name == trimmed); resources.Add(group); } } } HPMTaskResourceAllocation allocation = new HPMTaskResourceAllocation(); allocation.m_Resources = new HPMTaskResourceAllocationResource[resources.Count]; for (int i = 0; i < resources.Count; ++i) { allocation.m_Resources[i] = new HPMTaskResourceAllocationResource(); allocation.m_Resources[i].m_PercentAllocated = 100; allocation.m_Resources[i].m_ResourceID = resources.ElementAt(i).UniqueID; } HPMUniqueID taskID = SdkSession.TaskRefGetTask(UniqueID); Session.TaskSetResourceAllocation(taskID, allocation, true, EHPMTaskSetStatusFlag.None); }
private void UpdateColumn(HPMUniqueID projectID, HPMUniqueID taskID, HPMUInt32 colType, string newValue, List<string> multiselections) { try { m_VirtSession.ResourceImpersonate(m_ResourceID, EHPMDataHistoryClientOrigin.CustomSDK, m_UpdatedFromWeb); switch (colType) { case (uint)EHPMProjectDefaultColumn.Risk: { m_VirtSession.TaskSetRisk(taskID, (EHPMTaskRisk)Convert.ToInt32(newValue)); } break; case (uint)EHPMProjectDefaultColumn.Confidence: { m_VirtSession.TaskSetConfidence(taskID, (EHPMTaskConfidence)Convert.ToInt32(newValue)); } break; case (uint)EHPMProjectDefaultColumn.Severity: { m_VirtSession.TaskSetSeverity(taskID, (EHPMTaskSeverity)Convert.ToInt32(newValue)); } break; case (uint)EHPMProjectDefaultColumn.BugPriority: { m_VirtSession.TaskSetAgilePriorityCategory(taskID, (EHPMTaskAgilePriorityCategory)Convert.ToInt32(newValue)); } break; case (uint)EHPMProjectDefaultColumn.ItemName: { m_VirtSession.TaskSetDescription(taskID, newValue); } break; case (uint)EHPMProjectDefaultColumn.CommittedToSprint: { HPMUniqueID linkedToSprintID = new HPMUniqueID(Convert.ToInt32(newValue)); HPMUniqueID taskrefid = m_VirtSession.TaskGetMainReference(linkedToSprintID); m_VirtSession.TaskSetLinkedToSprint(taskID, taskrefid); } break; case (uint)EHPMProjectDefaultColumn.MilestoneTag: { HPMUniqueID linkedToMilestoneID = new HPMUniqueID(Convert.ToInt32(newValue)); HPMUniqueID taskrefid = m_VirtSession.TaskGetMainReference(linkedToMilestoneID); HPMTaskLinkedToMilestones milestones = new HPMTaskLinkedToMilestones(); Array.Resize(ref milestones.m_Milestones, 1); milestones.m_Milestones[0] = taskrefid; m_VirtSession.TaskSetLinkedToMilestones(taskID, milestones); } break; case (uint)EHPMProjectDefaultColumn.Hyperlink: { m_VirtSession.TaskSetHyperlink(taskID, newValue); } break; case (uint)EHPMProjectDefaultColumn.DetailedDescription: { m_VirtSession.TaskSetDetailedDescription(taskID, newValue); } break; case (uint)EHPMProjectDefaultColumn.StepsToReproduce: { m_VirtSession.TaskSetStepsToReproduce(taskID, newValue); } break; case (uint)EHPMProjectDefaultColumn.Comments: PostNewCommentOnTask(taskID, newValue, m_ResourceID); break; case (uint)EHPMProjectDefaultColumn.CCCommentsTo: { HPMTaskCommentsOptions options = new HPMTaskCommentsOptions(); Array.Resize(ref options.m_CCNotificationsTo, multiselections.Count); for (int i = 0; i < multiselections.Count; ++i) { HPMUniqueID resource = new HPMUniqueID(Convert.ToInt32(multiselections[i])); HPMResourceReference reference = new HPMResourceReference(); reference.m_ID = resource; if (m_VirtSession.ResourceGroupUtilResourceGroupExists(resource)) reference.m_ResourceType = EHPMResourceGroupingType.ResourceGroup; else reference.m_ResourceType = EHPMResourceGroupingType.Resource; options.m_CCNotificationsTo[i] = reference; } m_VirtSession.TaskSetCommentsOptions(taskID, options); } break; case (uint)EHPMProjectDefaultColumn.AssignedTo: { HPMTaskResourceAllocation oldAllocation = m_VirtSession.TaskGetResourceAllocation(taskID); HPMTaskResourceAllocation resourceAllocation = new HPMTaskResourceAllocation(); Array.Resize(ref resourceAllocation.m_Resources, multiselections.Count); for (int i = 0; i < multiselections.Count; ++i) { HPMTaskResourceAllocationResource resource = new HPMTaskResourceAllocationResource(); HPMUniqueID rid = new HPMUniqueID(Convert.ToInt32(multiselections[i])); resource.m_ResourceID = rid; resource.m_PercentAllocated = 100; foreach (HPMTaskResourceAllocationResource oldresource in oldAllocation.m_Resources) { // if the resource was previously allocated we use the old allocation percent, otherwise set it to 100% if (resource.m_ResourceID == oldresource.m_ResourceID) { resource.m_PercentAllocated = oldresource.m_PercentAllocated; } } resourceAllocation.m_Resources[i] = resource; } m_VirtSession.TaskSetResourceAllocation(taskID, resourceAllocation, true, EHPMTaskSetStatusFlag.All); } break; case (uint)EHPMProjectDefaultColumn.WorkRemaining: { m_VirtSession.TaskSetWorkRemaining(taskID, Convert.ToInt32(newValue) + 1); } break; case (uint)EHPMProjectDefaultColumn.BugStatus: { HPMInt32 state = Convert.ToInt32(newValue); // Can only change to new status if workflow allows it if (CanProgressToNewStatus(taskID, m_ResourceID, projectID, state)) { m_VirtSession.TaskSetWorkflowStatus(taskID, state, EHPMTaskSetStatusFlag.DoAutoAssignments | EHPMTaskSetStatusFlag.DoAutoCompletion); } } break; default: { // custom column HPMProjectCustomColumnsColumn customColumn = m_VirtSession.ProjectGetCustomColumn(projectID, colType); bool doautoassignments = false; string data = ""; switch (customColumn.m_Type) { case EHPMProjectCustomColumnsColumnType.DateTime: case EHPMProjectCustomColumnsColumnType.DateTimeWithTime: { try { DateTime parsedDate = DateTime.Parse(newValue); data = m_VirtSession.UtilEncodeCustomColumnDateTimeValue(ToHpmTime(parsedDate)); } catch (FormatException error) { SetErrorMessage("Internal error", error.Message); return; } } break; case EHPMProjectCustomColumnsColumnType.Resources: { HPMResourceDefinitionList resourcesToEncode = new HPMResourceDefinitionList(); Array.Resize(ref resourcesToEncode.m_Resources, multiselections.Count); for (int i = 0; i < multiselections.Count; ++i) { HPMUniqueID resource = new HPMUniqueID(Convert.ToInt32(multiselections[i])); HPMResourceDefinition resourceDef = new HPMResourceDefinition(); resourceDef.m_ID = resource; if (m_VirtSession.ResourceGroupUtilResourceGroupExists(resource)) resourceDef.m_GroupingType = EHPMResourceGroupingType.ResourceGroup; else resourceDef.m_GroupingType = EHPMResourceGroupingType.Resource; resourcesToEncode.m_Resources[i] = resourceDef; } data = m_VirtSession.UtilEncodeCustomColumnResourcesValue(resourcesToEncode, projectID); } break; case EHPMProjectCustomColumnsColumnType.IntegerNumber: case EHPMProjectCustomColumnsColumnType.FloatNumber: case EHPMProjectCustomColumnsColumnType.MultiLineText: case EHPMProjectCustomColumnsColumnType.Hyperlink: case EHPMProjectCustomColumnsColumnType.Text: { data = newValue; } break; case EHPMProjectCustomColumnsColumnType.DropList: { data = (newValue == "0") ? "" : newValue; doautoassignments = true; } break; case EHPMProjectCustomColumnsColumnType.MultiSelectionDropList: { StringBuilder builder = new StringBuilder(); for (int i = 0; i < multiselections.Count; ++i) { if (builder.Length > 0) builder.Append(";"); string value = (multiselections[i] == "0") ? "" : multiselections[i]; builder.Append(value); } data = builder.ToString(); doautoassignments = true; } break; // Exercise: add missing types here } m_VirtSession.TaskSetCustomColumnData(taskID, colType, data, doautoassignments); } break; } } catch (HPMSdkException error) { SetErrorMessage("Could not update task data.", error.ErrorAsStr()); } catch (HPMSdkManagedException error) { SetErrorMessage("Could not update task data.", error.ErrorAsStr()); } finally { m_VirtSession.ResourceImpersonate(m_NoUserID, EHPMDataHistoryClientOrigin.CustomSDK, m_NoMessage); } }