Partager via


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.

  1. Un employé de la Société X crée un appel d'offres.

    1. L'employé tape le titre et la description de l'appel d'offres.

    2. L’employé sélectionne les fournisseurs qu’il souhaite inviter à soumettre des propositions.

  2. L'employé soumet la proposition.

    1. Une instance du workflow est créée.

    2. Le workflow attend que tous les fournisseurs soumettent leurs propositions.

  3. Une fois toutes les propositions reçues, le workflow effectue une itération au sein d'entre elles et sélectionne la meilleure.

    1. Chaque fournisseur a une réputation (cet exemple stocke la liste des réputations dans VendorRepository.cs).

    2. La valeur totale de la proposition est déterminée par (Valeur tapée par le fournisseur) * (Réputation enregistrée du fournisseur) / 100.

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

  1. À l’aide de Visual Studio, ouvrez le fichier solution PurchaseProcess.sln.

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

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

  4. Pour générer la solution, appuyez sur Ctrl+Maj+B.

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