2

我正在为 TFS 错误跟踪系统实现一个 Web 界面,以便客户可以登录并输入错误。在这里,我想根据创建的 VSTS 团队项目的模板类型添加字段。例如,使用“敏捷”模板创建的团队项目具有与其他模板不同的字段集。因此,我想在一开始就确定团队项目的流程模板。

但是“Microsoft.TeamFoundation.WorkItemTracking.Client.Project”不包含模板类型的字段。那么如何识别团队项目的流程模板类型呢?

4

4 回答 4

2

直接的答案是调用GetProjectProperties

但是,我同意约翰的观点,您可能正在处理一个比必要的更难的问题。当然,您会同意编写一个完全通用的 WIT 客户端很难。但是,工作项定制非常普遍,即使在使用标准流程模板的组织中也是如此。所以你可能无法摆脱一次性解决方案,除非你愿意在项目管理员每次更新他们的错误模板时更新它。

WIWA不适合你有什么原因吗?(请注意,下载链接不再有效;它现在是更广泛的 TSWA SP1 版本的一部分。)

还要记住,任何可供客户(不是内部员工)使用的此类应用程序,无论是 WIWA 还是您自己编写的东西,都需要根据 TFS CAL 模型的“外部连接器许可证”。

于 2009-07-02T23:29:21.730 回答
0

代替:

Console.WriteLine(templateId);

利用:

Console.WriteLine(projectProperties[2].Value);
于 2014-11-28T07:18:54.087 回答
0

我不知道你的问题的答案,但有几点要说明:

  • 我编辑了您的问题,以明确您在询问流程模板
  • 我还澄清说,您说的是团队项目,而不是 Visual Studio 项目文件。这两个编辑一起应该让人们不会认为您在询问使用 File->Add New Project 时出现的内容。

最后,您应该考虑可以自定义流程模板。除非您需要有关模板本身的信息,否则您可能希望围绕字段集而不是模板来组织。

于 2009-07-02T13:30:28.597 回答
0

我实际上使用了以下代码:

static void GetProjectTemplate()
    {
        string collectionName = "http://<our_host_name>:8080/tfs/defaultcollection/";
        TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(collectionName)
            , new UICredentialsProvider());
        tfs.EnsureAuthenticated();
        ICommonStructureService css = (ICommonStructureService)tfs.GetService(typeof(ICommonStructureService));
        string[] projects = { "proj1", "proj2", "proj3" };
        foreach (string proj in projects)
        {
            ProjectInfo projectInfo = css.GetProjectFromName(proj);
            String projectName;
            String prjState;
            int templateId = 0;
            ProjectProperty[] projectProperties;


            css.GetProjectProperties(
                projectInfo.Uri, out projectName, out prjState, out templateId, out projectProperties);
            Console.WriteLine(templateId);
        }

        // Locate templateId in the list of Process templates
        IProcessTemplates processTemplates = (IProcessTemplates)tfs.GetService(typeof(IProcessTemplates));
        XmlNode node = processTemplates.GetTemplateNames();
        Console.WriteLine(Regex.Replace( node.InnerXml,"<[A-Za-z]","\n$&", RegexOptions.ECMAScript ) );

    }

...从这里复制和修改: http ://www.databaseforum.info/30/1083827.aspx

问题是,我仍然得到“-1”作为模板 ID。这是否意味着项目是在没有模板的情况下创建的?另外,我更改了上面的项目和主机名,以便在此处发布。(它们是合法的项目)。

于 2010-07-07T20:48:48.657 回答