gpt4 book ai didi

azure-devops - 如何将子卡讨论记录汇总到父卡?

转载 作者:行者123 更新时间:2023-12-05 05:39:43 25 4
gpt4 key购买 nike

如何在 Azure DevOps 中将子卡讨论笔记汇总到父卡?

我们使用ADO的方式是这样的:

User Story -> Task 1
-> Task 2
-> Task 3

用户故事卡片和任务卡片都包含讨论字段,我们遇到了一个难题,即“我们应该使用哪些卡片的讨论字段来输入正在进行的笔记和讨论”? parent (用户故事)?还是 child (任务)?开发人员在任务中输入讨论笔记更有意义,但我们的支持人员和经理喜欢只查看父级用户故事卡片,他们希望在其中看到所有讨论笔记。

目前,我在任务及其父用户故事卡中重复输入讨论笔记,这不仅效率低下,而且还违反了 DRY。

然后我想到理想的解决方案是用户故事卡片能够显示(在讨论部分)所有子卡片的所有讨论笔记。因此,如果我在任务(子)卡中输入注释并保存它,它会自动显示为其父用户故事卡中的讨论注释。理想情况下,我仍然可以偶尔输入特定于用户故事的讨论笔记,但在所有情况下,所有子卡片的笔记都会自动拉入并显示在父卡片中(也许只读?只能在 child 中编辑?)。

  1. 有没有一种简单的方法可以做到这一点?
  2. 如果上面#1 的答案是否定的,那么是否有困难的方法来实现它?也许通过自定义或自定义 API 调用?实现我想要的结果的最佳方式是什么?

最佳答案

这在 Azure DevOps 中是不可能的(至少据我所知)。

不过,我可以想出几种方法来完成这项工作,但它需要一些自定义脚本,并且有一些可能不会影响您的用例的缺点。

选项 1. 创建一个自定义扩展,聚合对父项的评论

此选项使您可以完全自由地设计功能的可视化方式。它也是完全干燥的

您可以 develop your own custom extension for Azure DevOps并在用户故事卡上创建一个动态部分,从所有任务中提取评论。

选项 2. 设置 Web Hook对于事件“Workitem commented on”

此选项并非完全 DRY,但它至少会自动跨工作项复制评论。

通过在 Azure Devops 中配置 Web Hook ,将包含有关新评论信息的 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.ChangedDateSystem.Parent

中的父工作项 ID

使用此信息,接收 json 对象的 REST 服务可以使用 Comments 创建对父工作项的评论Rest API 或将更新发布到您将 System.History 字段设置为注释值的工作项。这还允许您设置原始评论时间和作者,前提是您在自动化中使用的用户帐户已授予绕过工作项更新规则权限。

缺点

  1. 如果可以将任务从一个用户故事移动到另一个用户故事,则需要移动对用户故事的任务评论。可以应用与上述相同的想法来解决这个问题。通过为 WorkItem updated 配置 webhook,您可以监听任务的所有更新。通过从 Revision Rest API 中获取以前的修订(修订在 resource.rev 中找到)并比较 System.Parent 字段,您可以确定任务是否已移动,并将评论添加到新父级并从旧父级中删除它们。
  2. 同样,如果您想传播评论更新和 react ,则需要进一步扩展网络钩子(Hook)功能。

关于azure-devops - 如何将子卡讨论记录汇总到父卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72610075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com