Şirket Satın Alma İşlemi

PurchaseProcess örneği, otomatik en iyi teklif seçimiyle çok temel Teklif İsteği (RFP) tabanlı satın alma işleminin nasıl oluşturulacağını gösterir. süreci temsil eden bir iş akışı oluşturmak için , ParallelForEach<T>ve ForEach<T> özel etkinliğini birleştirirParallel.

Bu örnek, işlemle farklı katılımcılar (özgün istek sahibi veya belirli bir satıcı olarak) olarak etkileşime izin veren bir ASP.NET istemci uygulaması içerir.

Gösteriler

  • Özel etkinlikler.

  • Etkinliklerin bileşimi.

  • Yer im -leri.

  • Kalıcılık.

  • Şemalı kalıcılık.

  • Izleme.

  • Izleme.

  • WF'yi farklı istemcilerde barındırma (Web uygulamaları ve WinForms uygulamaları ASP.NET).

İşlemin Açıklaması

Bu örnek, genel bir şirket için satıcılardan teklif toplamaya yönelik bir Windows Workflow Foundation (WF) programının uygulamasını gösterir.

  1. X Şirketi çalışanı teklif isteği (RFP) oluşturur.

    1. Çalışan, RFP başlığına ve açıklamasına tür ekler.

    2. Çalışan, teklif göndermek için davet etmek istediği satıcıları seçer.

  2. Çalışan teklifi gönderir.

    1. İş akışının bir örneği oluşturulur.

    2. İş akışı tüm satıcıların tekliflerini göndermesini bekliyor.

  3. Tüm teklifler alındıktan sonra iş akışı, alınan tüm teklifleri yineler ve en iyisini seçer.

    1. Her satıcının bir itibarı vardır (bu örnek, saygınlık listesini VendorRepository.cs' de depolar).

    2. Teklifin toplam değeri (Satıcı tarafından yazılan değer) * (Satıcının kayıtlı itibarı) / 100 ile belirlenir.

  4. Özgün istekte bulunan, gönderilen tüm teklifleri görebilir. En iyi teklif, raporun özel bir bölümünde sunulur.

İşlem Tanımı

Örneğin temel mantığı, her satıcıdan ParallelForEach<T> gelen teklifleri (yer işareti oluşturan özel bir etkinlik kullanarak) bekleyen ve satıcı teklifini RFP (etkinlik kullanarak) olarak kaydeden bir InvokeMethod etkinlik kullanır.

Örnek daha sonra içinde RfpRepositorydepolanan tüm alınan teklifleri yineler ve ayarlanmış değeri hesaplar (bir Assign etkinlik ve System.Activities.Expressions etkinlikler kullanarak) ve ayarlanan değer önceki en iyi tekliften daha iyiyse, yeni değeri en iyi teklif (ve Assign etkinlikleri kullanarakIf) olarak atar.

Bu Örnekteki Projeler

Bu örnek aşağıdaki projeleri içerir.

Proje Açıklama
Yaygın İşlem içinde kullanılan varlık nesneleri (Teklif İsteği, Satıcı ve Satıcı Teklifi).
WfDefinition satın alma işlemi iş akışının örneklerini oluşturmak ve kullanmak için istemci uygulamaları tarafından kullanılan işlemin tanımı (WF programı olarak) ve konak (PurchaseProcessHost).
Webclient Kullanıcıların satın alma işleminin örneklerini oluşturmasına ve bu örneklere katılmasına olanak tanıyan bir ASP.NET istemci uygulaması. İş akışı altyapısıyla etkileşime geçmek için özel olarak oluşturulmuş bir konak kullanır.
WinFormsClient Kullanıcıların satın alma işleminin örneklerini oluşturmasına ve bu örneklere katılmasına olanak tanıyan bir Windows Forms istemci uygulaması. İş akışı altyapısıyla etkileşime geçmek için özel olarak oluşturulmuş bir konak kullanır.

WfDefinition

Aşağıdaki tabloda WfDefinition projesindeki en önemli dosyaların açıklaması yer alır.

Dosya Açıklama
IPurchaseProcessHost.cs İş akışının konağı için arabirim.
PurchaseProcessHost.cs İş akışı için bir konağın uygulanması. Konak, iş akışı çalışma zamanının ayrıntılarını soyutlar ve iş akışı örneklerini yüklemek, çalıştırmak ve bunlarla PurchaseProcess etkileşime geçmek için tüm istemci uygulamalarında kullanılır.
PurchaseProcessWorkflow.cs Satın Alma İşlemi iş akışının tanımını içeren bir etkinlik (öğesinden Activitytüretilir).

.NET Framework 4.6.1 etkinlik kitaplığındaki mevcut özel etkinlikleri ve etkinlikleri bir araya getirerek oluşturma işlevinden Activity türetilen etkinlikler. Bu etkinlikleri derlemek, özel işlevsellik oluşturmanın en temel yoludur.
WaitForVendorProposal.cs Bu özel etkinlik, NativeActivity teklifi gönderirken satıcı tarafından daha sonra sürdürülecek adlandırılmış bir yer işaretinden türetilir ve oluşturulur.

öğesinden NativeActivitytüretilen etkinlikler, örneğin öğesinden CodeActivitytüretilenler, geçersiz kılarak Executekesinlik temelli işlevler oluşturur, ancak yöntemine Execute geçirilen aracılığıyla iş akışı çalışma zamanının tüm işlevlerine ActivityContext de erişebilir. Bu bağlam, alt etkinlikleri zamanlamayı ve iptal etme, kalıcı olmayan bölgeleri ayarlama (çalışma zamanının atomik işlemler gibi iş akışının verilerini kalıcı tutmadığı yürütme blokları) ve Bookmark nesneleri (duraklatılmış iş akışlarını devam ettiren tanıtıcılar) için destek içerir.
TrackingParticipant.cs TrackingParticipant Tüm izleme olaylarını alan ve bunları bir metin dosyasına kaydeden bir.

İzleme katılımcıları iş akışı örneğine Uzantılar olarak eklenir.
XmlWorkflowInstanceStore.cs İş akışı uygulamalarını XML dosyalarına kaydeden bir özel InstanceStore öğe.
XmlPersistenceParticipant.cs Teklif isteğinin bir örneğini XML dosyasına kaydeden bir özel PersistenceParticipant öğe.
AsyncResult.cs / CompletedAsyncResult.cs Kalıcılık bileşenlerinde zaman uyumsuz deseni uygulamak için yardımcı sınıflar.

Yaygın

Aşağıdaki tabloda Ortak projedeki en önemli sınıfların açıklaması yer almaktadır.

Sınıf Açıklama
Vendor Teklif İsteği'nde teklif gönderen satıcı.
RequestForProposal Teklif isteği (RFP), satıcıların belirli bir emtia veya hizmetle ilgili teklif gönderme davetidir.
VendorProposal Satıcı tarafından somut bir RFP'ye gönderilen teklif.
VendorRepository Satıcıların deposu. Bu uygulama, Vendor örneklerinin ve bu örneklerin kullanıma alınmasına yönelik yöntemlerin bellek içi bir koleksiyonunu içerir.
RfpRepository Teklif İstekleri deposu. Bu uygulama, şemalı kalıcılık tarafından oluşturulan Teklif İstekleri XML dosyasını sorgulamak için Linq to XML kullanır.
IOHelper Bu sınıf G/Ç ile ilgili tüm sorunları (klasörler, yollar vb.) işler.

Web İstemcisi

Aşağıdaki tablo, Web İstemcisi projesindeki en önemli Web sayfalarının açıklamasını içerir.

Dosya Açıklama
CreateRfp.aspx Yeni bir Teklif İsteği oluşturur ve gönderir.
Default.aspx Tüm etkin ve tamamlanmış Teklif İsteklerini gösterir.
GetVendorProposal.aspx Somut teklif isteğinde satıcıdan bir teklif alır. Bu sayfa yalnızca satıcılar tarafından kullanılır.
ShowRfp.aspx Teklif İsteği hakkındaki tüm bilgileri (alınan teklifler, tarihler, değerler ve diğer bilgiler) gösterin. Bu sayfa yalnızca Teklif İsteği'nin oluşturucusu tarafından kullanılır.

WinForms İstemcisi

Aşağıdaki tabloda Win Forms projesindeki en önemli formların açıklaması yer alır.

Şekil Açıklama
NewRfp Yeni bir Teklif İsteği oluşturur ve gönderir.
ShowProposals Tüm etkin ve tamamlanmış Teklif İsteklerini göster. Not: Teklif İsteği oluşturduktan veya değiştirdikten sonra bu ekranda yapılan değişiklikleri görmek için kullanıcı arabirimindeki Yenile düğmesine tıklamanız gerekebilir.
SubmitProposal Somut teklif isteğinde bir satıcıdan teklif alın. Bu pencere yalnızca satıcılar tarafından kullanılır.
ViewRfp Teklif İsteği hakkındaki tüm bilgileri (alınan teklifler, tarihler, değerler ve diğer bilgiler) gösterin. Bu pencere yalnızca Teklif İsteği'nin oluşturucusu tarafından kullanılır.

Kalıcılık Dosyaları

Aşağıdaki tabloda, kalıcılık sağlayıcısı (XmlPersistenceProvider) tarafından oluşturulan dosyalar geçerli sistemin geçici klasörünün yolunda (kullanılarak GetTempPath) bulunur. İzleme dosyası geçerli yürütme yolunda oluşturulur.

Dosya Adı Açıklama Yol
rfps.xml Tüm etkin ve tamamlanmış Teklif İsteklerinin bulunduğu XML dosyası. GetTempPath
[instanceid] Bu dosya bir iş akışı örneği hakkındaki tüm bilgileri içerir.

Bu dosya şemalı kalıcılık uygulaması (XmlPersistenceProvider'da PersistenceParticipant) tarafından oluşturulur.
GetTempPath
[instanceId].tracking Somut bir örnekte gerçekleşen tüm olayları içeren bir metin dosyası.

Bu dosya TrackingParticipant tarafından oluşturulur.
GetTempPath
PurchaseProcess.Tracing.TraceLog.txt App.config veya Web.config dosyalarındaki yapılandırma parametrelerine göre iş akışı tarafından oluşturulan izleme dosyası. Geçerli yürütme yolu

Bu örneği kullanmak için

  1. Visual Studio'yu kullanarak PurchaseProcess.sln çözüm dosyasını açın.

  2. Web İstemcisi projesini yürütmek için Çözüm Gezgini açın ve Web İstemcisi projesine sağ tıklayın. Başlangıç Projesi Olarak Ayarla'yı seçin.

  3. WinForms İstemcisi projesini yürütmek için Çözüm Gezgini açın ve WinForms İstemcisi projesine sağ tıklayın. Başlangıç Projesi Olarak Ayarla'yı seçin.

  4. Çözümü oluşturmak için CTRL+SHIFT+B tuşlarına basın.

  5. Çözümü çalıştırmak için CTRL+F5 tuşlarına basın.

Web İstemcisi Seçenekleri

  • Yeni bir RFP oluşturma: Yeni bir Teklif İsteği (RFP) oluşturur ve bir Satın Alma İşlemi iş akışı başlatır.

  • Yenile: Ana pencerede Etkin ve Tamamlanmış RFP'lerin listesini yeniler.

  • Görünüm: Mevcut bir RFP'nin içeriğini gösterir. Satıcılar tekliflerini gönderebilir (davet edilirse veya RFP tamamlanmazsa).

  • Farklı Görüntüle: Kullanıcı, etkin RFP'ler kılavuzundaki Birleşik giriş olarak görüntüle kutusunda istenen katılımcıyı seçerek rfp'ye farklı kimlikler kullanarak erişebilir.

WinForms İstemci Seçenekleri

  • RFP Oluşturma: Yeni bir Teklif İsteği (RFP) oluşturur ve bir Satın Alma İşlemi iş akışı başlatır.

  • Yenile: Ana pencerede Etkin ve Tamamlanmış RFP'lerin listesini yeniler.

  • RFP'yi görüntüle: Mevcut bir RFP'nin içeriğini gösterir. Satıcılar tekliflerini gönderebilir (davet edildiyse veya RFP tamamlanmadıysa)

  • Bağlan Farklı: Kullanıcı, etkin RFP'ler kılavuzundaki Birleşik giriş olarak görüntüle kutusunda istenen katılımcıyı seçerek rfp'ye farklı kimlikler kullanarak erişebilir.