Processus d'achat d'entreprise
L’exemple PurchaseProcess montre comment créer un processus d’achat basé sur des appels d’offres très simples avec sélection automatique de la meilleure proposition. Il combine Parallel, ParallelForEach<T> et ForEach<T> ainsi qu'une activité personnalisée pour créer un workflow qui représente le processus.
Cet exemple contient une application cliente ASP.NET qui permet d’interagir avec le processus sous l’identité de différents participants (en tant que demandeur d’origine ou fournisseur particulier).
Illustre le
Activités personnalisées.
Composition des activités
les signets ;
Persistance.
Persistance schématisée.
Traçage.
Suivi.
Hébergement de WF dans différents clients (applications Web ASP.NET et applications WinForms).
Description du processus
Cet exemple illustre l’implémentation d’un programme Windows Workflow Foundation (WF) permettant de recueillir des propositions auprès des fournisseurs d’une entreprise générique.
Un employé de la Société X crée un appel d'offres.
L'employé tape le titre et la description de l'appel d'offres.
L’employé sélectionne les fournisseurs qu’il souhaite inviter à soumettre des propositions.
L'employé soumet la proposition.
Une instance du workflow est créée.
Le workflow attend que tous les fournisseurs soumettent leurs propositions.
Une fois toutes les propositions reçues, le workflow effectue une itération au sein d'entre elles et sélectionne la meilleure.
Chaque fournisseur a une réputation (cet exemple stocke la liste des réputations dans VendorRepository.cs).
La valeur totale de la proposition est déterminée par (Valeur tapée par le fournisseur) * (Réputation enregistrée du fournisseur) / 100.
Le demandeur d'origine peut consulter toutes les propositions soumises. La meilleure proposition est présentée dans une section spéciale du rapport.
Définition de processus
La logique principale de l'exemple utilise une activité ParallelForEach<T> qui attend les offres de chaque fournisseur (à l'aide d'une activité personnalisée qui crée un signet) et inscrit la proposition de fournisseur comme un appel d'offres (à l'aide d'une activité InvokeMethod ).
L'exemple effectue ensuite une itération au sein de toutes les propositions reçues stockées dans le RfpRepository
, en calculant la valeur ajustée (à l'aide d'une activité Assign et d'activités System.Activities.Expressions) et, si la valeur ajustée est meilleure que la meilleure offre précédente, assigne la nouvelle valeur comme meilleure offre (à l'aide des activités If et Assign).
Projets dans cet exemple
Cet exemple contient les projets suivants.
Projet | Description |
---|---|
Courant | Objets entité utilisés dans le processus (Appel d'offres, Fournisseur et Proposition de fournisseur). |
WfDefinition | Définition du processus (comme un programme WF) et de l’hôte (PurchaseProcessHost ) utilisés par les applications clientes pour la création et l’utilisation des instances du workflow du processus d’achat. |
WebClient | Application cliente ASP.NET qui permet aux utilisateurs de créer des instances du processus d’achat et d’y participer. Elle utilise un hôte créé de façon personnalisée pour interagir avec le moteur de workflow. |
WinFormsClient | Application cliente Windows Forms qui permet aux utilisateurs de créer des instances du processus d'achat et d'y participer. Elle utilise un hôte créé de façon personnalisée pour interagir avec le moteur de workflow. |
WfDefinition
Le tableau suivant contient une description des fichiers les plus importants dans le projet WfDefinition.
Fichier | Description |
---|---|
IPurchaseProcessHost.cs | Interface pour l'hôte du workflow. |
PurchaseProcessHost.cs | Implémentation d'un hôte pour le workflow. L'hôte rend les détails de l'exécution du workflow abstraits et est utilisé dans toutes les applications clientes pour charger et exécuter les instances de workflow PurchaseProcess , et interagir avec celles-ci. |
PurchaseProcessWorkflow.cs | Activité qui contient la définition du workflow du processus d'achat (dérive de Activity). Les activités qui dérivent de Activity composent les fonctionnalités en assemblant des activités personnalisées existantes et des activités de la bibliothèque d’activités .NET Framework 4.6.1. Assembler ces activités est la méthode la plus simple pour créer des fonctionnalités personnalisées. |
WaitForVendorProposal.cs | Cette activité personnalisée dérive de NativeActivity et crée un signet nommé qui doit être repris ultérieurement par un fournisseur lors de l'envoi de la proposition. Les activités qui dérivent de NativeActivity, comme celles qui dérivent de CodeActivity, créent des fonctionnalités impératives en remplaçant la méthode Execute, mais elles ont également accès à toutes les fonctionnalités d'exécution de workflow via le contexte ActivityContext passé dans la méthode Execute . Ce contexte prend en charge la planification et l’annulation des activités enfants, la configuration de zones sans persistance (blocs d’exécution pendant lesquels le runtime ne conserve pas les données du workflow, comme dans les transactions atomiques) et les objets Bookmark (descripteurs pour la reprise des workflows suspendus). |
TrackingParticipant.cs | TrackingParticipant qui reçoit tous les événements de suivi et les enregistre dans un fichier texte. Les participants de suivi sont ajoutés à l’instance de workflow comme Extensions. |
XmlWorkflowInstanceStore.cs | InstanceStore personnalisé qui enregistre des applications de workflow dans des fichiers XML. |
XmlPersistenceParticipant.cs | PersistenceParticipant personnalisé qui enregistre une instance d'appel d'offres dans un fichier XML. |
AsyncResult.cs / CompletedAsyncResult.cs | Classes d’assistance pour l’implémentation du modèle asynchrone dans les composants de persistance. |
Courant
Le tableau suivant contient une description des classes les plus importantes dans le projet Common.
Classe | Description |
---|---|
Fournisseur | Fournisseur qui soumet des propositions dans un appel d'offres. |
RequestForProposal | Un appel d'offres est une invitation pour les fournisseurs à soumettre des propositions sur une marchandise ou un service spécifique. |
VendorProposal | Proposition soumise par un fournisseur dans un appel d'offres concret. |
VendorRepository | Référentiel de fournisseurs. Cette implémentation contient une collection en mémoire d'instances de Fournisseur et de méthodes pour l'exposition de ces instances. |
RfpRepository | Référentiel d'appels d'offres. Cette implémentation contient des utilisations de LINQ to XML pour interroger le fichier XML d'appels d'offres généré par la persistance schématisée. |
IOHelper | Cette classe gère tous les problèmes liés aux E/S (dossiers, chemins d'accès, et ainsi de suite). |
Client web
Le tableau suivant contient une description des pages web les plus importantes dans le projet web Client.
Fichier | Description |
---|---|
CreateRfp.aspx | Crée et soumet un nouvel appel d'offres. |
Default.aspx | Affiche tous les appels d'offres actifs et terminés. |
GetVendorProposal.aspx | Obtient une proposition d'un fournisseur dans un appel d'offres concret. Cette page est utilisée uniquement par les fournisseurs. |
ShowRfp.aspx | Affiche toutes les informations sur un appel d'offres (propositions reçues, dates, valeurs et autres informations). Cette page est utilisée uniquement par le créateur de l'appel d'offres. |
WinForms Client
Le tableau suivant contient une description des formulaires les plus importants dans le projet Win Forms.
Formulaire | Description |
---|---|
NewRfp | Crée et soumet un nouvel appel d'offres. |
ShowProposals | Affiche tous les appels d'offres actifs et terminés. Remarque : vous devrez peut-être cliquer sur le bouton Actualiser de l’interface utilisateur pour afficher les modifications apportées à cet écran après avoir créé ou modifié un appel d’offres. |
SubmitProposal | Obtient une proposition d'un fournisseur dans un appel d'offres concret. Cette fenêtre est utilisée uniquement par les fournisseurs. |
ViewRfp | Affiche toutes les informations sur un appel d'offres (propositions reçues, dates, valeurs et autres informations). Cette fenêtre est uniquement utilisée par le créateur de l’appel d’offres. |
Fichiers de persistance
Le tableau suivant indique que les fichiers générés par le fournisseur de persistance (XmlPersistenceProvider
) se trouvent dans le chemin d’accès du dossier temporaire du système actuel (à l’aide de GetTempPath). Le fichier de suivi est créé dans le chemin d’exécution actuel.
Nom de fichier | Description | Path |
---|---|---|
rfps.xml | Fichier XML avec tous les appels d'offres actifs et terminés. | GetTempPath |
[instanceid] | Ce fichier contient toutes les informations sur une instance de workflow. Ce fichier est généré par l'implémentation de persistance schématisée (PersistenceParticipant dans XmlPersistenceProvider). |
GetTempPath |
[instanceId].tracking | Fichier texte avec tous les événements qui se sont produits dans une instance concrète. Ce fichier est généré par TrackingParticipant. |
GetTempPath |
PurchaseProcess.Tracing.TraceLog.txt | Fichier de suivi généré par le workflow selon les paramètres de configuration dans les fichiers App.config ou Web.config. | Chemin d’exécution actuel |
Pour utiliser cet exemple
À l’aide de Visual Studio, ouvrez le fichier solution PurchaseProcess.sln.
Pour exécuter le projet Web Client, ouvrez l’Explorateur de solutions et cliquez avec le bouton droit sur le projet Web Client. Sélectionnez Définir comme projet de démarrage.
Pour exécuter le projet WinForms Client, ouvrez l’Explorateur de solutions et cliquez avec le bouton droit sur le projet WinForms Client. Sélectionnez Définir comme projet de démarrage.
Pour générer la solution, appuyez sur Ctrl+Maj+B.
Pour exécuter la solution, appuyez sur Ctrl+F5.
Options de Web Client
Créer un appel d’offres : crée un appel d’offres et démarre un workflow de processus d’achat.
Actualiser : actualise la liste des appels d’offres actifs et terminés dans la fenêtre principale.
Afficher : affiche le contenu d’un appel d’offres existant. Les fournisseurs peuvent soumettre leurs propositions (s'ils y sont invités ou si l'appel d'offres n'est pas terminé).
Afficher en tant que : l’utilisateur peut accéder à l’appel d’offres à l’aide de différentes identités en sélectionnant le participant souhaité dans la zone de liste modifiable Afficher en tant que de la grille des appels d’offres actifs.
Options de WinForms Client
Créer un appel d’offres : crée un appel d’offres et démarre un workflow de processus d’achat.
Actualiser : actualise la liste des appels d’offres actifs et terminés dans la fenêtre principale.
Afficher l’appel d’offres : affiche le contenu d’un appel d’offres existant. Les fournisseurs peuvent soumettre leurs propositions (s'ils y sont invités ou si l'appel d'offres n'est pas terminé).
Se connecter en tant que : l’utilisateur peut accéder à l’appel d’offres à l’aide de différentes identités en sélectionnant le participant souhaité dans la zone de liste modifiableAfficher en tant que de la grille des appels d’offres actifs.