gpt4 book ai didi

c# - 在工作流进入其完成状态之前,如何从状态机工作流中获取数据?

转载 作者:行者123 更新时间:2023-11-30 22:49:56 25 4
gpt4 key购买 nike

我正在使用状态机工作流并使用 ExternalDataExchange 服务来处理主机中的事件并通过 eventargs 将数据获取到工作流中。

但是,现在我需要从工作流中获取数据,但遇到了困难。

输出参数仅在工作流完成事件中可用,但我的工作流未完成。主机用一些数据触发一个事件,基本上是在等待工作流完成对事件的处理(手动调度程序)。在我对工作流中事件的特定处理中,它正在进行一些验证,如果验证失败,它不会移动到下一个状态,但我需要能够将验证结果发送回主机应用程序。

我试图完成的示例如下所示:

OrderWorkflow
PendingOrderState
ImportOrderEvent
- If the order passes validation move to CompletedState
- Else return the validation results to the host (how?)
CompletedState

还应注意,我的主机实际上是一个 ASP.NET MVC 应用程序,因此我试图避免直接在我的 Controller /页面上连接事件以处理来自工作流调用的本地服务,但并不完全如果需要这样做,则反对。

最佳答案

看起来我有一个可行的解决方案。

基本上我的 WorkflowRuntimeManager 与 Bruce Bukovics 在他的书 Pro WF Windows Workflow in .NET 3.5 中介绍的大致相同。

我最终创建了一个新服务并将其添加到工作流运行时。此服务允许我的工作流在我的应用程序中触发一个事件,允许它将任何 IDictionary 传递回我的主机应用程序。

此事件依次由 WorkflowRuntimeManager 拾取,然后它依次获取结果并将它们与适当的 WorkflowInstance 相关联,一旦 Workflow 方法返回,它就可供应用程序本身使用。

我已在此处为可能想要复制此功能的任何其他人附加了服务实现。或者更好的是,如果有人能找到更好的方法,请告诉我。

public interface ISendDataService
{
event EventHandler<ReceivedDataEventArgs> ReceivedDataEvent;
void SendData(Guid instanceId, IDictionary<string, object> data);
}

public class SendDataService : ISendDataService
{
public event EventHandler<ReceivedDataEventArgs> ReceivedDataEvent;

private void OnReceivedDataEvent(Guid instanceId, IDictionary<string, object> data)
{
if (ReceivedDataEvent != null)
ReceivedDataEvent(null, new ReceivedDataEventArgs(instanceId, data));
}

public void SendData(Guid instanceId, IDictionary<string, object> data)
{
OnReceivedDataEvent(instanceId, data);
}
}

public class ReceivedDataEventArgs : EventArgs
{
public ReceivedDataEventArgs()
{
}

public ReceivedDataEventArgs(Guid instanceId, IDictionary<string, object> data)
{
InstanceId = instanceId;
Data = data;
}

public Guid InstanceId { get; set; }
public IDictionary<string, object> Data { get; set; }
}

关于c# - 在工作流进入其完成状态之前,如何从状态机工作流中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/864027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com