Proces zakupów firmowych

W przykładzie PurchaseProcess pokazano, jak utworzyć bardzo podstawowy proces zakupu oparty na żądaniach (RFP) z automatycznym wyborem najlepszych propozycji. ParallelŁączy działanie , ParallelForEach<T>i ForEach<T> niestandardowe, aby utworzyć przepływ pracy reprezentujący proces.

Ten przykład zawiera aplikację klienta ASP.NET, która umożliwia interakcję z procesem jako różni uczestnicy (jako oryginalny obiekt żądający lub określony dostawca).

Demonstracje

  • Działania niestandardowe.

  • Kompozycja działań.

  • Zakładki.

  • Stan trwały.

  • Schematyzowana trwałość.

  • Śledzenia.

  • Śledzenia.

  • Hosting WF na różnych klientach (ASP.NET aplikacje internetowe i aplikacje WinForms).

Opis procesu

W tym przykładzie przedstawiono implementację programu Windows Workflow Foundation (WF) w celu zebrania propozycji od dostawców dla ogólnej firmy.

  1. Pracownik firmy X tworzy wniosek o propozycję (RFP).

    1. Typ pracownika w tytule i opisie RFP.

    2. Pracownik wybiera dostawców, których chcą zaprosić do przesłania propozycji.

  2. Pracownik przesyła propozycję.

    1. Zostanie utworzone wystąpienie przepływu pracy.

    2. Przepływ pracy czeka na przesłanie propozycji przez wszystkich dostawców.

  3. Po otrzymaniu wszystkich propozycji przepływ pracy iteruje przez wszystkie otrzymane propozycje i wybiera najlepsze.

    1. Każdy dostawca ma reputację (ten przykład przechowuje listę reputacji w VendorRepository.cs).

    2. Łączna wartość propozycji jest określana przez (wartość typowana przez dostawcę) * (zarejestrowana reputacja dostawcy) / 100.

  4. Oryginalny wniosek może zobaczyć wszystkie przesłane propozycje. Najlepszą propozycję przedstawiono w specjalnej sekcji w raporcie.

Definicja procesu

Podstawowa logika przykładu używa ParallelForEach<T> działania, które oczekuje na oferty od każdego dostawcy (przy użyciu niestandardowego działania tworzącego zakładkę) i rejestruje propozycję dostawcy jako RFP (przy użyciu InvokeMethod działania).

Następnie próbka iteruje wszystkie otrzymane propozycje przechowywane w RfpRepositoryobiekcie , obliczając skorygowaną Assign wartość (przy użyciu działania i System.Activities.Expressions działań), a jeśli skorygowana wartość jest lepsza niż poprzednia najlepsza oferta, przypisuje nową wartość jako najlepszą ofertę (przy użyciu If i Assign działaniach).

Projekty w tym przykładzie

Ten przykład zawiera następujące projekty.

Projekt opis
Popularny Obiekty jednostki używane w procesie (żądanie propozycji, dostawcy i propozycji dostawcy).
WfDefinition Definicja procesu (jako program WF) i hosta (PurchaseProcessHost) używanego przez aplikacje klienckie do tworzenia i używania wystąpień przepływu pracy procesu zakupu.
Webclient Aplikacja kliencka ASP.NET, która umożliwia użytkownikom tworzenie i uczestnictwo w wystąpieniach procesu zakupu. Używa on niestandardowego hosta do interakcji z aparatem przepływu pracy.
WinFormsClient Aplikacja kliencka Windows Forms, która umożliwia użytkownikom tworzenie i uczestnictwo w wystąpieniach procesu zakupu. Używa on niestandardowego hosta do interakcji z aparatem przepływu pracy.

WfDefinition

Poniższa tabela zawiera opis najważniejszych plików w projekcie WfDefinition.

