Unternehmenseinkaufsprozess

Im Beispiel „PurchaseProcess“ 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<T> und ForEach<T> 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 aus der Perspektive verschiedener Beteiligter (ursprünglicher Anforderer oder bestimmter Anbieter) zu interagieren.

Zeigt

  • Benutzerdefinierte Aktivitäten

  • Komposition von Aktivitäten

  • Lesezeichen.

  • Dauerhaftigkeit

  • Schematisierte Dauerhaftigkeit

  • Ablaufverfolgung

  • Nachverfolgung

  • das Hosten von WF in verschiedenen Clients (ASP.NET-Webanwendungen und WinForms-Anwendungen)

Beschreibung des Vorgangs

In diesem Beispiel wird die Implementierung eines Windows Workflow Foundation (WF)-Programms veranschaulicht, mit dem Angebote verschiedener Anbieter für ein typisches Unternehmen erfasst werden.

  1. Ein Mitarbeiter des Unternehmens X erstellt eine Ausschreibung (Request for Proposal, RFP).

    1. Der Mitarbeiter gibt den Titel und die Beschreibung für die Ausschreibung ein.

    2. Die Mitarbeiter*innen wählen die Anbieter aus, die im Rahmen der Ausschreibung ihre Angebote abgeben sollen.

  2. Der Mitarbeiter versendet die Ausschreibung.

    1. Eine Instanz des Workflows wird erstellt.

    2. Der Workflow wartet darauf, dass alle Anbieter ihre Angebote einreichen.

  3. Nachdem alle Angebote empfangen wurden, durchläuft der Workflow alle eingegangenen Angebote und wählt das beste aus.

    1. Jeder Anbieter hat einen Ruf (in diesem Beispiel wird die Reputationliste in VendorRepository.cs gespeichert).

    2. 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.

  4. Der ursprüngliche Anforderer kann alle eingesendeten Angebote anzeigen. Das beste Angebot wird in einem speziellen Abschnitt des Berichts präsentiert.

Prozessdefinition

Die Kernlogik des Beispiels verwendet eine ParallelForEach<T>-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 des Hosts (PurchaseProcessHost), die von den Clientanwendungen zum Erstellen und Verwenden von Instanzen des Einkaufsworkflows verwendet werden.
WebClient Eine .ASP.NET-Clientanwendung, mit der Benutzer*innen Instanzen des Einkaufsvorgangs erstellen und daran teilnehmen können. Sie verwendet einen benutzerdefinierten Host für die Interaktion mit der Workflow-Engine.
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 der Workflow-Engine.

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 PurchaseProcess-Workflowinstanzen zu laden, auszuführen und damit zu interagieren.
PurchaseProcessWorkflow.cs Eine Aktivität, die die Definition des Einkaufsworkflows (abgeleitet von Activity) enthält.

Aktivitäten, die sich von Activity ableiten, setzen sich aus vorhandenen benutzerdefinierten Aktivitäten und Aktivitäten aus der .NET Framework 4.6.1-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.

Mit Aktivitäten, die von der NativeActivity abgeleitet werden (etwa von der CodeActivity abgeleitete Aktivitäten), wird eine imperative Funktionalität erzeugt, indem Execute überschrieben wird. Es besteht jedoch über den ActivityContext, der an die Execute-Methode weitergegeben wird, Zugriff auf die gesamte Funktionalität der Workflowlaufzeit. Dieser Kontext verfügt über die 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 Runtime die Daten des Workflows nicht beibehält, wie das bei atomischen Transaktionen der Fall ist) 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
Hersteller 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.
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. Hinweis: Sie müssen möglicherweise auf die Schaltfläche Aktualisieren klicken, um Änderungen in diesem Bildschirm zu sehen, nachdem 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 von den Ersteller*innen 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 `Path`
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

  1. Öffnen Sie mit Visual Studio die Lösungsdatei „PurchaseProcess.sln“.

  2. Öffnen Sie zum Ausführen des Webclientprojekts den Projektmappen-Explorer, und klicken Sie mit der rechten Maustaste auf das Webclientprojekt. Wählen Sie Als Startprojekt festlegen aus.

  3. Ö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.

  4. Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.

  5. Drücken Sie STRG+F5, um die Projektmappe auszuführen.

Webclientoptionen

  • Neue Ausschreibung erstellen: Erstellt eine neue Ausschreibung und startet einen Einkaufsworkflow.

  • Aktualisieren: Aktualisiert die Liste der aktiven 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: Benutzer*innen können mit verschiedenen Identitäten auf die Ausschreibung zugreifen, indem sie den*die gewünschte*n Teilnehmer*in im Kombinationsfeld Anzeigen als des Rasters der aktiven Ausschreibung auswählen.

WinForms-Clientoptionen

  • Ausschreibung erstellen: Erstellt eine neue Ausschreibung und startet einen Einkaufsworkflow.

  • Aktualisieren: Aktualisiert die Liste der aktiven 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: Benutzer*innen können mit verschiedenen Identitäten auf die Ausschreibung zugreifen, indem sie den*die gewünschte*n Teilnehmer*in im Kombinationsfeld Anzeigen als des Rasters der aktiven Ausschreibung auswählen.