2009-08-25 7 views
0

Salut à tous, j'ai créé un WinForms pour gérer les activités de persistance en utilisant Windows WorkFlow Foundation. J'utilise le .NET 3.0 SQL et VS2005 comme IDE avec C# comme langage de code. De plus, l'environnement est mandaté par la politique d'entreprise pour le développement. Donc, jusqu'à ce que les dinosaures décident de mettre à niveau, je suis coincé avec VS2005.State Machine Persistence WorkFlow

Mon problème est celui-ci, je suis capable de travailler avec 1 flux de travail à la fois, et j'aimerais pouvoir gérer plusieurs flux de travail. Comme lorsque je clique sur le bouton Envoyer de mon formulaire, j'aimerais pouvoir créer une nouvelle instance de WorkFlow. J'ai créé l'environnement d'exécution et ajouté tous les services appropriés. Je persiste dans la persistance, et quand je clique sur Submit, je démarre une instance de WorkFlow. Je suis relativement nouveau à la Fondation WorkFlow, et les liens MSDN ont fourni peu ou pas d'aide pour moi. Si quelqu'un pouvait me mettre dans la bonne direction dans mon code source, ce serait utile.

J'ai joint un lien vers la source de mon projet.

Click Here for the Source

Merci à l'avance!

Répondre

0

J'ai jeté un coup d'oeil et il semble que vous créez un nouveau flux de travail chaque fois que vous cliquez sur Envoyer. Je reçois un nouvel identifiant d'instance, ce qui est un bon signe :) PopulatePSUP (chaîne instanceID) capture l'identifiant de l'instance pour la liste déroulante. Mais vous ne stockez qu'un identifiant d'instance à la fois dans Guid _instanceID. Cette variable de niveau de formulaire est ensuite utilisée pour tous les événements de bouton. Vous pouvez insead utiliser le cboPSUPItems.Text.

Quelque chose comme:

private void btnPSUPApprove_Click(object sender, EventArgs e) 
    { 
     string instanceId = this.cboPSUPItems.Text; 

     if (instanceId.Length > 0) 
     { 
      myArgs.Approved = true; 
      approved = "Yes"; 
      this.resumeHistory[ instanceId ].Clear(); 
      this.resumeHistory[ instanceId ].Add("Name: " + applicantName); 
      this.resumeHistory[ instanceId ].Add("Email:" + applicantEmail); 
      this.resumeHistory[ instanceId ].Add("Text:" + applicantText); 
      this.resumeHistory[ instanceId ].Add("Approved:" + approved); 
      this.resumeHistory[ instanceId ].Add("Denied:" + denied); 
      this.resumeHistory[ instanceId ].Add("PD Approval Requested:" + pDRequest); 
      resumeService.RaisePSUPApprovedEvent(new Guid(instanceId) , myArgs); 
      this.cboPSUPItems.Items.Remove(this.cboPSUPItems.SelectedItem); 
      txtPSUPNotes.Clear(); 
     } 
    } 

Vous voudrez peut-être penser à utiliser une collection/liste pour stocker les instanceIds en tant que bien. Pour toute logique de flux de travail.

Quelque chose comme:

List<Guid> _instanceIds = new List<Guid>(); 

... 

_instanceIds.Add(instance.InstanceId); 
+0

Hey Merci pour la réponse Marc. J'utilise ceci comme application de test pour me familiariser avec la fondation WorkFlow. Après avoir regardé ce que j'ai fait à nouveau, tu as raison. J'ai supprimé en utilisant la variable _instaneID, et passons dans le texte déroulant avec chaque événement suivant soulevé. Qu'est-ce que je me demande est comment puis-je récupérer les flux de travail existants à partir de la base de données et de remplir les informations en tant que tel? Je pense à gérer chaque événement et à stocker des données dans une base de données. Une telle chose est possible? – AProgrammer

+0

Bien sûr. Je pense que le problème que vous rencontrerez consistera à déterminer dans quel état se trouve un flux de travail spécifique. L'état du workflow est conservé en tant que données sérialisées dans un champ binaire, il est donc difficile de déterminer quel identifiant appartient à quel état. Vous pourriez trouver le plus facile de suivre cela en externe. Ce billet donne un bref aperçu de la persistance en action et est un bon point de départ: http://blogs.msdn.com/kaevans/archive/2008/12/09/understanding-persistence-in-windows-workflow- foundation.aspx – MarcLawrence

Questions connexes