Plik opis
IPurchaseProcessHost.cs Interfejs hosta przepływu pracy.
PurchaseProcessHost.cs Implementacja hosta dla przepływu pracy. Host wyodrębnia szczegóły środowiska uruchomieniowego przepływu pracy i jest używany we wszystkich aplikacjach klienckich do ładowania, uruchamiania i interakcji z wystąpieniami PurchaseProcess przepływu pracy.
PurchaseProcessWorkflow.cs Działanie, które zawiera definicję przepływu pracy Proces zakupu (pochodzi z Activityelementu ).

Działania pochodzące z Activity funkcji redagowania przez zebranie istniejących działań niestandardowych i działań z biblioteki działań programu .NET Framework 4.6.1. Tworzenie tych działań jest najbardziej podstawowym sposobem tworzenia niestandardowych funkcji.
WaitForVendorProposal.cs To działanie niestandardowe pochodzi z NativeActivity i tworzy nazwaną zakładkę, która musi zostać wznowiona później przez dostawcę podczas przesyłania propozycji.

Działania pochodzące z elementów , takich jak te pochodzące z NativeActivityCodeActivityprogramu , tworzą funkcje imperatywne przez Executezastąpienie elementu , ale także mają dostęp do wszystkich funkcji środowiska uruchomieniowego przepływu pracy za pośrednictwem ActivityContext metody , która zostanie przekazana do Execute metody . Ten kontekst obsługuje planowanie i anulowanie działań podrzędnych, konfigurowanie stref nietrwałych (bloki wykonywania, podczas których środowisko uruchomieniowe nie utrwala danych przepływu pracy, takie jak w ramach transakcji niepodzielnych) i Bookmark obiekty (dojścia do wznowienia wstrzymanych przepływów pracy).
TrackingParticipant.cs Element TrackingParticipant , który odbiera wszystkie zdarzenia śledzenia i zapisuje je w pliku tekstowym.

Śledzenie uczestników jest dodawane do wystąpienia przepływu pracy jako rozszerzenia.
XmlWorkflowInstanceStore.cs Niestandardowy InstanceStore , który zapisuje aplikacje przepływu pracy w plikach XML.
XmlPersistenceParticipant.cs Niestandardowy PersistenceParticipant , który zapisuje wystąpienie żądania propozycji do pliku XML.
AsyncResult.cs/CompletedAsyncResult.cs Klasy pomocnika do implementowania wzorca asynchronicznego w składnikach trwałości.

Popularny

Poniższa tabela zawiera opis najważniejszych klas w projekcie Common.

Klasa opis
Vendor Dostawca, który przesyła propozycje w żądaniu propozycji.
RequestForProposal Wniosek o propozycje (RFP) jest zaproszeniem dostawców do składania propozycji dotyczących konkretnego towaru lub usługi.
VendorProposal Wniosek złożony przez dostawcę do konkretnego RFP.
Repozytorium dostawców Repozytorium dostawców. Ta implementacja zawiera kolekcję w pamięci wystąpień dostawcy i metod do uwidaczniania tych wystąpień.
Repozytorium Rfp Repozytorium żądań dotyczących propozycji. Ta implementacja zawiera metody Linq to XML do wykonywania zapytań względem pliku XML żądania dla propozycji wygenerowanego przez schematyzowaną trwałość.
IOHelper Ta klasa obsługuje wszystkie problemy związane z we/wy (foldery, ścieżki itd.)

Klient sieci Web

Poniższa tabela zawiera opis najważniejszych stron sieci Web w projekcie klienta sieci Web.

Plik opis
CreateRfp.aspx Tworzy i przesyła nowy wniosek o propozycje.
Default.aspx Przedstawia wszystkie aktywne i ukończone żądania dotyczące propozycji.
GetVendorProposal.aspx Pobiera propozycję od dostawcy w konkretnym żądaniu propozycji. Ta strona jest używana tylko przez dostawców.
ShowRfp.aspx Pokaż wszystkie informacje dotyczące żądania propozycji (odebrane propozycje, daty, wartości i inne informacje). Ta strona jest używana tylko przez twórcę żądania propozycji.

Klient WinForms

Poniższa tabela zawiera opis najważniejszych formularzy w projekcie Win Forms.

