2009-04-16 4 views
0

L'idée de base est que j'ai un site web et un workflow. Je dois capturer les clics sur les boutons des pages aspx dans mon flux de travail.capture d'événement webform pour workflow sur le site asp.net

J'ai une solution avec un projet worflow et un projet de site Web, et les fichiers web.config et global.asax ont été configurés pour fonctionner avec WF. Des services de persistance sont également mis en place.

J'ai créé un workflow StateMachine. Il existe plusieurs états (StateActivity) contenant des instances EventDrivenActivity, à l'intérieur desquelles se trouvent des instances HandleExternalEventActivity. Pour configurer ce dernier correctement afin que l'application puisse compiler, j'ai créé une interface décorée avec l'attribut ExternalDataExchange, et exposer les événements nécessaires. J'ai ensuite créé une classe qui a implémenté cette interface.

C'est aussi loin que j'ai eu. Maintenant, je dois connecter la classe à ma page aspx; les événements sur la page doivent déclencher les événements de la classe.

Mon code ressemble à ceci:

<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 

Sur mon âge de form.aspx, il y a un bouton, et à la page form.aspx.vb, il y a un gestionnaire d'événements correspondant:

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

Où aller d'ici?

Répondre

0

Je présume que vous exécutez un flux de travail par session utilisateur. Si c'est le cas, vous devez stocker le flux de travail instanceiId quelque part, vous pouvez y accéder. Donc soit le mettre dans un cookie ou dans l'objet Session. Je préfère le cookie car il fonctionne même lorsque la session expire ou que AppDomain est recyclé par IIS.

Ensuite, vous devez obtenir une référence au service ExternalDataExchange. C'est facile si vous avez une référence à l'exécution de worklfow. Tout ce dont vous avez besoin est workflowRuntime.GetService(). Ensuite, vous utilisez le service pour déclencher l'événement qui envoie le message à votre flux de travail.