Ejemplo n.º 1
0
        /// <summary>
        /// Update the work items in Target with all required field values
        /// </summary>
        /// <param name="workItemType"></param>
        /// <param name="workImport"></param>
        /// <param name="projectName"></param>
        /// <returns></returns>
        public bool PrepareAndUpdateTarget(string workItemType, string workImport, string projectName, string selectedTemplate, string userAssignment)
        {
            try
            {
                workImport = workImport.Replace("$ProjectName$", projectName);
                ImportWorkItemModel.WorkItems fetchedWIs = JsonConvert.DeserializeObject <ImportWorkItemModel.WorkItems>(workImport);

                if (fetchedWIs.count > 0)
                {
                    if (workItemType.ToLower() == "epic" || workItemType.ToLower() == "feature")
                    {
                        fetchedWIs.value = fetchedWIs.value.OrderBy(x => x.id).ToArray();
                    }
                    foreach (ImportWorkItemModel.Value newWI in fetchedWIs.value)
                    {
                        newWI.fields.SystemCreatedDate = DateTime.Now.AddDays(-3);
                        Dictionary <string, object> dicWIFields = new Dictionary <string, object>();
                        string assignToUser = string.Empty;
                        if (listAssignToUsers.Count > 0)
                        {
                            assignToUser = listAssignToUsers[new Random().Next(0, listAssignToUsers.Count)] ?? string.Empty;
                        }

                        //Test cases have different fields compared to other items like bug, Epics, etc.
                        if ((workItemType == "Test Case"))
                        {
                            //replacing null values with Empty strngs; creation fails if the fields are null
                            if (newWI.fields.MicrosoftVSTSTCMParameters == null)
                            {
                                newWI.fields.MicrosoftVSTSTCMParameters = string.Empty;
                            }

                            if (newWI.fields.MicrosoftVSTSTCMSteps == null)
                            {
                                newWI.fields.MicrosoftVSTSTCMSteps = string.Empty;
                            }

                            if (newWI.fields.MicrosoftVSTSTCMLocalDataSource == null)
                            {
                                newWI.fields.MicrosoftVSTSTCMLocalDataSource = string.Empty;
                            }

                            dicWIFields.Add("/fields/System.Title", newWI.fields.SystemTitle);
                            dicWIFields.Add("/fields/System.State", newWI.fields.SystemState);
                            dicWIFields.Add("/fields/System.Reason", newWI.fields.SystemReason);
                            dicWIFields.Add("/fields/Microsoft.VSTS.Common.Priority", newWI.fields.MicrosoftVSTSCommonPriority);
                            dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Steps", newWI.fields.MicrosoftVSTSTCMSteps);
                            dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Parameters", newWI.fields.MicrosoftVSTSTCMParameters);
                            dicWIFields.Add("/fields/Microsoft.VSTS.TCM.LocalDataSource", newWI.fields.MicrosoftVSTSTCMLocalDataSource);
                            dicWIFields.Add("/fields/Microsoft.VSTS.TCM.AutomationStatus", newWI.fields.MicrosoftVSTSTCMAutomationStatus);

                            if (newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria != null)
                            {
                                dicWIFields.Add("/fields/Microsoft.VSTS.Common.AcceptanceCriteria", newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria);
                            }

                            if (newWI.fields.SystemTags != null)
                            {
                                dicWIFields.Add("/fields/System.Tags", newWI.fields.SystemTags);
                            }

                            dicWIFields.Add("/fields/Microsoft.VSTS.Scheduling.RemainingWork", newWI.fields.MicrosoftVSTSSchedulingRemainingWork);
                        }
                        else
                        {
                            string iterationPath = projectName;
                            string boardRowField = string.Empty;

                            if (newWI.fields.SystemIterationPath.Contains("\\"))
                            {
                                iterationPath = string.Format(@"{0}\{1}", projectName, newWI.fields.SystemIterationPath.Split('\\')[1]);
                            }

                            if (!string.IsNullOrWhiteSpace(boardRowFieldName))
                            {
                                boardRowField = string.Format("/fields/{0}", boardRowFieldName);
                            }

                            if (newWI.fields.SystemDescription == null)
                            {
                                newWI.fields.SystemDescription = newWI.fields.SystemTitle;
                            }

                            if (string.IsNullOrEmpty(newWI.fields.SystemBoardLane))
                            {
                                newWI.fields.SystemBoardLane = string.Empty;
                            }

                            dicWIFields.Add("/fields/System.Title", newWI.fields.SystemTitle);
                            if (userAssignment.ToLower() != "any")
                            {
                                if (newWI.fields.SystemState == "Done")
                                {
                                    dicWIFields.Add("/fields/System.AssignedTo", assignToUser);
                                }
                            }
                            else
                            {
                                dicWIFields.Add("/fields/System.AssignedTo", assignToUser);
                            }
                            //string areaPath = newWI.fields.SystemAreaPath ?? projectName;
                            //dicWIFields.Add("/fields/System.AreaPath", areaPath);
                            dicWIFields.Add("/fields/System.Description", newWI.fields.SystemDescription);
                            dicWIFields.Add("/fields/System.State", newWI.fields.SystemState);
                            dicWIFields.Add("/fields/System.Reason", newWI.fields.SystemReason);
                            dicWIFields.Add("/fields/Microsoft.VSTS.Common.Priority", newWI.fields.MicrosoftVSTSCommonPriority);
                            dicWIFields.Add("/fields/System.IterationPath", iterationPath);
                            dicWIFields.Add("/fields/Microsoft.VSTS.Scheduling.RemainingWork", newWI.fields.MicrosoftVSTSSchedulingRemainingWork);
                            dicWIFields.Add("/fields/Microsoft.VSTS.Scheduling.Effort", newWI.fields.MicrosoftVSTSSchedulingEffort);

                            if (newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria != null)
                            {
                                dicWIFields.Add("/fields/Microsoft.VSTS.Common.AcceptanceCriteria", newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria);
                            }

                            if (newWI.fields.SystemTags != null)
                            {
                                dicWIFields.Add("/fields/System.Tags", newWI.fields.SystemTags);
                            }

                            if (newWI.fields.MicrosoftVSTSTCMParameters != null)
                            {
                                dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Parameters", newWI.fields.MicrosoftVSTSTCMParameters);
                            }

                            if (newWI.fields.MicrosoftVSTSTCMSteps != null)
                            {
                                dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Steps", newWI.fields.MicrosoftVSTSTCMSteps);
                            }

                            if (!string.IsNullOrWhiteSpace(boardRowField))
                            {
                                dicWIFields.Add(boardRowField, newWI.fields.SystemBoardLane);
                            }
                        }
                        UpdateWorkIteminTarget(workItemType, newWI.id.ToString(), projectName, dicWIFields);
                    }

                    return(true);
                }
            }
            catch (Exception ex)
            {
                logger.Debug(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + ex.Message + "\t" + "\n" + ex.StackTrace + "\n");
            }
            return(false);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Update work items links - parent child- Hyperlinks-artifact links-attachments
        /// </summary>
        /// <param name="workItemTemplateJson"></param>
        /// <returns></returns>
        public bool UpdateWorkItemLinks(string workItemTemplateJson)
        {
            try
            {
                ImportWorkItemModel.WorkItems fetchedPBIs = JsonConvert.DeserializeObject <ImportWorkItemModel.WorkItems>(workItemTemplateJson);
                string    wiToUpdate = "";
                WIMapData findIDforUpdate;
                if (fetchedPBIs.count > 0)
                {
                    foreach (ImportWorkItemModel.Value newWI in fetchedPBIs.value)
                    {
                        //continue next iteration if there is no relation
                        if (newWI.relations == null)
                        {
                            continue;
                        }

                        int    relCount = newWI.relations.Length;
                        string oldWIID  = newWI.id.ToString();

                        findIDforUpdate = wiData.Find(t => t.OldID == oldWIID);
                        if (findIDforUpdate != null)
                        {
                            wiToUpdate = findIDforUpdate.NewID;
                            foreach (ImportWorkItemModel.Relations rel in newWI.relations)
                            {
                                if (relTypes.Contains(rel.rel.Trim()))
                                {
                                    oldWIID = rel.url.Substring(rel.url.LastIndexOf("/") + 1);
                                    WIMapData findIDforlink = wiData.Find(t => t.OldID == oldWIID);

                                    if (findIDforlink != null)
                                    {
                                        string   newWIID       = findIDforlink.NewID;
                                        Object[] patchWorkItem = new Object[1];
                                        // change some values on a few fields
                                        patchWorkItem[0] = new
                                        {
                                            op    = "add",
                                            path  = "/relations/-",
                                            value = new
                                            {
                                                rel        = rel.rel,
                                                url        = _configuration.UriString + "/_apis/wit/workitems/" + newWIID,
                                                attributes = new
                                                {
                                                    comment = "Making a new link for the dependency"
                                                }
                                            }
                                        };
                                        if (UpdateLink("Product Backlog Item", wiToUpdate, patchWorkItem))
                                        {
                                        }
                                    }
                                }
                                if (rel.rel == "Hyperlink")
                                {
                                    Object[] patchWorkItem = new Object[1];
                                    patchWorkItem[0] = new
                                    {
                                        op    = "add",
                                        path  = "/relations/-",
                                        value = new
                                        {
                                            rel = "Hyperlink",
                                            url = rel.url
                                        }
                                    };
                                    bool isHyperLinkCreated = UpdateLink(string.Empty, wiToUpdate, patchWorkItem);
                                }
                                if (rel.rel == "AttachedFile")
                                {
                                    Object[] patchWorkItem = new Object[1];
                                    string   filPath       = string.Format(attachmentFolder + @"\{0}{1}", rel.attributes["id"], rel.attributes["name"]);
                                    string   fileName      = rel.attributes["name"];
                                    string   attchmentURl  = UploadAttchment(filPath, fileName);
                                    if (!string.IsNullOrEmpty(attchmentURl))
                                    {
                                        patchWorkItem[0] = new
                                        {
                                            op    = "add",
                                            path  = "/relations/-",
                                            value = new
                                            {
                                                rel = "AttachedFile",
                                                url = attchmentURl
                                            }
                                        };
                                        bool isAttachmemntCreated = UpdateLink(string.Empty, wiToUpdate, patchWorkItem);
                                    }
                                }
                                if (rel.rel == "ArtifactLink")
                                {
                                    rel.url = rel.url.Replace("$projectId$", projectId).Replace("$RepositoryId$", repositoryId);
                                    foreach (var pullReqest in pullRequests)
                                    {
                                        string key = string.Format("${0}$", pullReqest.Key);
                                        rel.url = rel.url.Replace(key, pullReqest.Value);
                                    }
                                    Object[] patchWorkItem = new Object[1];
                                    patchWorkItem[0] = new
                                    {
                                        op    = "add",
                                        path  = "/relations/-",
                                        value = new
                                        {
                                            rel        = "ArtifactLink",
                                            url        = rel.url,
                                            attributes = new
                                            {
                                                name = rel.attributes["name"]
                                            }
                                        }
                                    };
                                    bool isArtifactLinkCreated = UpdateLink(string.Empty, wiToUpdate, patchWorkItem);
                                }
                            }
                        }
                    }
                    return(true);
                }
            }
            catch (Exception ex)
            {
                logger.Debug(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") + "\t" + ex.Message + "\t" + "\n" + ex.StackTrace + "\n");
            }
            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Update the work items in Target with all required field values
        /// </summary>
        /// <param name="workItemType"></param>
        /// <param name="workImport"></param>
        /// <param name="ProjectName"></param>
        /// <returns></returns>
        public bool PrepareAndUpdateTarget(string workItemType, string workImport, string ProjectName)
        {
            //List<ColumnPost> Columns = JsonConvert.DeserializeObject<List<ColumnPost>>(workImport);
            ImportWorkItemModel.WorkItems fetchedWIs = JsonConvert.DeserializeObject <ImportWorkItemModel.WorkItems>(workImport);

            if (fetchedWIs.count > 0)
            {
                foreach (ImportWorkItemModel.Value newWI in fetchedWIs.value)
                {
                    newWI.fields.SystemCreatedDate = DateTime.Now.AddDays(-3);
                    //newWI.fields.SystemChangedDate = DateTime.Now.AddDays(-2);
                    //newWI.fields.SystemRevisedDate = DateTime.Now.AddDays(-2);
                    // UpdateWorkIteminTarget(workItemType,newWI, new String[] {"/fields/System.Title", "/fields/Microsoft.VSTS.CommonPriority","/fields/Microsoft.VSTS.CommonStackRank", "/fields/System.Description"}, new Object[] {newWI.fields.SystemTitle,newWI.fields.MicrosoftVSTSCommonPriority,newWI.fields.MicrosoftVSTSCommonStackRank,newWI.fields.SystemDescription });

                    //String[] FieldstoAdd = { }; Object[] ValuestoAdd = { };
                    Dictionary <string, object> dicWIFields = new Dictionary <string, object>();
                    string assignToUser = string.Empty;
                    if (listAssignToUsers.Count > 0)
                    {
                        assignToUser = listAssignToUsers[new Random().Next(0, listAssignToUsers.Count)];
                    }

                    //Test cases have different fields compared to other items like bug, Epics, etc.
                    if ((workItemType == "Test Case"))
                    {
                        //replacing null values with Empty strngs; creation fails if the fields are null
                        if (newWI.fields.MicrosoftVSTSTCMParameters == null)
                        {
                            newWI.fields.MicrosoftVSTSTCMParameters = string.Empty;
                        }
                        if (newWI.fields.MicrosoftVSTSTCMSteps == null)
                        {
                            newWI.fields.MicrosoftVSTSTCMSteps = string.Empty;
                        }
                        if (newWI.fields.MicrosoftVSTSTCMLocalDataSource == null)
                        {
                            newWI.fields.MicrosoftVSTSTCMLocalDataSource = string.Empty;
                        }

                        dicWIFields.Add("/fields/System.Title", newWI.fields.SystemTitle);
                        dicWIFields.Add("/fields/System.State", newWI.fields.SystemState);
                        dicWIFields.Add("/fields/System.Reason", newWI.fields.SystemReason);
                        dicWIFields.Add("/fields/Microsoft.VSTS.Common.Priority", newWI.fields.MicrosoftVSTSCommonPriority);
                        dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Steps", newWI.fields.MicrosoftVSTSTCMSteps);
                        dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Parameters", newWI.fields.MicrosoftVSTSTCMParameters);
                        dicWIFields.Add("/fields/Microsoft.VSTS.TCM.LocalDataSource", newWI.fields.MicrosoftVSTSTCMLocalDataSource);
                        dicWIFields.Add("/fields/Microsoft.VSTS.TCM.AutomationStatus", newWI.fields.MicrosoftVSTSTCMAutomationStatus);

                        if (newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria != null)
                        {
                            dicWIFields.Add("/fields/Microsoft.VSTS.Common.AcceptanceCriteria", newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria);
                        }

                        if (newWI.fields.SystemTags != null)
                        {
                            dicWIFields.Add("/fields/System.Tags", newWI.fields.SystemTags);
                        }
                        dicWIFields.Add("/fields/Microsoft.VSTS.Scheduling.RemainingWork", newWI.fields.MicrosoftVSTSSchedulingRemainingWork);
                    }
                    else
                    {
                        string iterationPath = ProjectName;
                        string boardRowField = string.Empty;

                        if (newWI.fields.SystemIterationPath.Contains("\\"))
                        {
                            iterationPath = string.Format(@"{0}\{1}", ProjectName, newWI.fields.SystemIterationPath.Split('\\')[1]);
                        }

                        if (!string.IsNullOrWhiteSpace(boardRowFieldName))
                        {
                            boardRowField = string.Format("/fields/{0}", boardRowFieldName);
                        }

                        if (newWI.fields.SystemDescription == null)
                        {
                            newWI.fields.SystemDescription = newWI.fields.SystemTitle;
                        }
                        if (string.IsNullOrEmpty(newWI.fields.SystemBoardLane))
                        {
                            newWI.fields.SystemBoardLane = string.Empty;
                        }

                        dicWIFields.Add("/fields/System.Title", newWI.fields.SystemTitle);
                        dicWIFields.Add("/fields/System.Description", newWI.fields.SystemDescription);
                        dicWIFields.Add("/fields/System.State", newWI.fields.SystemState);
                        dicWIFields.Add("/fields/System.Reason", newWI.fields.SystemReason);
                        dicWIFields.Add("/fields/Microsoft.VSTS.Common.Priority", newWI.fields.MicrosoftVSTSCommonPriority);
                        dicWIFields.Add("/fields/System.AssignedTo", assignToUser);
                        dicWIFields.Add("/fields/System.IterationPath", iterationPath);
                        dicWIFields.Add("/fields/Microsoft.VSTS.Scheduling.RemainingWork", newWI.fields.MicrosoftVSTSSchedulingRemainingWork);
                        dicWIFields.Add("/fields/Microsoft.VSTS.Scheduling.Effort", newWI.fields.MicrosoftVSTSSchedulingEffort);

                        if (newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria != null)
                        {
                            dicWIFields.Add("/fields/Microsoft.VSTS.Common.AcceptanceCriteria", newWI.fields.MicrosoftVSTSCommonAcceptanceCriteria);
                        }

                        if (newWI.fields.SystemTags != null)
                        {
                            dicWIFields.Add("/fields/System.Tags", newWI.fields.SystemTags);
                        }
                        if (newWI.fields.MicrosoftVSTSTCMParameters != null)
                        {
                            dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Parameters", newWI.fields.MicrosoftVSTSTCMParameters);
                        }
                        if (newWI.fields.MicrosoftVSTSTCMSteps != null)
                        {
                            dicWIFields.Add("/fields/Microsoft.VSTS.TCM.Steps", newWI.fields.MicrosoftVSTSTCMSteps);
                        }
                        if (!string.IsNullOrWhiteSpace(boardRowField))
                        {
                            dicWIFields.Add(boardRowField, newWI.fields.SystemBoardLane);
                        }
                    }
                    UpdateWorkIteminTarget(workItemType, newWI.id.ToString(), ProjectName, dicWIFields);
                }

                return(true);
            }
            return(false);
        }