2009-04-16 61 views
0

基本思想是我有一个网站和一个工作流程。我需要从我的工作流中的aspx页面捕获按钮点击。捕获asp.net网站上的工作流程的webform事件

我有一个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

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

接下来,您需要获取对ExternalDataExchange服务的引用。如果你有一个对worklfow运行时的引用,那很简单。所有你需要的是workflowRuntime.GetService()。接下来,您使用该服务来引发将消息发送到工作流程的事件。