为便于跟踪问题解决情况,预警引擎产生的比较严重的预警日志,需要在TFS中登记Bug,通过TFS的状态流转,利用TFS Bug的Web挂钩功能,动态感知Bug解决状态,从而跟踪预警问题的解决状态,

整体解决方案如下:

微软提供了很好的文档支持:

https://www.visualstudio.com/en-us/docs/integrate/api/wit/work-items#create-bug

创建Bug示例代码如下:

public void CreateBug()
{
string _userName = "userName";
string _userPwd = "userPwd";
string _credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", _userName , _userPwd))); Object[] patchDocument = new Object[]; patchDocument[] = new { op = "add", path = "/fields/System.Title", value = "Authorization Errors" };
patchDocument[] = new { op = "add", path = "/fields/Microsoft.VSTS.TCM.ReproSteps", value = "ReproSteps" };
patchDocument[] = new { op = "add", path = "/fields/Microsoft.VSTS.Common.Priority", value = "" };
patchDocument[] = new { op = "add", path = "/fields/Microsoft.VSTS.Common.Severity", value = "2 - High" }; //use the httpclient
using (var client = new HttpClient())
{
//set our headers
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _credentials); //serialize the fields array into a json string
var patchValue = new StringContent(JsonConvert.SerializeObject(patchDocument), Encoding.UTF8, "application/json-patch+json"); var method = new HttpMethod("PATCH");
var request = new HttpRequestMessage(method, "TFS Bug URL") { Content = patchValue };
var response = client.SendAsync(request).Result; //if the response is successfull, set the result to the workitem object
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsStringAsync().Result;
}
}
}

返回的result是一个Json串,形如:

{
"id": ,
"rev": ,
"fields": {
"System.AreaPath": "Bugs",
"System.TeamProject": "Bugs",
"System.IterationPath": "Bugs",
"System.WorkItemType": "Bug",
"System.State": "新建",
"System.Reason": "新建",
"System.AssignedTo": "用户 <TELD\\user>",
"System.CreatedDate": "",
"System.CreatedBy": "用户 <TELD\\user>",
"System.ChangedDate": "",
"System.ChangedBy": "用户 <TELD\\user>",
"System.Title": "测试新增",
"System.BoardColumn": "新建",
"System.BoardColumnDone": false,
"Microsoft.VSTS.Common.StateChangeDate": "",
"Microsoft.VSTS.Common.Priority": ,
"Microsoft.VSTS.Common.Severity": "3 - 中",
"Microsoft.VSTS.Common.ValueArea": "业务",
"Teld.Bug.Source": "预警引入",
"Teld.Bug.DetectionMode": "集成测试",
"Teld.Bug.ifCausedByModification": "否",
"Teld.Bug.Type": "程序错误",
"Teld.Bug.IfAgreeResultState": "初始",
"Teld.Bug.Client": "WebPC",
"Teld.Bug.FunctionMenu": "预警中心--预警日志",
"WEF_794F3BA7F8DF460D97A964BF78CEC582_Kanban.Column": "新建",
"WEF_794F3BA7F8DF460D97A964BF78CEC582_Kanban.Column.Done": false,
"Microsoft.VSTS.TCM.ReproSteps": "重现步骤"
},
"_links": {
"self": {
"href": ""
},
"workItemUpdates": {
"href": ""
},
"workItemRevisions": {
"href": ""
},
"workItemHistory": {
"href": ""
},
"html": {
"href": ""
},
"workItemType": {
"href": ""
},
"fields": {
"href": ""
}
},
"url": ""
}

以前只用过Http协议中的Get、Post、Put等,这个Patch方法,还是第一次用。

在TFS中通过程序动态创建Bug并感知Bug解决状态的更多相关文章

  1. .Net 中的反射(动态创建类型实例) - Part.4

    动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...

  2. .Net 中的反射(动态创建类型实例)

    动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...

  3. js中几种动态创建元素并设置文本内容的比较,及性能测试。

    内容 1 appendChild (都兼容) 2.insertAdjacentHTML (都兼容) 3.innerHTML (都兼容) 4.createDocumentFragment (都兼容) 动 ...

  4. vue+el-element中根据文件名动态创建dialog的方法

    背景 在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到template,使用visible.sync控制对话框的显示/隐藏,监听confirm事件处理用户点击确定.如下: ...

  5. [UE4]C++中SpawnActor用法(动态创建Actor)

    转自:http://aigo.iteye.com/blog/2270177 C++中创建一个Level并添加的Runtime当中 C++中Spawn一个基于蓝图的Actor https://answe ...

  6. elk搜集日志,实现logstash根据message中结构不同动态创建索引并扩展功能,区分message中json和非json数据简单方式

    搜集日志,但是框架本身也会打印很多日志是字符串的.我们自己希望的日志用json,但是又需要json字段可以扩展,logstash收集日志后都放在了message字段中,我们自定义打印的是json串,s ...

  7. macOS 中使用 phpize 动态添加 PHP 扩展的错误解决方法

    使用 phpize 动态添加 PHP 扩展是开发中经常需要做的事情,但是在 macOS 中,首次使用该功能必然会碰到一些错误,本文列出了这些错误的解决方法. 问题一: 执行 phpize 报错如下: ...

  8. Ubuntu中wine程序安装windows软件中文乱码如何解决

    1.安装wine sudo apt install wine 2.安装中文程序方法 下载exe文件 在命令行执行 wine 文件名.exe 3.中文乱码原因分析 查看/home/用户名/.wine/d ...

  9. photoshop cs6安装过程中安装程序遇到错误:请重启计算机,解决办法

    1.关闭防火墙和杀毒软件 2.删除注册表 依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager目录,找到其中的 ...

随机推荐

  1. 代码神器Atom,最常用的几大插件,你值得拥有。

    作者:魔洁 atom常用插件 atom插件安装File>Settings>intall搜索框输入插件名,点击Packages搜索,搜索出来后点击intall安装,建议你先安装(simpli ...

  2. 面向UI编程:ui.js 1.1 使用观察者模式完成组件之间数据流转,彻底分离组件之间的耦合,完成组件的高内聚

    开头想明确一些概念,因为有些概念不明确会导致很多问题,比如你写这个框架为什么不去解决啥啥啥的问题,哎,心累. 什么是框架? 百度的解释:框架(Framework)是整个或部分系统的可重用设计,表现为一 ...

  3. webqq的注册登记和聊天页面--运用jsonp跨域

    简介: 我们知道,ajax用于数据交互,但它不能跨域,跨域是指从一个域名的网页去请求另一个域名的资源.比如从http://www.baidu.com/ 页面去请求 http://www.google. ...

  4. 2017-2-24 C#基础 for循环的嵌套

    用几个练习题演示一下for循环的嵌套 1.打印以下图形 ★★★★★★★★★★★★★★★ namespace _2017_2_24_for循环的嵌套 { class Program { static v ...

  5. PHP结合memcacheq消息队列解决并发问题

    在处理业务逻辑时有可能遇到高并发问题,例如商城秒杀.微博评论等.如果不做任何措施可能在高瞬间造成服务器瘫痪,如何解决这个问题呢?队列是个不错的选择.队列(Queue)又称先进先出(First In F ...

  6. Error: Cannot find module 'gulp-clone'问题的解决

    安装完gulp环境,并且配置好gulpfile.js,执行静态文件压缩和代码混淆时,出现如下错误: Error: Cannot find module 'gulp-clone' Error: Cann ...

  7. JSP-表单元素示例

    <%@ page language="java" pageEncoding="UTF-8"%><%@ page import="ja ...

  8. 每天一个Linux命令(12)--more命令

    more命令,功能类似cat,  cat 命令是这个文件的内容从上到下显示在屏幕上,more会以一页一页的显示方便使用者主页阅读,而最基本的指令就是按空格键就往下一页显示,按B键就会往回一页显示,而且 ...

  9. Javascript原型链和原型继承

    哇好久都没有写随笔啦,整个人都慵懒啦. 为了不让大家忘记我,把以前写过的一些慢慢发出来. 在JS 中, 有两条链子,作用域链 和 原型链. 作用域链相对容易理解,两点 - 函数限定变量作用域,就是说, ...

  10. wemall app商城源码Android之支付宝接口公用函数

    wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之  ...