2016-08-30 39 views
0

我有一个TFS工作项目字段似乎存在大多数工作项目,但有时不。TFS工作项目字段无法验证在Eval

我试图用WorkItemCollection在列表视图中绑定这些工作项,除了当我尝试绑定该字段时,一切正常。

该字段本身在查询选择中指定并且不会出现错误。然而,为了获得场不会对某些工作项抛出一个错误的唯一方法是这样(在的.cs)::

  foreach(WorkItem w in queryResults) 
      { 
      if (w.Fields.Contains("Symptom")) 
      { 
       w.Fields["Symptom"].Value.ToString();//show 
      } 
      } 

,因为这些工作项都以只读模式,我不能只写强制值等等。(除非我返回与工作项目配对的值的字典,但我不认为这将是最好的解决方案...)

我在试图做的是在Listview ItemTemplate中,这样的事情::

   <div class="details"> 
        <%# Server.HtmlEncode(Eval("Fields.Contains(\"Symptom\")? Fields[\"Symptom\"].Value : \"\";").ToString())%> 
       </div> 

但我得到'包含'不是一个有效'领域'属性(b因为它的一种收集方法) - 我坚持评估

如何正确评估并显示我的症状字段?

+0

哪个TFS的版本,您使用的?你使用CMMI流程模板吗?我检查了我的TFS 2015.3,只有Bug工作项包含CMMI过程模板中的症状字段。你的意思是你想用TFS api来获得这个领域? –

+0

你能分享你的代码不能工作吗? –

+0

@ Cece-MSFT,这正是问题所在,对于任何不是'bug'工作项目的工作项目,没有任何症状字段 - 所以我不能直接绑定该字段,它会引发错误。我需要绑定它,但它在HTML页面 – Spacemonkey

回答

0

如果使用TFS 2015或VSTS,则可以使用REST API来获取症状字段。该API的样子:

GET http(s)://{instance}/DefaultCollection/_apis/wit/workitems?ids=xx&fields=Microsoft.VSTS.CMMI.Symptom&api-version=1.0 

或用.NET API:

using Microsoft.TeamFoundation.WorkItemTracking.Client; 
using Microsoft.TeamFoundation.Client; 
using System; 

namespace TestCaseProject 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var tfs = 
     TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
      new Uri("http://tfsserver:8080/tfs/CollectionName")); 
      var service = tfs.GetService<WorkItemStore>(); 

      var wi = service.GetWorkItem(id); 


      foreach (Field field in wi.Fields) 
      { 
       Console.WriteLine("{0}: {1}", field.Name, field.Value); 
      } 


     } 
    } 
} 
+0

。净API部分正是我已经说过的工作(我的帖子中的第一个codeblock) - 问题是绑定workitemcollection到列表视图和使用症状字段(并不总是存在)。 – Spacemonkey

0

使用OnItemDataBound

似乎没有什么直接在页面上工作,所以我感动来自做法,转而去试图解决我在代码隐藏方面的问题,因为我已经能够在这方面进行整理了。

我从我的页面中删除了我的sourceObject,而是以编程方式代码隐藏了我的列表视图。 (这一步是不是必要的)

TFSListView.DataSource = SearchHandler.SearchTFS(searchstring); 
TFSListView.DataBind(); 

然后我用OnItemDatabound事件能够管理每个项目的约束,我检查了DataItem的那恼人的症状领域存在的限制,如果它填补了适当的控制做(这一切都将替换一个EVAL行,所以我还是有点懊恼,但它似乎没有可以直接在aspx页面)

protected void TFSListView_ItemDataBound(object sender, ListViewItemEventArgs e) 
{ 
    ListViewDataItem myitem = (ListViewDataItem)e.Item; 

    if (e.Item.ItemType == ListViewItemType.DataItem) 
    { 
    Control divDetails = e.Item.FindControl("divLsvDetails"); 
    WorkItem myWI = myitem.DataItem as WorkItem; 

    if (myWI != null && divDetails != null) 
    {   
     if (myWI.Fields.Contains("Symptom")) 
     {    
     ((HtmlGenericControl)divDetails).InnerHtml = myWI["Symptom"].ToString(); 
     } 
    } 
    } 
} 
+0

我不会接受这个答案(因为我问了这个问题),因为它不直接回答问题 - 如何使用eval或w/e直接在aspx.page中工作。我发布了它,以防其他人得到同样的问题,但它确实解决了这个问题。 – Spacemonkey