Formularz opis
NewRfp Tworzy i przesyła nowy wniosek o propozycje.
ShowProposals Pokaż wszystkie aktywne i zakończone żądania dotyczące propozycji. Uwaga: może być konieczne kliknięcie przycisku Odśwież w interfejsie użytkownika, aby zobaczyć zmiany na tym ekranie po utworzeniu lub zmodyfikowaniu żądania propozycji.
SubmitProposal Pobierz propozycję od dostawcy w konkretnym wniosku o propozycje. To okno jest używane tylko przez dostawców.
ViewRfp Pokaż wszystkie informacje dotyczące żądania propozycji (odebrane propozycje, daty, wartości i inne informacje). To okno jest używane tylko przez twórcę żądania propozycji.

Pliki trwałości

W poniższej tabeli przedstawiono pliki wygenerowane przez dostawcę trwałości (XmlPersistenceProvider) znajdują się w ścieżce folderu tymczasowego bieżącego systemu (przy użyciu polecenia GetTempPath). Plik śledzenia jest tworzony w bieżącej ścieżce wykonywania.

Nazwa pliku opis Ścieżka
rfps.xml Plik XML ze wszystkimi aktywnymi i zakończonymi żądaniami propozycji. GetTempPath
[instanceid] Ten plik zawiera wszystkie informacje o wystąpieniu przepływu pracy.

Ten plik jest generowany przez implementację schematu trwałości (PersistenceParticipant w xmlPersistenceProvider).
GetTempPath
[instanceId].tracking Plik tekstowy ze wszystkimi zdarzeniami, które wystąpiły w konkretnym wystąpieniu.

Ten plik jest generowany przez składnik TrackingParticipant.
GetTempPath
PurchaseProcess.Tracing.TraceLog.txt Plik śledzenia wygenerowany przez przepływ pracy na podstawie parametrów konfiguracji w plikach App.config lub Web.config. Bieżąca ścieżka wykonywania

Aby użyć tego przykładu

  1. Za pomocą programu Visual Studio otwórz plik rozwiązania PurchaseProcess.sln.

  2. Aby wykonać projekt klienta sieci Web, otwórz Eksplorator rozwiązań i kliknij prawym przyciskiem myszy projekt klienta internetowego. Wybierz pozycję Ustaw jako projekt startowy.

  3. Aby wykonać projekt Klienta WinForms, otwórz Eksplorator rozwiązań i kliknij prawym przyciskiem myszy projekt Klienta WinForms. Wybierz pozycję Ustaw jako projekt startowy.

  4. Aby skompilować rozwiązanie, naciśnij klawisze CTRL+SHIFT+B.

  5. Aby uruchomić rozwiązanie, naciśnij klawisze CTRL+F5.

Opcje klienta sieci Web

  • Utwórz nowy RFP: tworzy nowe żądanie propozycji (RFP) i uruchamia przepływ pracy procesu zakupu.

  • Odświeżanie: odświeża listę aktywnych i zakończonych rfp w oknie głównym.

  • Widok: pokazuje zawartość istniejącego RFP. Dostawcy mogą przesłać swoje propozycje (jeśli zaproszenie lub RFP nie zostanie zakończone).

  • Wyświetl jako: użytkownik może uzyskać dostęp do protokołu RFP przy użyciu różnych tożsamości, wybierając odpowiedniego uczestnika w polu kombi Wyświetl jako pole kombi w aktywnej siatce RPS.

Opcje klienta WinForms

  • Utwórz RFP: tworzy nowe żądanie propozycji (RFP) i uruchamia przepływ pracy procesu zakupu.

  • Odświeżanie: odświeża listę aktywnych i zakończonych rfp w oknie głównym.

  • Wyświetl RFP: pokazuje zawartość istniejącego RFP. Dostawcy mogą przesłać swoje propozycje (jeśli zaproszenie lub RFP nie zostanie zakończone)

  • Połączenie Jako: użytkownik może uzyskać dostęp do protokołu RFP przy użyciu różnych tożsamości, wybierając odpowiedniego uczestnika w polu kombi Wyświetl jako pole kombi w aktywnej siatce RPP.