如何在Azure DevOps中将子卡讨论记录汇总到家长卡上?
我们使用ADO的方式如下:
User Story -> Task 1
-> Task 2
-> Task 3用户故事卡和任务卡都包含讨论字段,对于“我们应该使用哪些卡片的讨论字段来输入正在进行的注释和讨论”,我们遇到了一个困惑。父(用户故事)?还是孩子(任务)?对于devs来说,在任务中输入讨论笔记更有意义,但是我们的支持人员和经理只想看看家长的用户故事卡,他们希望看到所有的讨论笔记。
目前,我在两个任务和他们的父母用户故事卡中双输入讨论笔记,这不仅是一种低效的痛苦,而且违反了干法。
然后我想到,理想的解决方案是用户故事卡能够显示(在讨论部分)所有儿童卡片的所有讨论笔记。因此,如果我在任务(子)卡中输入一个便条并保存它,它将自动显示为它的父用户故事卡中的讨论笔记。理想情况下,我仍然可以输入特定于用户故事的讨论笔记,但所有儿童卡片的笔记都会自动被拉进来并显示出来(也许是只读的?)只能在孩子身上编辑?)在父母卡里,在任何情况下。
发布于 2022-07-03 12:58:54
在Azure DevOps中,这是不可能的(至少据我所知)。
然而,我可以想出几种方法来完成这个任务,但是它需要一些定制脚本,并且有一些可能不会影响您的用例的缺点。
选项1.创建聚合父级注释的自定义扩展
此选项为您提供了如何可视化设计功能的完全自由。它也是完全干燥的
您可以在用户故事卡上创建一个为Azure DevOps开发自己的自定义扩展并创建一个动态部分,该部分可以从所有任务中提取注释。
选项2.为“工作项注释”事件设置一个网络钩
这个选项并不完全是干的,但它至少会自动复制跨工作项的注释.。
通过将Azure中的web钩子配置为将包含有关新注释的信息的json对象发布到您选择的REST端点。发布的有效载荷如下所示。
{
"subscriptionId": "5be97cbc-ee4b-4c21-91ea-866a61d624c4",
"notificationId": 4,
"id": "fb2617ed-60df-4518-81fa-749faa6c5cd6",
"eventType": "workitem.commented",
"publisherId": "tfs",
"message": {
"markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) commented on by Jamal Hartnett."
},
"detailedMessage": {
"markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) commented on by Jamal Hartnett.\r\nThis is a great new idea"
},
"resource": {
"id": 5,
"rev": 4,
"fields": {
"System.AreaPath": "FabrikamCloud",
"System.TeamProject": "FabrikamCloud",
"System.IterationPath": "FabrikamCloud\\Release 1\\Sprint 1",
"System.WorkItemType": "Bug",
"System.State": "New",
"System.Reason": "New defect reported",
"System.CreatedDate": "2014-07-15T17:42:44.663Z",
"System.CreatedBy": {
"displayName": "Jamal Hartnett",
"url": "https://vssps.dev.azure.com/fabrikam/_apis/Identities/e5a5f7f8-6507-4c34-b397-6c4818e002f4",
"_links": {
"avatar": {
"href": "https://dev.azure.com/mseng/_apis/GraphProfile/MemberAvatars/aad.YTkzODFkODYtNTYxYS03ZDdiLWJjM2QtZDUzMjllMjM5OTAz"
}
},
"id": "e5a5f7f8-6507-4c34-b397-6c4818e002f4",
"uniqueName": "Jamal Hartnett",
"imageUrl": "https://dev.azure.com/fabrikam/_api/_common/identityImage?id=e5a5f7f8-6507-4c34-b397-6c4818e002f4",
"descriptor": "ukn.VXkweExUVXRNakV0TWpFME5qYzNNekE0TlMwNU1ETXpOak15T0RVdE56RTVNelEwTnpBM0xURXpPRGswTlRN"
},
"System.ChangedDate": "2014-07-15T17:42:44.663Z",
"System.ChangedBy": {
"displayName": "Jamal Hartnett",
"url": "https://vssps.dev.azure.com/fabrikam/_apis/Identities/e5a5f7f8-6507-4c34-b397-6c4818e002f4",
"_links": {
"avatar": {
"href": "https://dev.azure.com/mseng/_apis/GraphProfile/MemberAvatars/aad.YTkzODFkODYtNTYxYS03ZDdiLWJjM2QtZDUzMjllMjM5OTAz"
}
},
"id": "e5a5f7f8-6507-4c34-b397-6c4818e002f4",
"uniqueName": "Jamal Hartnett",
"imageUrl": "https://dev.azure.com/fabrikam/_api/_common/identityImage?id=e5a5f7f8-6507-4c34-b397-6c4818e002f4",
"descriptor": "ukn.VXkweExUVXRNakV0TWpFME5qYzNNekE0TlMwNU1ETXpOak15T0RVdE56RTVNelEwTnpBM0xURXpPRGswTlRN"
},
"System.Title": "Some great new idea!",
"System.Parent": 26
"Microsoft.VSTS.Common.Severity": "3 - Medium",
"WEF_EB329F44FE5F4A94ACB1DA153FDF38BA_Kanban.Column": "New",
"System.History": "This is a great new idea"
},
"_links": {
"self": {
"href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5"
},
"workItemUpdates": {
"href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/updates"
},
"workItemRevisions": {
"href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/revisions"
},
"workItemType": {
"href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/ea830882-2a3c-4095-a53f-972f9a376f6e/workItemTypes/Bug"
},
"fields": {
"href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/fields"
}
},
"url": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5"
},
"resourceVersion": "1.0",
"resourceContainers": {
"collection": {
"id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2"
},
"account": {
"id": "f844ec47-a9db-4511-8281-8b63f4eaf94e"
},
"project": {
"id": "be9b3917-87e6-42a4-a549-2bc06a7a878f"
}
},
"createdDate": "2022-07-03T12:30:03.0691717Z"
}尤其是message下的注释消息、fields.System.ChangedBy下消息的作者、fields.System.ChangedDate中注释的日期和System.Parent中的父工作项id。
使用这些信息,接收json对象的REST服务可以使用评论 Rest在父工作项上创建一个注释,或者向将System.History字段设置为注释值的工作项发布更新。这还允许您设置原始评论时间和作者,因为您在自动化中使用的用户帐户具有授予Bypass rules on work item updates的权限。
弊端
WorkItem updated配置webhook,您可以侦听任务的所有更新。通过从resource.rev中获取以前的修订(在修订Rest中可以找到修订版),并比较字段System.Parent,您可以确定任务是否已被移动,并将注释添加到新父级中并将它们从旧版本中删除。https://stackoverflow.com/questions/72610075
复制相似问题