简体   繁体   English

用于在 Azure DevOps 中侦听事件的 Microsoft Power Automate Alternative

[英]Microsoft Power Automate Alternative for listening events in Azure DevOps

Goal: Listen to events in Azure DevOps and automate workflows in Azure DevOps, like closing the tasks etc,.目标:侦听 Azure DevOps 中的事件并自动化 Azure DevOps 中的工作流,例如关闭任务等。

Efforts: I am using MS Power Automate to listen to events in Azure DevOps but it seems to work too slow (1-2 mins since the trigger).努力:我正在使用 MS Power Automate 来侦听 Azure DevOps 中的事件,但它似乎工作太慢(自触发后 1-2 分钟)。

Suggestion Required: Do we have any alternative to MS Power Automate that can reduce the time ?需要的建议:我们是否有任何可以减少时间的 MS Power Automate 替代品?

You may try to programmatically create a subscription using the Subscriptions REST APIs:您可以尝试使用订阅REST API 以编程方式创建订阅:

https://docs.microsoft.com/en-us/azure/devops/service-hooks/create-subscription?view=azure-devops https://docs.microsoft.com/en-us/azure/devops/service-hooks/create-subscription?view=azure-devops

Here's a sample to help you get started:以下是帮助您入门的示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Mvc;

namespace Microsoft.Samples.VisualStudioOnline
{
    public class ServiceHookEventController : Controller
    {

        // POST: /ServiceHookEvent/workitemcreated
        [HttpPost]
        public HttpResponseMessage WorkItemCreated(Content workItemEvent)
        {
            //Grabbing the title for the new workitem
            var value = RetrieveFieldValue("System.field", workItemEvent.Resource.Fields);

            //Acknowledge event receipt
            return new HttpResponseMessage(HttpStatusCode.OK);
        }

        /// <summary>
        /// Gets the value for a specified work item field.
        /// </summary>
        /// <param name="key">Key used to retrieve matching value</param>
        /// <param name="fields">List of fields for a work item</param>
        /// <returns></returns>
        public String RetrieveFieldValue(String key, IList<FieldInfo> fields)
        {
            if (String.IsNullOrEmpty(key))
                return String.Empty;

            var result = fields.Single(s => s.Field.RefName == key);

            if (result == null)
                return String.Empty;

            return result.Value;
        }

    }

    public class Content
    {
        public String SubscriptionId { get; set; }

        public int NotificationId { get; set; }

        public String EventType { get; set; }

        public WorkItemResource Resource { get; set; }

    }

    public class WorkItemResource
    {
        public String UpdatesUrl { get; set; }

        public IList<FieldInfo> Fields { get; set;}

        public int Id { get; set; }

        public int Rev { get; set; }

        public String Url { get; set; }

        public String WebUrl { get; set; }
    }

    public class FieldInfo
    {
        public FieldDetailedInfo Field { get; set; }

        public String Value { get; set; }

    }

    public class FieldDetailedInfo
    {
        public int Id { get; set; }

        public String Name { get; set; }

        public String RefName { get; set; }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM