代码之家  ›  专栏  ›  技术社区  ›  massimogentilini

如何从代码中显示关联工作项?

  •  1
  • massimogentilini  · 技术社区  · 15 年前

    我们使用一个内部设计工具来开发一些产品,该工具将信息存储在XML文件中。为了提供与TFS的适当集成,我们还编写了一个提供者,它在TFS中跟踪用户使用设计器时的签入和签出操作,而不需要与团队资源管理器交互。

    现在的要求是在签入文件时还要添加相关的工作项,我已经搜索并浏览了一些SDK示例,但是我无法理解是否有一种方法可以显示相同的Windows窗体,允许用户将代码与工作项从代码关联,或者我们必须从代码实现完整的Windows窗体(检索和搜索工作项)kitems,关联它们,执行签入等等)。任何信息都会得到赞赏,因为在这两种解决方案之间,我们需要编写的代码数量存在很大差异。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Chris Ballance    15 年前

    这里有一些代码可以帮助更新工作项。另外,请尝试[此链接][1]以获取更多信息。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.WorkItemTracking.Client;
    
    
    namespace WorkItemTrackingSample2
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Connect to the server and the store.
                TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("YourTfsServerNameHere");
                WorkItemStore workItemStore = (WorkItemStore)tfs.GetService(typeof(WorkItemStore));
                // Get a specific WorkItem from the store.
                //   Replace "12345" with a WorkItem ID appropriate for testing.
                WorkItem workItem = workItemStore.GetWorkItem(12345);
    
                // Save the existing Priority so we can restore it later.
                int oldPriority = (int)workItem.Fields["Priority"].Value;
    
                // Set the Priority to an arbitrarily high number.
                workItem.Fields["Priority"].Value = 9999;
    
                // Display the results of this change.
                if (workItem.IsDirty)
                    Console.WriteLine("The workItem has changed, but has not been saved.");
    
                if (workItem.IsValid() == false)
                    Console.WriteLine("The workItem is not valid.");
    
                if (workItem.Fields["Priority"].IsValid == false)
                    Console.WriteLine("The workItem's Priority field is not valid.");
    
                // Tries to save the invalid WorkItem.
                try
                {
                    workItem.Save();
                }
                catch (ValidationException)
                {
                    Console.WriteLine("The workItem threw a ValidationException.");
                }
    
                // Set the priority to a more reasonable number.
                if (oldPriority == 1)
                    workItem.Fields["Priority"].Value = 2;
                else
                    workItem.Fields["Priority"].Value = 1;
    
                // If the WorkItem is valid, saves the changed WorkItem.
                if (workItem.IsValid())
                {
                    workItem.Save();
                    Console.WriteLine("The workItem saved this time.");
                }
    
                // Restore the WorkItem's Priority to its original value.
                workItem.Fields["Priority"].Value = oldPriority;
                workItem.Save();
            }
        }
    }
    
    
      [1]: http://msdn.microsoft.com/en-us/library/bb130323(VS.80).aspx
    
        2
  •  0
  •   massimogentilini    14 年前

    我已经咨询过MS Consultancy,如果不使用真正不安全的低级代码,就无法显示tfs或shell扩展使用的签入窗口。

    所以唯一可能的解决方案是使用TFSAPI创建一个新的C控件/项目来模拟TFS签入窗口。

    当做 马西莫