2009-04-16 2 views
0

기본 아이디어는 웹 사이트와 워크 플로가 있다는 것입니다. 내 작업 흐름에서 aspx 페이지의 버튼 클릭을 캡처해야합니다.asp.net 사이트의 워크 플로에 대한 webform 이벤트 캡처

나는 worflow 프로젝트와 웹 사이트 프로젝트가있는 솔루션을 가지고 있으며, web.config와 global.asax는 WF와 함께 작동하도록 설정되어 있습니다. 지속성 서비스도 설정됩니다.

StateMachine 워크 플로우를 만들었습니다. EventDrivenActivity 인스턴스를 포함하는 여러 상태 (StateActivity)가 있으며 그 안에는 HandleExternalEventActivity 인스턴스가 있습니다. 후자를 올바르게 설정하여 응용 프로그램을 컴파일 할 수 있도록 ExternalDataExchange 특성으로 장식 된 인터페이스를 만들고 필요한 이벤트를 노출했습니다. 그런 다음이 인터페이스를 구현 한 클래스를 만들었습니다.

그게 내가 가진 것입니다. 이제 클래스를 aspx 페이지에 연결해야합니다. 페이지의 이벤트는 클래스의 이벤트를 트리거해야합니다. 버튼이 있으며, form.aspx.vb 페이지에서 해당 이벤트 핸들러가 내 form.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 

:

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

내 코드는 다음과 같이 보입니다

여기서부터 어디로 가야할까요?

답변

0

사용자 세션마다 워크 플로가 실행되고있는 것으로 가정합니다. 그렇다면 워크 플로 instanceiId를 어딘가에 저장할 필요가 있습니다. 따라서 쿠키 나 세션 객체에 넣으십시오. 나는 세션이 타임 아웃되거나 AppDomain이 IIS에 의해 재활용 될 때에도 작동하기 때문에 쿠키를 선호한다.

다음으로 ExternalDataExchange 서비스에 대한 참조가 필요합니다. worklfow 런타임에 대한 참조가 있으면 쉽게 알 수 있습니다. 필요한 것은 workflowRuntime.GetService()뿐입니다. 그런 다음 서비스를 사용하여 메시지를 워크 플로로 보내는 이벤트를 발생시킵니다.

관련 문제