在asp.net站点上捕获工作流的webform事件

时间:2009-04-16 12:04:45

标签: asp.net events workflow-foundation

基本的想法是我有一个网站和一个工作流程。我需要在工作流程中捕获来自aspx页面的按钮点击。

我有一个包含worflow项目和网站项目的解决方案,并且已经设置了web.config和global.asax以与WF一起使用。还建立了持久性服务。

我创建了一个StateMachine工作流程。有几个状态(StateActivity)包含EventDrivenActivity实例,其中包含HandleExternalEventActivity实例。要正确设置后者以便应用程序可以编译,我创建了一个用ExternalDataExchange属性修饰的接口,并公开了必要的事件。然后我创建了一个实现此接口的类。

就我而言。现在我需要将类连接到我的aspx页面;页面上的事件需要触发类中的事件。

我的代码看起来像这样:

<ExternalDataExchange()> _
Public Interface ICatWorkflow
            Property RequestId() As Guid
            ...
            Sub requestInfoEmail()
        ...
        Event onReception(ByVal sender As Object, ByVal e As ExternalDataEventArgs) 
End Interface

Class MyObject
   Implements ICatWorkflow
        Public Property RequestId() As Guid Implements ICatWorkflow.RequestId
            ...
        End Property
        Public Sub requestInfoEmail() Implements ICatWorkflow.onReception
            ...
        End Sub
        Event onReception(ByVal sender As Object, ByVal e As ExternalDataEventArgs)
end class

在我的form.aspx上,有一个按钮,在form.aspx.vb页面上,有一个相应的事件处理程序:

Protected Sub btnReception_Click(ByVal sender As Object, ByVal e As System.EventArgs)             
      Handles btnReception.Click
        ...
End Sub

从哪里开始?

1 个答案:

答案 0 :(得分:0)

我认为您正在为每个用户会话运行工作流程。如果是这样,您需要将工作流实例存储在某个地方,您可以访问它。所以要么把它放在cookie中,要么放在Session对象中。我更喜欢cookie,因为它甚至在会话超时或IIS回收AppDomain时也能正常工作。

接下来,您需要获取对ExternalDataExchange服务的引用。如果您有对工作流运行时的引用,那很容易。您只需要workflowRuntime.GetService()。接下来,您使用该服务来引发将消息发送到工作流的事件。