Aracılığıyla paylaş


Kurumsal 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 Parallel, ParallelForEach<T> ve ForEach<T> ile özel bir etkinliği birleştirir.

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österir

  • Özel etkinlikler.

  • Etkinliklerin bileşimi.

  • Yer imleri.

  • Devamlılık.

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

  • Izleme.

  • İzleme.

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

İş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ığı ve açıklamasını yazar.

    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 çekirdek mantığı, her satıcıdan gelen teklifleri bekleyen (yer işareti oluşturan özel bir etkinlik kullanarak) bir ParallelForEach<T> etkinlik ve satıcı teklifini bir RFP olarak kaydeden bir InvokeMethod etkinliğini 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 If etkinlikleri kullanarakAssign) 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 İstemci uygulamaları tarafından satın alma işlemi iş akışının örneklerini oluşturmak ve kullanmak için kullanılan sürecin (WF programı olarak) ve sunucunun (PurchaseProcessHost) tanımı.
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ışı sunucusu için arabirim.
PurchaseProcessHost.cs İş akışının yürütülmesi için bir sunucunun uygulanması. Ana bilgisayar, iş akışı yürütme süresinin ayrıntılarını soyutlar ve iş akışı örneklerini yüklemek, çalıştırmak ve onlarla 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).

Activity'den türetilen etkinlikler, mevcut özel etkinlikleri ve .NET Framework 4.6.1 etkinlik kitaplığındaki etkinlikleri bir araya getirerek oluşturma işlevine sahiptir. Bu etkinlikleri derlemek, özel işlevsellik oluşturmanın en temel yoludur.
WaitForVendorProposal.cs Bu özel etkinlik, NativeActivity'den türetilir ve teklif sunma sürecinde satıcı tarafından daha sonra devam ettirilmesi gereken isimlendirilmiş bir yer işareti oluşturur.

NativeActivity öğesinden türetilen etkinlikler, CodeActivity öğesinden türetilenler gibi, Execute işlevini geçersiz kılarak zorunlu işlevsellik oluşturur, ancak ActivityContext yöntemine aktarılan Execute aracılığıyla iş akışı çalışma zamanının tüm işlevlerine de erişebilir. Bu bağlam, alt etkinlikleri zamanlama ve iptal etme, kalıcılık dışı 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 Bir TrackingParticipant, tüm izleme olaylarını alır ve bunları bir metin dosyasına kaydeder.

İ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
Satıcı Teklif İsteği'nde teklif gönderen satıcı.
Teklif Talebi Teklif isteği (RFP), satıcıların belirli bir emtia veya hizmetle ilgili teklif gönderme davetidir.
Satıcı Teklifi 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 sunulması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 Resmi bir Teklif Talebi dokümanında 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.
TeklifleriGöster 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.
ÖneriGönder Somut teklif isteğinde bir satıcıdan teklif alın. Bu pencere yalnızca satıcılar tarafından kullanılır.
Rfp Görüntüle 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 (GetTempPath kullanılarak) 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].izleme 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'ni 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'ni 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).

  • Olarak Görüntüle: Kullanıcı, etkin RFP'ler kılavuzundaki Olarak görüntüle açılır 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)

  • Farklı Kimliklerle Bağlan: Kullanıcı, etkin RFP'ler kılavuzundaki Olarak Görüntüle kutusundan istenen katılımcıyı seçerek RFP'ye farklı kimliklerle erişebilir.