Microsoft Power Automate Альтернатива для прослушивания событий в Azure DevOps - PullRequest
0 голосов
/ 18 марта 2020

Цель: прослушивание событий в Azure DevOps и автоматизация рабочих процессов в Azure DevOps, например закрытие задач и т. Д. c,.

Усилия: я использую MS Power Automate для прослушивания событий в Azure DevOps, но, похоже, он работает слишком медленно (1-2 минуты с момента запуска).

Требуется предложение: Есть ли у нас какая-либо альтернатива MS Power Automate, которая может сократить время?

1 Ответ

1 голос
/ 19 марта 2020

Вы можете попытаться программно создать подписку, используя Подписки REST API:

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

Вот пример, который поможет вам Начало работы:

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; }
    }
}
...