


























public class WorkflowCompletionMiddleware : IWorkflowExecutionMiddleware
{
private readonly WorkflowMiddlewareDelegate _next;
public WorkflowCompletionMiddleware(WorkflowMiddlewareDelegate next)
{
this._next = next;
}
public async ValueTask InvokeAsync(WorkflowExecutionContext context)
{
try
{
// 调用下一个中间件
await _next(context);
}
catch (System.Exception)
{
//TODO 记录异常日志
//TODO 更新流程执行异常状态
}
//记录流程执行结果
if (context.Status == WorkflowStatus.Finished)
{
var vari = context.Workflow.Variables.ToList();
var result = context.Variables.ToList();
var instanceId = context.Id;
var status = (int)context.SubStatus;
//此处需要根据实际情况将公共的最外层的流程去掉,只保留业务相关的实际节点
var lastNode = context.ExecutionLog.LastOrDefault(f => f.ActivityType != "Elsa.Workflow" && f.ActivityType != "Elsa.Flowchart");
if (lastNode == null)
{
return;
}
var activityID = lastNode.ActivityId;
var activityName = lastNode.ActivityName;
long startTime = 0;
long endTime = 0;
if (lastNode.EventName == "Completed")
{
endTime = lastNode.Timestamp.ToUnixTimeMilliseconds();
var startNode = context.ExecutionLog.FirstOrDefault(f => f.ActivityId == lastNode.ActivityId && f.EventName == "Started");
if (startNode != null)
{
startTime = startNode.Timestamp.ToUnixTimeMilliseconds();
}
}
else
{
startTime = lastNode.Timestamp.ToUnixTimeMilliseconds();
}
}
}
}
通过定义一个输出变量将所有数据返回,考虑到unicode、特殊字符等问题将数据json之后再base64处理
var vari = context.Workflow.Variables.ToList();
var result = context.Variables.ToList();
var sugar = context.GetService<ISqlSugarClient>();
var dic = new Dictionary<string, object>();
foreach (var item in vari)
{
var v = JsonConvert.SerializeObject(item.Value);
dic.Add(item.Name, item.Value);
}
var json = JsonConvert.SerializeObject(dic);
var plainTextBytes = Encoding.UTF8.GetBytes(json);
var base64Str = Convert.ToBase64String(plainTextBytes);
context.Output.Add("Out__Result", base64Str);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。