如何使用 Azure .NET Core webapp 生成 Microsoft Teams 批准
How can I generate Microsoft Teams approvals using an Azure .NET Core webapp
我想将使用 MS Teams approvals 的 PowerAutomate 密集型工作流转换为 ASP.NET 核心应用程序。
有没有无需 PowerAutomate 即可创建批准的方法?
否,目前不使用 PowerAutomate 无法创建批准。
通过将所有逻辑转换为 .NET,我仍然能够使用 MS Teams 批准创建 .NET 应用程序,但必须创建单独的 PowerAutomate 工作流来生成批准。
我的基本流程是:
- .NET 将消息推送到
approval-requests
Azure 队列,其中包含要在批准 中显示的信息
- PowerAutomate 工作流对
approval-requests
队列中的新消息有触发器,被触发
- PA 从队列中弹出消息,解析为 JSON
- PA 从 sharepoint/AAD 组收集人员列表,将电子邮件连接在一起
- PA 使用串联电子邮件列表启动并等待批准
- PA 将批准结果推送到
approval-responses
队列
- .NET 后台任务从
approval-responses
弹出消息并根据结果执行其应用程序逻辑。
This page 有助于开始使用 .NET 后台任务。但是,它提到 Timer class 不会等待上一次执行完成。相反,我只是使用一个新线程,它在无限循环中调用 Sleep,同时调用一个 Tick
方法来处理轮询和阻止工作流的执行,并获得肯定的批准结果。
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace app.Services
{
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-6.0&tabs=netcore-cli
public class WorkflowFulfillmentService : IHostedService
{
private readonly ILogger<WorkflowFulfillmentService> _logger;
private readonly WorkflowClient _workflowClient;
private CancellationToken _cancellationToken;
private Thread _thread;
public WorkflowFulfillmentService(
ILogger<WorkflowFulfillmentService> logger,
WorkflowClient workflowClient
)
{
_logger = logger;
_workflowClient = workflowClient;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Starting workflow fulfillment service.");
_cancellationToken = cancellationToken;
// _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
_thread = new Thread(new ThreadStart(this.DoWork));
_thread.Start();
return Task.CompletedTask;
}
private async void DoWork()
{
while (true)
{
if (_cancellationToken.IsCancellationRequested)
{
break;
}
else
{
Thread.Sleep(5000);
}
await _workflowClient.Tick();
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Stopping workflow fulfillment service.");
return Task.CompletedTask;
}
}
}
然后在Startup.cs
services.AddHostedService<WorkflowFulfillmentService>();
我想将使用 MS Teams approvals 的 PowerAutomate 密集型工作流转换为 ASP.NET 核心应用程序。
有没有无需 PowerAutomate 即可创建批准的方法?
否,目前不使用 PowerAutomate 无法创建批准。
通过将所有逻辑转换为 .NET,我仍然能够使用 MS Teams 批准创建 .NET 应用程序,但必须创建单独的 PowerAutomate 工作流来生成批准。
我的基本流程是:
- .NET 将消息推送到
approval-requests
Azure 队列,其中包含要在批准 中显示的信息
- PowerAutomate 工作流对
approval-requests
队列中的新消息有触发器,被触发 - PA 从队列中弹出消息,解析为 JSON
- PA 从 sharepoint/AAD 组收集人员列表,将电子邮件连接在一起
- PA 使用串联电子邮件列表启动并等待批准
- PA 将批准结果推送到
approval-responses
队列 - .NET 后台任务从
approval-responses
弹出消息并根据结果执行其应用程序逻辑。
This page 有助于开始使用 .NET 后台任务。但是,它提到 Timer class 不会等待上一次执行完成。相反,我只是使用一个新线程,它在无限循环中调用 Sleep,同时调用一个 Tick
方法来处理轮询和阻止工作流的执行,并获得肯定的批准结果。
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace app.Services
{
// https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-6.0&tabs=netcore-cli
public class WorkflowFulfillmentService : IHostedService
{
private readonly ILogger<WorkflowFulfillmentService> _logger;
private readonly WorkflowClient _workflowClient;
private CancellationToken _cancellationToken;
private Thread _thread;
public WorkflowFulfillmentService(
ILogger<WorkflowFulfillmentService> logger,
WorkflowClient workflowClient
)
{
_logger = logger;
_workflowClient = workflowClient;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Starting workflow fulfillment service.");
_cancellationToken = cancellationToken;
// _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
_thread = new Thread(new ThreadStart(this.DoWork));
_thread.Start();
return Task.CompletedTask;
}
private async void DoWork()
{
while (true)
{
if (_cancellationToken.IsCancellationRequested)
{
break;
}
else
{
Thread.Sleep(5000);
}
await _workflowClient.Tick();
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Stopping workflow fulfillment service.");
return Task.CompletedTask;
}
}
}
然后在Startup.cs
services.AddHostedService<WorkflowFulfillmentService>();