【问题标题】:What tfs 2010 object references are available for Tfs_DefaultCollection.dbo.tbl_ReleaseNoteDetails哪些 tfs 2010 对象引用可用于 Tfs_DefaultCollection.dbo.tbl_ReleaseNoteDetails
【发布时间】:2017-08-08 00:13:37
【问题描述】:

我们有一个用于签入说明的团队项目集合源代码控制设置,该设置要求每次签入都捕获一个“跟踪号”。此数字在 TFS 外部。我需要搜索所有具有特定跟踪编号的变更集。

生成的变更集列表告诉我在每月部署中使用 GetLatest 的内容。

-- 我们不使用工作项

这个 .SQL 提供了我正在寻找的列表。我想在 Visual Studio 的代码中访问它。

SELECT ReleaseNoteId, FieldName, BaseValue
from Tfs_DefaultCollection.dbo.tbl_ReleaseNoteDetails
  where ReleaseNoteId in (SELECT ReleaseNoteId
FROM Tfs_DefaultCollection.dbo.tbl_ReleaseNote
  where DateCreated between '2013-01-01' and '2013-01-31')
    and FieldName = 'Tracker #'
    and BaseValue = '18570'

哪些对象引用可用于 Tfs_DefaultCollection.dbo.tbl_ReleaseNoteDetails?

【问题讨论】:

  • 必填:完全不支持直接查询ProjectCollection数据库。

标签: tfs tfs-sdk


【解决方案1】:

TFS API 中没有 1to1 对象引用,因为您通常不会像数据库那样处理结构。

我从您的描述中了解到,您在变更集中拥有所需的信息。在这种情况下,您可以使用 VersionControlServer 获取变更集并从那里获取信息。

TfsTeamProjectCollection tfsConnection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFS:8080/TFS/DefaultCollection"));
VersionControlServer sourceControl = (VersionControlServer)tfsConnection.GetService(typeof(VersionControlServer));
IEnumerable changesets = sourceControl.QueryHistory(ServerPath, VersionSpec.Latest, 0, RecursionType.Full, null, new DateVersionSpec (new DateTime(2013,1,1)), new DateVersionSpec (new DateTime(2013,1,31)), Int32.MaxValue, true, false);
foreach (Changeset change in changesets)
{
  // check where the information is stored in the changeset, may change.Changes
}

只是一个朝着正确方向前进的想法。

【讨论】:

  • 这段代码“接近”我想要的。它将允许我通过评论进行搜索。我需要按 NOTE 搜索。 IEnumerable 变更集 = this.versionControlServer.QueryHistory( sc.SearchFile, VersionSpec.Latest, 0, RecursionType.Full, string.IsNullOrWhiteSpace(sc.SearchUser) ? null : sc.SearchUser, sc.FromDateVersion, sc.ToDateVersion, Int32.MaxValue,真假);
  • Changeset 对象还有一个属性 CheckinNote (msdn.microsoft.com/en-us/library/…),它可能是你的。
【解决方案2】:

如果您想轻松查询和搜索,最好创建一个新的工作项字段并在签入期间关联工作项。工作项在 UI 中具有完整的查询功能,甚至可以传输到 Reporting 仓库。

您可以使用QueryHistoryParameters 对象检索特定文件夹、日期范围等的历史记录,然后遍历CheckinNotes 进行过滤:

  var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
      new Uri("http://localhost:8080/tfs/DefaultCollection"));
  var versionControlServer = projectCollection.GetService<VersionControlServer>();

  var query = new QueryHistoryParameters("$/Scrum/**", RecursionType.Full);
  var changesets = server.QueryHistory(query);

  changesets.Where(cs => cs.CheckinNotes.Any(note => note.PropertyName == "Tracker #" 
       && note.Value == "18570"))

这不会非常快。要获得快速解决方案,请使用工作项关联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多