基本的想法是我有一个网站和一个工作流程。我需要在工作流程中捕获来自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
从哪里开始?
答案 0 :(得分:0)
我认为您正在为每个用户会话运行工作流程。如果是这样,您需要将工作流实例存储在某个地方,您可以访问它。所以要么把它放在cookie中,要么放在Session对象中。我更喜欢cookie,因为它甚至在会话超时或IIS回收AppDomain时也能正常工作。
接下来,您需要获取对ExternalDataExchange服务的引用。如果您有对工作流运行时的引用,那很容易。您只需要workflowRuntime.GetService()。接下来,您使用该服务来引发将消息发送到工作流的事件。