如何在MORYX应用中创建依赖前序流程结果的WorkplanStep?
在MORYX中实现依赖前序结果的WorkplanStep
核心逻辑
要实现基于前序活动结果的条件判断,核心是在自定义WorkplanStep的执行代码中获取前序步骤的输出数据,通过预设条件完成评估后,输出对应的"Success"或"Failure"标识,并同步设置步骤状态。
具体实现步骤
1. 定义Step的参数与结果模型
先为自定义Step创建参数(接收前序数据、配置条件阈值)和结果(输出评估结论)的模型类:
// 自定义Step参数模型,用于接收前序结果和配置判断条件 public class ConditionalStepParams : WorkplanStepParameters { // 前序步骤输出的关键数据字段(根据实际场景调整) public decimal PredecessorOutputValue { get; set; } // 判定Success的阈值条件 public decimal SuccessThreshold { get; set; } } // 自定义Step结果模型,用于输出评估结论 public class ConditionalStepResult : WorkplanStepResult { public string EvaluationResult { get; set; } }
2. 实现Step的执行逻辑
继承WorkplanStepBase,重写ExecuteAsync方法,完成前序结果获取、条件评估和结果输出:
public class ConditionalEvalStep : WorkplanStepBase<ConditionalStepParams, ConditionalStepResult> { protected override async Task<ConditionalStepResult> ExecuteAsync(ConditionalStepParams parameters, IWorkplanContext context, CancellationToken cancellationToken) { var stepResult = new ConditionalStepResult(); // 1. 获取前序步骤的结果(替换为实际的前序结果类型) var predecessorResult = context.PreviousResults.OfType<PredecessorStepResult>().FirstOrDefault(); if (predecessorResult == null) { stepResult.EvaluationResult = "Failure"; stepResult.Status = StepStatus.Failed; return stepResult; } // 2. 执行条件评估 bool isSuccess = predecessorResult.MeasuredData > parameters.SuccessThreshold; stepResult.EvaluationResult = isSuccess ? "Success" : "Failure"; stepResult.Status = isSuccess ? StepStatus.Succeeded : StepStatus.Failed; return await Task.FromResult(stepResult); } }
3. 配置步骤间的依赖关系
- 如果用可视化设计器:将当前
ConditionalEvalStep与前序步骤建立数据连接,确保前序结果能传递到当前Step的参数中。 - 如果用代码配置Workplan:通过
StepConnection指定依赖和字段映射:
var targetWorkplan = new Workplan { Steps = new List<IWorkplanStep> { new PredecessorStep(), // 前序步骤 new ConditionalEvalStep() // 当前条件判断步骤 }, Connections = new List<StepConnection> { new StepConnection { SourceStepIndex = 0, TargetStepIndex = 1, // 映射前序结果字段到当前Step的参数 ParameterMappings = new List<ParameterMapping> { new ParameterMapping { SourceProperty = nameof(PredecessorStepResult.MeasuredData), TargetProperty = nameof(ConditionalStepParams.PredecessorOutputValue) } } } } };
关键注意点
- 确保前序步骤的结果类型与代码中
OfType<T>的泛型参数匹配,避免无法获取数据。 - 若存在多个前序步骤,需通过步骤名称或索引精准定位目标结果,避免数据混淆。
- 步骤的
Status属性要与EvaluationResult对应,保证MORYX流程引擎能正确识别步骤状态。
内容的提问来源于stack exchange,提问作者marie
相关产品推荐
相关产品推荐

