private void updateWorkItem(Ticket source, WorkItem workItem)
{
var ticketTitle = workItem.Id + " - " + workItem.Title;
onDetailedProcessing(ticketTitle);
if (source.HasParent)
{
var parentWorkItem = findWorkItem(source.Parent);
if (parentWorkItem != null)
{
try
{
var workItemStore = (WorkItemStore) tfs.GetService(typeof (WorkItemStore));
var linkType = workItemStore.WorkItemLinkTypes[CoreLinkTypeReferenceNames.Hierarchy];
parentWorkItem.Links.Add(new WorkItemLink(linkType.ForwardEnd, workItem.Id));
}
catch (Exception linkException)
{
importSummary.Warnings.Add(string.Format("Failed to update parent link for '{0}'.", ticketTitle));
importSummary.Warnings.Add(linkException.Message);
}
}
}
if (source.HasLinks)
{
var workItemStore = (WorkItemStore) tfs.GetService(typeof (WorkItemStore));
if (workItemStore.WorkItemLinkTypes.Contains("System.LinkTypes.Related"))
{
var linkType = workItemStore.WorkItemLinkTypes["System.LinkTypes.Related"];
var linkTypeEnd = workItemStore.WorkItemLinkTypes.LinkTypeEnds[linkType.ForwardEnd.Name];
foreach (var link in source.Links)
{
var linkedWorkItem = findWorkItem(link.LinkedTo);
if (linkedWorkItem != null)
{
try
{
var relatedLink = new RelatedLink(linkTypeEnd, linkedWorkItem.Id);
relatedLink.Comment = link.LinkName;
workItem.Links.Add(relatedLink);
}
catch (Exception linkException)
{
if (linkException.Message.Contains("TF237099") == false)
{
importSummary.Warnings.Add(string.Format("Failed to update links for '{0}'.",
ticketTitle));
importSummary.Warnings.Add(linkException.Message);
}
}
}
}
}
}
if (string.IsNullOrWhiteSpace(source.Epic) == false)
{
var workItemStore = (WorkItemStore) tfs.GetService(typeof (WorkItemStore));
var feature = findWorkItem(source.Epic);
if (feature != null)
{
try
{
var linkType = workItemStore.WorkItemLinkTypes["System.LinkTypes.Hierarchy"];
var linkTypeEnd = workItemStore.WorkItemLinkTypes.LinkTypeEnds[linkType.ReverseEnd.Name];
var relatedLink = new RelatedLink(linkTypeEnd, feature.Id);
relatedLink.Comment = string.Format("A member of Epic '{0} - {1}'.", feature.Id, feature.Title);
workItem.Links.Add(relatedLink);
}
catch (Exception linkException)
{
if (linkException.Message.Contains("TF237099") == false)
{
importSummary.Warnings.Add(string.Format("Failed to update epic link for '{0}'.",
ticketTitle));
importSummary.Warnings.Add(linkException.Message);
}
}
}
}
if (workItem.IsDirty)
{
try
{
workItem.Save(SaveFlags.MergeLinks);
}
catch (Exception ex)
{
importSummary.Errors.Add(
string.Format("Failed to update work item '{0} - {1}'.", workItem.Id, workItem.Title));
importSummary.Errors.Add(ex.Message);
return;
}
}
updateWorkItemState(source, workItem);
}