locked
handleExternalEvent : probleme avec l'evenement invoke RRS feed

  • Question

  •  Bonjour,

     Je suis débutant dans les workflow WWF, et voila mon problème :

     Au début de mon workflow, j'ai un handleExternalEvent où j'attache une interface et une methode.

     je lui ajoute aussi un évenement invoke : d'après la définition de cet évenement, il se déclenche après l'execution de la méthode de l'interface de communication.

     Quand j'appelle mon workflow depuis une appli ASP.NET 2.0, la méthode attachée au workflow est bien exécutée, mais il sort direct après. il n'execute ni l'invoke ni les autres activités du workflow.

     Voilà mon code :

     

    --------- interface de communication------------

    [Serializable]

    public class MyEventArgs : ExternalDataEventArgs

    {

     private Bordereau _Bord = null;

     public Bordereau Bord

     {

        get { return _Bord; }

        set { _Bord = value; }

     }

     public MyEventArgs(Guid instanceID, Bordereau Bord) : base(instanceID)

     {

        this.Bord = Bord;

     }

    }

    [ExternalDataExchange]

    interface ICommunication

    {

     void CreateBordereau(Guid instanceID, Bordereau Bord);

     event EventHandler<MyEventArgs> NewBordereau;

    }

     

    --objet communication--

    public class Communication : ICommunication

    {

     public event EventHandler<MyEventArgs> NewBordereau;

     public void CreateBordereau(Guid instanceID, Bordereau Bord)

     {

      if(NewBordereau!=null)

       this.NewBordereau(null, new MyEventArgs(instanceID, Bord));

     }

    }

    -------------------------------------------------------------

    ------------- Appli Web --------------------------------

     

    WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;

    // Attach to the WorkflowCompleted event

    workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(WorkflowRuntime_WorkflowCompleted);

    ManualWorkflowSchedulerService manualScheduler =

    workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService))

    as ManualWorkflowSchedulerService;

     

    ExternalDataExchangeService dataService = workflowRuntime.GetService<ExternalDataExchangeService>();

    Communication ServiceCommunication = workflowRuntime.GetService<Communication>();

    if (ServiceCommunication == null)

    {

     ServiceCommunication = new Communication();

     dataService.AddService(ServiceCommunication);

    }

    instance = workflowRuntime.CreateWorkflow(typeof(Workflow1));

    instance.Start();

    manualScheduler.RunWorkflow(instance.InstanceId);

    ServiceCommunication.CreateBordereau(instance.InstanceId, this.Bord);

      -------------------------------------------------------------

     

    Si quelqu'un à une idée, merci

    mercredi 18 avril 2007 12:33

Réponses

  • Bonjour,

     

    A vu de nez, je dirai qu'il te fait inverser ces deux lignes:

     

    Code Snippet

    manualScheduler.RunWorkflow(instance.InstanceId);

    ServiceCommunication.CreateBordereau(instance.InstanceId, this.Bord);

     

     

    Est ce que cela marche?

    mercredi 18 avril 2007 21:38