Unternehmenseinkaufsprozess
Dieses Thema gilt für Windows Workflow Foundation 4.
In diesem Beispiel wird die Erstellung eines einfachen, auf Ausschreibungen basierenden Einkaufsvorgangs veranschaulicht, bei dem automatisch das beste Angebot ausgewählt wird. In diesem Beispiel werden Parallel, ParallelForEach und ForEach sowie eine benutzerdefinierte Aktivität kombiniert, um einen Workflow zu erstellen, der diesen Vorgang darstellt.
Dieses Beispiel umfasst eine ASP.NET-Clientanwendung, die es ermöglicht, mit dem Vorgang als verschiedene Beteiligte (als ursprünglicher Anforderer oder als ein bestimmter Anbieter) zu interagieren.
Anforderungen
Visual Studio 2010.
.NET Framework, Version 4.
Veranschaulicht
Benutzerdefinierte Aktivitäten
Zusammensetzung von Aktivitäten
Lesezeichen
Dauerhaftigkeit
Schematisierte Dauerhaftigkeit
Ablaufverfolgung
Nachverfolgung
Hosting WF in verschiedenen Clients (ASP.NET-Webanwendungen und WinForms-Anwendungen)
![]() |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WF\Application\PurchaseProcess
|
Beschreibung des Vorgangs
In diesem Beispiel wird die Implementierung eines Windows Workflow Foundation (WF)-Programms veranschaulicht, mit dem Angebote verschiedener Anbieter für ein allgemeines Unternehmen erfasst werden.
Ein Mitarbeiter des Unternehmens X erstellt eine Ausschreibung (Request for Proposal, RFP).
Der Mitarbeiter gibt den Titel und die Beschreibung für die Ausschreibung ein.
Der Mitarbeiter wählt die Anbieter aus, die im Rahmen der Ausschreibung ihre Angebote abgeben sollen.
Der Mitarbeiter versendet die Ausschreibung.
Eine Instanz des Workflows wird erstellt.
Der Workflow wartet darauf, dass alle Anbieter ihre Angebote einreichen.
Nachdem alle Angebote empfangen wurden, durchläuft der Workflow alle eingegangenen Angebote und wählt das beste aus.
Jeder Anbieter hat einen Ruf (in diesem Beispiel wird die Reputationliste in VendorRepository.cs gespeichert).
Der Gesamtwert des Angebots wird ermittelt, indem der vom Anbieter eingegebene Wert mit dem aufgezeichneten Ruf des Anbieters multipliziert und durch 100 dividiert wird: (vom Anbieter eingegebener Wert) * (gespeicherte Reputation des Anbieters)/100.
Der ursprüngliche Anforderer kann alle eingesendeten Angebote anzeigen. Das beste Angebot wird in einem speziellen Abschnitt des Berichts präsentiert.
Vorgangsdefinition
Die Kernlogik des Beispiels verwendet eine ParallelForEach-Aktivität, die auf die Angebote der einzelnen Anbieter wartet (wobei eine benutzerdefinierte Aktivität, die ein Lesezeichen erstellt, verwendet wird) und das Angebot des Anbieters als RFP registriert (wobei eine InvokeMethod-Aktivität verwendet wird).
Im Beispiel werden dann alle eingegangenen, im RfpRepository
gespeicherten Angebote durchlaufen, wobei der angepasste Wert (mithilfe einer Assign-Aktivität und von System.Activities.Expressions-Aktivitäten) berechnet wird. Wenn der angepasste Wert besser als das zuvor als bestes Angebot eingestufte Angebot ist, wird der neue Wert als bestes Angebot (mithilfe der If-Aktivität und Assign-Aktivität) zugeordnet.
Projekte in diesem Beispiel
Dieses Beispiel enthält die folgenden Projekte.
Projekt | Beschreibung |
---|---|
Allgemein |
Die im Vorgang verwendeten Entitätsobjekte (Ausschreibung, Anbieter und Angebot). |
WfDefinition |
Die Definition des Vorgangs (als WF-Programm) und der Host ( |
WebClient |
Eine ASP.NET-Clientanwendung, mit der die Benutzer Instanzen des Einkaufsvorgangs erstellen und daran teilnehmen können. Sie verwendet einen benutzerdefinierten Host für die Interaktion mit dem Workflowmodul. |
WinFormsClient |
Eine Windows Forms-Clientanwendung, mit der die Benutzer Instanzen des Einkaufsvorgangs erstellen und daran teilnehmen können. Sie verwendet einen benutzerdefinierten Host für die Interaktion mit dem Workflowmodul. |
WfDefinition
Die folgende Tabelle enthält eine Beschreibung der wichtigsten Dateien im WfDefinition-Projekt.
Datei | Beschreibung |
---|---|
IPurchaseProcessHost.cs |
Schnittstelle für den Host des Workflows |
PurchaseProcessHost.cs |
Implementierung eines Hosts für den Workflow. Der Host fasst die Details der Workflowlaufzeit zusammen und wird in allen Clientanwendungen verwendet, um die |
PurchaseProcessWorkflow.cs |
Eine Aktivität, die die Definition des Einkaufsworkflows (abgeleitet von Activity) enthält. Die Funktionen der Aktivitäten, die sich von Activity ableiten, setzten sich aus vorhandenen benutzerdefinierten Aktivitäten und Aktivitäten aus der .NET Framework, Version 4-Aktivitätenbibliothek zusammen. Das Zusammenfügen dieser Aktivitäten stellt die grundlegendste Möglichkeit für das Erstellen benutzerdefinierter Funktionalität dar. |
WaitForVendorProposal.cs |
Diese benutzerdefinierte Aktivität leitet sich von NativeActivity ab und erstellt ein benanntes Lesezeichen, das später von einem Anbieter beim Abgeben eines Angebots wieder aufgenommen werden muss. Aktivitäten, die sich von NativeActivity ableiten, z. B. die von CodeActivity abgeleiteten, erstellen imperative Funktionalität durch das Überschreiben von Execute, haben jedoch über den ActivityContext, der an die Execute-Methode übergeben wird, auch Zugriff auf die Funktionalität der Workflowlaufzeit. Dieser Kontext verfügt über Unterstützung für die Planung und das Abbrechen von untergeordneten Aktivitäten, das Einrichten von Zonen ohne Dauerhaftigkeit (Ausführungsblöcke, in denen die Laufzeit die Daten des Workflows nicht beibehält) und Bookmark-Objekte (Handles zum Fortsetzen von angehaltenen Workflows). |
TrackingParticipant.cs |
Ein TrackingParticipant, der alle Nachverfolgungsereignisse empfängt und sie in einer Textdatei speichert. Nachverfolgungsteilnehmer werden einer Workflowinstanz als Erweiterungen hinzugefügt. |
XmlWorkflowInstanceStore.cs |
Ein benutzerdefinierter InstanceStore, der Workflowanwendungen in XML-Dateien speichert. |
XmlPersistenceParticipant.cs |
Ein benutzerdefinierter PersistenceParticipant, der eine Instanz der Ausschreibung in einer XML-Datei speichert. |
AsyncResult.cs / CompletedAsyncResult.cs |
Hilfsklassen zum Implementieren des asynchronen Musters in den Dauerhaftigkeitskomponenten. |
Allgemein
Die folgende Tabelle enthält eine Beschreibung der wichtigsten Klassen des Common-Projekts.
Klasse | Beschreibung |
---|---|
Vendor |
Ein Anbieter, der im Rahmen einer Ausschreibung Angebote abgibt. |
RequestForProposal |
Im Rahmen einer Ausschreibung (Request for Proposal, RFP) werden Anbieter aufgefordert, Angebote für eine bestimmte Ware oder Dienstleistungen abzugeben. |
VendorProposal |
Ein Angebot, das im Rahmen einer Ausschreibung von einem Anbieter abgegeben wird. |
VendorRepository |
Das Repository der Anbieter. Diese Implementierung enthält eine im Speicher befindliche Auflistung der Vendor-Instanzen und Methoden zum Bereitstellen dieser Instanzen. |
RfpRepository |
Das Repository der Ausschreibungen. Diese Implementierung verwendet LINQ to XML für die Abfrage der XML-Datei der Ausschreibung, die von der schematisierten Dauerhaftigkeit erstellt wurde. Diese Klasse implementiert IDataViewMapper. |
IOHelper |
Diese Klasse behandelt alle E/A-bezogenen Probleme (Ordner, Pfade usw.) |
Webclient
Die folgende Tabelle enthält eine Beschreibung der wichtigsten Webseiten des Webclientprojekts.
Datei |
Beschreibung |
CreateRfp.aspx |
Erstellt und sendet eine neue Ausschreibung. |
Default.aspx |
Zeigt alle aktiven und abgeschlossenen Ausschreibungen an. |
GetVendorProposal.aspx |
Ruft im Rahmen einer bestimmten Ausschreibung ein Angebot eines Anbieters ab. Diese Seite wird nur von Anbietern verwendet. |
ShowRfp.aspx |
Zeigt alle Informationen über eine Ausschreibung an (eingegangene Angebote, Daten, Werte usw.). Diese Seite wird nur vom Ersteller der Ausschreibung verwendet. |
WinForms-Client
Die folgende Tabelle enthält eine Beschreibung der wichtigsten Formulare des Win Forms-Projekts.
Formular |
Beschreibung |
NewRfp |
Erstellt und sendet eine neue Ausschreibung. |
ShowProposals |
Zeigt alle aktuellen und abgeschlossenen Ausschreibungen an. ![]()
Sie müssen möglicherweise auf die Schaltfläche Aktualisieren klicken, um die Änderungen anzuzeigen, wenn Sie eine Ausschreibung erstellt oder geändert haben.
|
SubmitProposal |
Ruft im Rahmen einer bestimmten Ausschreibung ein Angebot eines Anbieters ab. Dieses Fenster wird nur von Anbietern verwendet. |
ViewRfp |
Zeigt alle Informationen über eine Ausschreibung an (eingegangene Angebote, Daten, Werte usw.). Dieses Fenster wird nur vom Ersteller der Ausschreibung verwendet. |
Dauerhaftigkeitsdateien
In der folgenden Tabelle sind die Dateien aufgeführt, die vom Dauerhaftigkeitsanbieter (XmlPersistenceProvider
) erstellt werden. Die Dateien befinden sich im Pfad des TEMP-Ordners des aktuellen Systems (unter Verwendung von GetTempPath). Die Ablaufverfolgungsdatei wird im aktuellen Ausführungspfad erstellt.
Dateiname |
Beschreibung |
Pfad |
rfps.xml |
Die XML-Datei mit allen aktuellen und abgeschlossenen Ausschreibungen. |
GetTempPath |
[Instanz-ID] |
Diese Datei enthält alle Informationen zu einer Workflowinstanz. Diese Datei wird von der schematisierten Dauerhaftigkeitsimplementierung (PersistenceParticipant in XmlPersistenceProvider) generiert. |
GetTempPath |
[Instanz-ID].tracking |
Eine Textdatei mit allen Ereignissen, die innerhalb einer konkreten Instanz aufgetreten sind. Diese Datei wird von TrackingParticipant generiert. |
GetTempPath |
PurchaseProcess.Tracing.TraceLog.txt |
Die Ablaufverfolgungsdatei, die vom Workflow auf Grundlage der Konfigurationsparameter in den Dateien App.config oder Web.config generiert wird. |
Aktueller Ausführungspfad |
So verwenden Sie dieses Beispiel
Öffnen Sie mit Visual Studio 2010 die PurchaseProcess.sln-Projektmappendatei.
Öffnen Sie zum Ausführen des Webclientprojekts den Projektmappen-Explorer, und klicken Sie mit der rechten Maustaste auf das Web Client-Projekt. Wählen Sie Als Startprojekt festlegen aus.
Öffnen Sie zum Ausführen des WinForms-Clientprojekts den Projektmappen-Explorer, und klicken Sie mit der rechten Maustaste auf das WinForms Client-Projekt. Wählen Sie Als Startprojekt festlegen aus.
Drücken Sie F6, um die Projektmappe zu erstellen.
Drücken Sie STRG+F5, um die Projektmappe auszuführen.
Webclientoptionen
Neue Ausschreibung erstellen: Erstellt eine neue Ausschreibung und startet den Einkaufsworkflow.
Aktualisieren: Aktualisiert die Liste der aktuellen und abgeschlossenen Ausschreibungen im Hauptfenster.
Ansicht: Zeigt den Inhalt einer vorhandenen Ausschreibung an. Anbieter können ihre Angebote senden (wenn eingeladen oder die Ausschreibung noch nicht beendet ist).
Anzeigen als: Der Benutzer kann mit verschiedenen Identitäten auf die Ausschreibung zugreifen, indem er den gewünschten Teilnehmer im Kombinationsfeld Anzeigen als auswählt.
WinForms-Clientoptionen
Ausschreibung erstellen: Erstellt eine neue Ausschreibung und startet den Einkaufsworkflow.
Aktualisieren: Aktualisiert die Liste der aktuellen und abgeschlossenen Ausschreibungen im Hauptfenster.
Ausschreibung anzeigen: Zeigt den Inhalt einer vorhandenen Ausschreibung an. Anbieter können ihre Angebote senden (wenn eingeladen oder die Ausschreibung noch nicht beendet ist).
Verbinden als: Der Benutzer kann mit verschiedenen Identitäten auf die Ausschreibung zugreifen, indem er den gewünschten Teilnehmer im Kombinationsfeld Anzeigen als auswählt.