如何使用TFS SDK以编程方式识别已创建的团队项目的流程模板?

时间:2009-07-02 03:19:59

标签: tfs tfs-process-template

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

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

4 个答案:

答案 0 :(得分:2)

直接回答是致电GetProjectProperties

但是,我同意约翰的看法,你可能正在解决一个比必要更难的问题。当然你同意写一个完全通用的WIT客户端很难。但是,即使在使用标准流程模板的组织中,工作项自定义也很常见。因此,除非您愿意在每次项目管理员更新其错误模板时更新它,否则您可能无法获得一次性解决方案。

是否有某些原因导致WIWA不起作用? (请注意,下载链接不再有效;它现在是更广泛的TSWA SP1版本的一部分。)

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

答案 1 :(得分:0)

我不知道你问题的答案,但有一些要点:

  • 我修改了您的问题,以明确您询问Process Templates
  • 我还澄清说你在谈论团队项目,而不是Visual Studio项目文件。这两个编辑在一起应该让人们不要以为你在询问使用File-> Add New Project时出现的事情。

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

答案 2 :(得分: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。这是否意味着项目是在没有模板的情况下创建的?此外,我更改了上面的项目和主机名,以便在此处发布。 (他们是合法的项目)。

答案 3 :(得分:0)

而不是:

Console.WriteLine(templateId);

使用:

Console.WriteLine(projectProperties[2].Value);