通过SQL Server存储过程调用Team Foundation Server(TFS) API

11

我正在创建我的第一个ASP.NET MVC项目。我已经开始使用C#连接TFS,并将故障添加到TFS中。

var tfsURI = new Uri("http://test:8080/tfs");
var networkCredential1 = new NetworkCredential("test", "test!");

ICredentials credential = (ICredentials)networkCredential1;
Microsoft.VisualStudio.Services.Common.WindowsCredential winCred = new Microsoft.VisualStudio.Services.Common.WindowsCredential(credential);
VssCredentials vssCredentials = new VssCredentials(winCred);

using (TfsTeamProjectCollection collection = new TfsTeamProjectCollection(tfsURI, vssCredentials))
{
    collection.EnsureAuthenticated();
    WorkItemStore workItemStore = collection.GetService<WorkItemStore>();
    Project teamProject = workItemStore.Projects["Test"];
    WorkItemType workItemType = teamProject.WorkItemTypes["Bug"];

    WorkItem Defect = new WorkItem(workItemType);
    FileInfo fi = new FileInfo(@"C:\\Document.docx");
    Attachment tfsAttachment = new Attachment(fi.FullName);
    Defect.Attachments.Add(tfsAttachment);

    Defect.Title = "Testing from VS to TFS Bug";
    Defect.Description = "Testing from VS to entered Bug in to TFS.";
    Defect.Fields["Assigned To"].Value = "Test";

    Defect.Save();
} 

上述代码可以正常工作。

但是能否使用SQL Server存储过程实现相同的结果?是否有办法通过存储过程连接到TFS,并将错误添加到TFS中?

我有自己的数据库,并且希望从SQL存储过程中连接到TFS并创建WorkItem。通过C#,我已经像上面的例子一样完成了。但如果能够从存储过程实现相同的功能,那么请给出示例。


在@PatrickLu-MSFT的答案评论中,您说:“取决于一个表中的条目”。您已经有了可用于将WorkItems添加到TFS的C#工作代码 - 为什么不使用C#和ADO.NET发出SQL查询并直接在C#代码中获取表数据呢? - David Tansey
2个回答

8

更新:

你可以从SQL CLR调用Web服务。以下一些教程可能会有所帮助:


否,唯一为用户查询而设计的数据库是仓库数据库。其他数据库明确不受支持,不应直接查询。

请勿直接更改TFS数据库,否则您可能会失去来自Microsoft的支持。

请查看这里的类似问题:向TFS数据库添加存储过程

除了使用客户端API外,您还可以使用TFS中的Rest API执行某些操作。

工作项 - 创建

POST https://{instance}/{collection}/{project}/_apis/wit/workitems/${type}?api-version=5.0

你好,实际上我不想直接更改TFS数据库,我只想通过SQL存储过程连接TFS并在TFS中创建WortItem......这是可能的吗?我能否从存储过程调用TFS Rest API...... - user2813740
我不想将存储过程添加到TFS中。我只想连接TFS并将工作项添加到TFS中,但不是通过C#,而是通过我的存储过程。 - user2813740
我有我的数据库,并且依赖于其中一个表中的条目,我想通过SQL存储过程创建工作项... - user2813740
@user2813740 对于误解我感到抱歉,请查看我的更新回复。这确实不是常见的情况。我必须说,我对此并不熟悉,也没有测试过。但是我分享了一些可能有用的教程。此外,建议您使用C#或PowerShell来处理TFS连接并创建WorkItem。这更简单。 - PatrickLu-MSFT
@user2813740 抱歉忘记保存更新,您可以尝试从SQL CLR调用Web服务。一些教程可能会在更新答案中有所帮助。没有找到直接通过SQL存储过程调用TFS Rest API的方法。希望这能帮到您。 - PatrickLu-MSFT
1
谢谢您的回复...由于性能问题,我无法使用CLR...我发现最好的方法是创建一个在后台运行的Windows服务... - user2813740

0

在进行了大量研究后,我找到了最佳解决方案,因为SP不可行。解决方案是创建一个窗口服务。该服务将在后台每5分钟运行一次,并监视进入SQL表(我的情况下)的条目,如果存在Bug的条目,则会在TFS中创建工单。 这是目前最简单、最好的解决方案,而且不会影响性能或其他任何方面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接