2009-08-25 13 views
0

Hey alle, ich habe eine WinForms erstellt, um Persistence Activities mit der Windows WorkFlow Foundation zu behandeln. Ich verwende .NET 3.0 SQL und VS2005 als IDE mit C# als Code-Sprache. Auch das Umfeld ist mir durch die Unternehmenspolitik für Entwicklung vorgegeben. Bis die Dinosaurier sich für ein Upgrade entscheiden, stehe ich mit VS2005 fest.Zustand Maschine Persistenz WorkFlow

Mein Problem ist dies, ich bin in der Lage, mit 1 Workflow zu einer Zeit zu arbeiten, und ich möchte in der Lage sein, mehrere Workflows zu behandeln. Wenn ich auf die Schaltfläche "Senden" in meinem Formular klicke, möchte ich in der Lage sein, eine neue WorkFlow-Instanz zu erstellen.

Ich habe die Laufzeit erstellt und fügen Sie alle entsprechenden Dienste hinzu. Ich hake Persistenz ein, und wenn ich auf Submit klicke, beginne ich eine Instanz von WorkFlow. Ich bin relativ neu in der WorkFlow Foundation, und die MSDN-Links haben mir wenig geholfen. Wenn jemand mich in die richtige Richtung innerhalb meines Quellcodes bringen könnte, wäre das hilfreich.

Ich habe einen Link zur Quelle für mein Projekt hinzugefügt.

Click Here for the Source

Vielen Dank im Voraus!

Antwort

0

Ich habe es mir angesehen und es sieht so aus, als ob Sie jedes Mal, wenn Sie auf "Senden" klicken, einen neuen Arbeitsablauf erstellen. Ich bekomme eine neue Instanz-ID, was ein gutes Zeichen ist :) PopulatePSUP (string instanceID) erfasst die Instanz-ID für das Dropdown. Sie speichern jedoch nur eine Instanz-ID in Guid _instanceID. Diese Formularstufenvariable wird dann für alle Schaltflächenereignisse verwendet. Sie könnten den cboPSUPItems.Text verwenden.

Etwas wie:

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(); 
     } 
    } 

Sie können eine Sammlung/Liste denken über die Verwendung der instanceIds in als auch zu speichern. Für jede Workflow-weite Logik.

Etwas wie:

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

... 

_instanceIds.Add(instance.InstanceId); 
+0

Hey Danke für die Antwort Marc. Ich benutze dies als eine Testanwendung, um sich mit der WorkFlow Foundation vertraut zu machen. Nachdem ich überlegt habe, was ich getan habe, hast du recht. Ich habe mit der Variable _instaneID entfernt und übergebe den Dropdown-Text mit jedem folgenden Ereignis, das ausgelöst wird. Was ich frage mich ist, wie kann ich die vorhandenen Arbeitsabläufe von der Datenbank ergreifen und die Informationen als solche auffüllen? Ich denke darüber nach, jedes Ereignis zu behandeln und Daten in einer Datenbank zu speichern. Ist so etwas möglich? – AProgrammer

+0

Sicher. Ich denke, das Problem, mit dem Sie konfrontiert werden, ist herauszufinden, in welchem ​​Zustand ein bestimmter Workflow ist. Der Workflow-Status wird als serialisierte Daten in einem binären Feld beibehalten, so dass es schwierig sein würde zu bestimmen, welche ID zu welchem ​​Zustand gehört. Vielleicht finden Sie es am einfachsten, das extern zu verfolgen. Dieser Beitrag gibt einen schnellen Überblick über Persistenz in Aktion und ist ein guter Anfang: http://blogs.msdn.com/kaevans/archive/2008/12/09/understanding-persistence-in-windows-workflow- foundation.aspx – MarcLawrence