发布工作流活动中的事件

本文关键字:事件 活动中 工作流 | 更新日期: 2023-09-27 18:19:44

我正在使用prism构建一个WPF应用程序,我想使用工作流基础(本地和从服务)。

是否有人了解如何构建使用EventAggreator调用的工作流活动,然后让工作流发布事件作为响应?我正在考虑构建一个允许活动发布一对多事件的实现,这是工作流的好场景吗?

发布工作流活动中的事件

使用事件聚合器实现的一种方法是要求它作为工作流活动的扩展,如下所示。在WorkflowApplication/WorkflowInvoker中,您可以注册事件聚合器的实例,以便您的活动可以引发事件。我还没有在我的应用程序中使用事件聚合器,所以可能会有一些怪癖。

自定义活动,需要一个事件聚合器并在其Execute方法中使用它:

namespace SampleWorkflowAppOne
{
    using System.Activities;
    using Microsoft.Practices.Prism.Events;
    public class PurchaseOrderInventoryCheckActivity : NativeActivity
    {
        protected override void CacheMetadata(NativeActivityMetadata metadata)
        {
            metadata.RequireExtension<IEventAggregator>();
        }
        protected override void Execute(NativeActivityContext context)
        {
            var eventAggregator = context.GetExtension<IEventAggregator>();
            var somethingHappenedEvent = eventAggregator.GetEvent<MyActivityEvent>();
            var myEventInfo = new MyEventInfo() { SomeNumber = 5 };
            somethingHappenedEvent.Publish(myEventInfo);
        }
    }
    public class MyActivityEvent : CompositePresentationEvent<MyEventInfo>
    {
    }
    public class MyEventInfo
    {
        public int SomeNumber { get; set; }
    }
}

注册事件聚合器实例以用于您的活动:

using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
namespace SampleWorkflowAppOne
{
    using Microsoft.Practices.Prism.Events;
    class Program
    {
        static void Main(string[] args)
        {
            var purchaseOrderValidationWorkflow = new PurchaseOrderValidationWorkflow();
            var eventAggregator = new EventAggregator();
            var wfInvoker = new WorkflowInvoker(purchaseOrderValidationWorkflow);
            wfInvoker.Extensions.Add(eventAggregator);
            wfInvoker.Invoke();
        }
    }
}

希望能有所帮助。

编辑:我发现这段视频展示了构建一个事件驱动+长期运行的工作流,这可能也会有所帮助。不过我还没看:http://channel9.msdn.com/Events/Build/BUILD2011/TOOL-801T