IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Workflow Foundation .NET Discussion :

workflow eventHandler null


Sujet :

Windows Workflow Foundation .NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut workflow eventHandler null
    Bonjour,

    j'ai un StateMachine workflow d'approbation d'une demande de droits.
    Cette demande peut avoir les états suivants (ce sont des "State" du workflow) : InProgress, Validated, Cancelled, Processed, etc.

    Quand je souhaite par exemple valider une demande, c a d la faire passer de "Inprogress" à "Validated", je déclenche un évènement "eventValidated".

    Le problème est que parfois l'eventHandler associé à cet évènement est null.
    Quand je crée moi-même la demande sur mon poste, tout se passe bien, quand cette demande a été créée sur un autre poste (on travaille à deux sur ce projet), l'eventHandler est null.

    Voici le code associé dans ma classe Service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public event EventHandler<WrapperEventArgs> eventValidated;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public bool ValidateDemand(Demand pDemand)
            {
                Check.ArgumentIsNotNull(pDemand, "demand");
                bool eventResult = RaiseEvent(eventValidated, pDemand, pDemand.WorkflowId);
                if (eventResult == true)
                {
                    WorkflowResults workflowResults =
                        WorkflowMediator.Instance.RunWorkflow(pDemand.WorkflowId);
                    Check.IsNotNull(workflowResults, "Could not harvest workflow results");
     
                    VerifyResults(workflowResults, WorkflowStatus.Running);
                }
                return eventResult;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    private bool RaiseEvent(EventHandler<WrapperEventArgs> ev,
                            Demand pDemand, Guid instanceId)
            {
                bool result = true;
                try
                {
     
                    if (ev != null)
                    {
                        WrapperEventArgs e = new WrapperEventArgs(instanceId, pDemand);
                        ev(null, e);
                    }
                    else
                        result = false;
                }
                catch (EventDeliveryFailedException)
                {
                    result = false;
                }
     
                return result;
            }
    Donc c'est le "ev" (= EventHandler<WrapperEventArgs> eventValidated), paramètre de la dernière méthode "RaiseEvent" qui est parfois null.

    Une idée d'où pourrait venir ce problème ?

    Merci,

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut EventDeliveryFailedException
    Alors en plaçant la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    workflowResults = WorkflowMediator.Instance.RunWorkflow(pDemand.WorkflowId);
    au début de la méthode "ValidateDemand" avant de faire le "RaiseEvent", l'eventHandler "ev" n'est plus null, mais je tombe après dans le "EventDeliveryFailedException"..

    Le détail de l'exception est :
    Impossible de fournir l'événement "eventValidated" sur le type d'interface "WFServiceInterface.IService" associé à l'ID d'instance "b46f6a03-1b15-4179-a905-9cec28cb9969".
    InnerException :
    System.IndexOutOfRangeException "L'index se trouve en dehors des limites du tableau."

    Ma classe "WrapperEventArgs" est bien marquée [Serializable], et a "WaitForIdle = true"..

    Any ideas ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Résolu
    Le problème de l'eventHandler null a finalement été résolu en ajoutant dans la classe Service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorkflowResults workflowResults = null;
    puis, dans la méthode ValidateDemand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public bool ValidateDemand(Demand pDemand)
            {
                Check.ArgumentIsNotNull(pDemand, "demand");
     
                if (workflowResults == null)
                {
                    workflowResults = WorkflowMediator.Instance.RunWorkflow(typeof(StateMachineWorkflow));
                    Check.IsNotNull(workflowResults, "Could not harvest workflow results");
                    VerifyResults(workflowResults, WorkflowStatus.Running);
                }
     
                bool eventResult = RaiseEvent(eventValidated, pDemand, pDemand.WorkflowId);
                if (eventResult == true)
                {
                    workflowResults = WorkflowMediator.Instance.RunWorkflow(pDemand.WorkflowId);
                    Check.IsNotNull(workflowResults, "Could not harvest workflow results");
     
                    VerifyResults(workflowResults, WorkflowStatus.Running);
                }
                return eventResult;
            }
    Quant au "eventDeliveryFailedException", ça venait probablement du fait que l'on a modifié le design du workflow, puis que l'on essayait de charger une instance de workflow qui avait le design d'avant les modifications.

Discussions similaires

  1. [SP-2007] Lancer un workflow avec un EventHandler
    Par speslurp dans le forum SharePoint
    Réponses: 5
    Dernier message: 03/08/2009, 09h37
  2. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  3. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/06/2003, 10h17
  4. [VB6] [BDD] Recordset et champ égal à Null
    Par Gr|ppen dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2003, 10h00
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo