【问题标题】:How to promptly get workitem history with tfs java sdk?( with out workitem.open())如何使用 tfs java sdk 及时获取工作项历史记录?(没有 workitem.open())
【发布时间】:2016-06-21 15:55:56
【问题描述】:

由于某些原因,我必须使用 tfs java sdk,所以我总是需要 workitem.open() 从 workitemclient.Query() 加载每个工作项的修订,如下代码:

WorkItemCollection workItemCollection = workItemClient.query(wiql);
for(int i = 0; i < workItemCollection.size(); i++)
{
    WorkItem workItem = workItems.get(i);
    workItem.open();
    workItem.getRevisions()
        .forEach(r -> {
            //..."System.History").getValue());
            //..."System.History").getOriginalValue());
        });
}

如果不使用 open(),Revisions 必须为空; 每个工作项的 open() 方法花费 55 毫秒,这是不可接受的。

所以有什么提高效率的建议吗?非常感谢。

/////////////////////////////////////// //////////////////////做了////////////////////////// ///////////////////////////////////

我这样做可以缩短时间。 像打击一样使用 SQL:

String sql = "select [System.Id],[System.ChangedBy],[System.ChangedDate],[words]"
    + " from Tfs_DefaultCollection.dbo.WorkItemsEverable"
    + " left join Tfs_DefaultCollection.dbo.WorkItemLongTexts on [System.Id] = [ID] and [System.Rev] = [Rev]"
    + " where FldID=54" // behalf History field
    + " and"+conditionSql;

conditionSql : "id in ('12','1324','1')"

现在使用这种方法,检索历史记录(changedby,changedDate,History)的平均成本仅为 2~4 个 Mills(测试用例为 30~1000 个工作项)

/////////////////////////////////////// //////////////////////仍然/////////////////////////// /////////////////////////////////////////////p>

任何关于更好的代码/效率的建议将不胜感激。

【问题讨论】:

    标签: java tfs


    【解决方案1】:

    只能为集合WorkItem.Fields 中可用的工作项字段检索修订历史记录,因此如果您使用以下代码获取工作项修订历史记录,您将看不到历史记录,但最终会再次重新加载当前工作项对象并再次。

       foreach (Revision revision in wi.Revisions)
                {
                    Debug.Write(revision.WorkItem);
                }
    

    您可以尝试获取工作项修订中的字段值:

    // Returns a work item object
                var wi = GetWorkItemDetails(id);
    
                // Get All work item revisions
                foreach (Revision revision in wi.Revisions)
                {
                    // Get value of fields in the work item revision
                    foreach (Field field in wi.Fields)
                    {
                        Debug.Write(revision.Fields[field.Name].Value);
                    }
                }
    

    有用的博客:http://geekswithblogs.net/TarunArora/archive/2011/08/21/tfs-sdk-work-item-history-visualizer-using-tfs-api.aspx

    【讨论】:

    • 谢谢,但您的第一部分 C# 代码无法解决我的 java 问题。我在 C# 案例中测试,修订总是自动加载,因此在 C# 中的 getRevisions 之前不会出现相同的 open() 延迟。我今天是通过在 TFS 的数据库中查询来实现的。完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2019-08-23
    • 1970-01-01
    • 2022-07-10
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多