我正在为TFS错误跟踪系统实现一个Web界面,因此客户可以登录并输入错误。在这里,我想根据创建的VSTS团队项目的模板类型添加字段。例如,使用“敏捷”模板创建的团队项目具有与其他模板不同的字段集。因此,我想在一开始就确定团队项目的流程模板。
但是“Microsoft.TeamFoundation.WorkItemTracking.Client.Project”不包含模板类型的字段。那么如何识别团队项目的流程模板类型呢?
答案 0 :(得分:2)
直接回答是致电GetProjectProperties。
但是,我同意约翰的看法,你可能正在解决一个比必要更难的问题。当然你同意写一个完全通用的WIT客户端很难。但是,即使在使用标准流程模板的组织中,工作项自定义也很常见。因此,除非您愿意在每次项目管理员更新其错误模板时更新它,否则您可能无法获得一次性解决方案。
是否有某些原因导致WIWA不起作用? (请注意,下载链接不再有效;它现在是更广泛的TSWA SP1版本的一部分。)
另外请记住,客户(非内部员工)可以使用的任何此类应用程序,无论是WIWA还是您自己编写的内容,都需要根据TFS CAL模型提供“外部连接器许可证”。
答案 1 :(得分:0)
我不知道你问题的答案,但有一些要点:
最后,您应该考虑可以自定义流程模板。除非您需要有关模板本身的信息,否则您可能希望围绕这组字段而不是模板进行组织。
答案 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);