TFS API不返回实际值

时间:2014-06-04 14:37:11

标签: c# tfs-sdk

我使用TFS API通过C#应用检查现有工作项的有效性。我知道某个WI(---)无效(通过工作项UI看到,几个字段缺少值或无效值)。但是,下面调用workitem.Validate()方法的代码返回0,或者没有无效字段。如果我遍历字段列表并使用field.IsValid属性单独检查每个结果,我会得到相同的结果。即使字段isValid值实际为false,它也始终返回true。

有趣的是,我可以让方法返回invalid / false如果我在调用行之前停止调试器并将Autos窗口(VS 2012)中的工作项扩展到我知道的无效字段之一(从而看到isValid属性实际上是" false")。如果我在调试期间不打开此属性,则值始终返回true。

有什么想法吗?这感觉好像没有正确加载,但我得到了一个干净的编译和构建。

感谢您的帮助!

TfsTeamProjectCollection teamProjectCollection = new TfsTeamProjectCollection(collectionUri);

WorkItemStore workItemStore = teamProjectCollection.GetService<WorkItemStore>();

WorkItemCollection hyperWic = workItemStore.Query("select [system.id] from workitems where [system.id] = "---");

foreach (WorkItem wi in hyperWic)
{
    ArrayList wi_Validate = wi.Validate();

    if (wi_Validate.Count > 0)
    {
        outputTextBox.Text += "Work item field is invalid" + Environment.NewLine;
    }
}

1 个答案:

答案 0 :(得分:0)

此代码适用于我(TFS 2013):

public static bool ValidateAndSave(this WorkItem wit)
{
    bool valid = wit.IsValid();
    if (valid)
    {
        wit.Save();
    }
    else
    {
        string msg = "Error saving work item, validation failed ! Errors: " + Environment.NewLine;
        foreach (var field in wit.Validate().Cast<Field>())
        {
            msg += "Field " + field.Name + " has status " + field.Status + Environment.NewLine;
        }
        EventLog.WriteEntry("WemTfsSubSystem", msg);
    }
    return valid;
}

为未来读者提供更新

在这种情况下的问题是WorkItem是通过WorkItemStore Query获得的,这可能是由于Cache问题所致,因此解决方案是通过WorkItemStore.GetWorkItem(id)方法获取WorkItem。