【问题标题】:Microsoft Power Automate Alternative for listening events in Azure DevOps用于在 Azure DevOps 中侦听事件的 Microsoft Power Automate Alternative
【发布时间】:2020-06-29 12:50:32
【问题描述】:
目标:
监听 Azure DevOps 中的事件并自动化 Azure DevOps 中的工作流,例如关闭任务等。
努力:
我正在使用 MS Power Automate 来监听 Azure DevOps 中的事件,但它似乎工作得太慢(触发后 1-2 分钟)。
需要的建议:
我们是否有任何替代 MS Power Automate 的方法可以缩短时间?
【问题讨论】:
标签:
azure
azure-devops
power-automate
【解决方案1】:
您可以尝试使用Subscriptions 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; }
}
}