Bagikan melalui


Proses Pembelian Perusahaan

Sampel PurchaseProcess menunjukkan cara membuat proses pembelian berbasis Request for Proposals (RFP) yang sangat dasar dengan pemilihan proposal terbaik otomatis. Langkah ini menggabungkan Parallel, ParallelForEach<T>, dan ForEach<T> aktivitas kustom untuk membuat alur kerja yang mewakili proses.

Sampel ini berisi aplikasi klien ASP.NET yang memungkinkan berinteraksi dengan proses sebagai peserta yang berbeda (sebagai pemohon asli atau vendor tertentu).

Menunjukkan

  • Aktivitas kustom.

  • Komposisi kegiatan.

  • Bookmark.

  • Persistensi.

  • Persistensi terskema.

  • Penelusuran.

  • Pelacakan.

  • Hosting WF di klien yang berbeda (aplikasi web ASP.NET dan aplikasi WinForms).

Deskripsi Proses

Sampel ini menunjukkan implementasi program Windows Workflow Foundation (WF) untuk mengumpulkan proposal dari vendor untuk perusahaan generik.

  1. Seorang karyawan Perusahaan X membuat Permintaan Proposal (Request for Proposal/RFP).

    1. Karyawan mengisi judul dan deskripsi RFP.

    2. Karyawan memilih vendor yang ingin mereka undang untuk mengirimkan proposal.

  2. Karyawan mengajukan proposal.

    1. Instans alur kerja dibuat.

    2. Alur kerja sedang menunggu semua vendor mengirimkan proposal mereka.

  3. Setelah semua proposal diterima, alur kerja melakukan iterasi melalui semua proposal yang diterima dan memilih yang terbaik.

    1. Setiap vendor memiliki reputasi (sampel ini menyimpan daftar reputasi di VendorRepository.cs).

    2. Nilai total proposal ditentukan oleh (Nilai yang diisi oleh vendor) * (Reputasi yang direkam vendor) / 100.

  4. Pemohon asli dapat melihat semua proposal yang dikirimkan. Proposal terbaik disajikan di bagian khusus dalam laporan.

Definisi Proses

Logika inti sampel menggunakan aktivitas ParallelForEach<T> yang menunggu penawaran dari setiap vendor (menggunakan aktivitas kustom yang membuat marka buku), dan mendaftarkan proposal vendor sebagai RFP (menggunakan aktivitas InvokeMethod).

Sampel kemudian melakukan iterasi melalui semua proposal yang diterima yang disimpan dalam RfpRepository, menghitung nilai yang disesuaikan (menggunakan aktivitas Assign dan System.Activities.Expressions), dan jika nilai yang disesuaikan lebih baik daripada penawaran terbaik sebelumnya, tetapkan nilai baru sebagai penawaran terbaik (menggunakan aktivitas If dan Assign).

Proyek dalam Sampel ini

Sampel ini berisi proyek berikut.

Project Deskripsi
Biasa Objek entitas yang digunakan dalam proses (Permintaan Proposal, Vendor, dan Proposal Vendor).
WfDefinition Definisi proses (sebagai program WF) dan host (PurchaseProcessHost) yang digunakan oleh aplikasi klien untuk membuat dan menggunakan instans alur kerja proses pembelian.
WebClient Aplikasi klien ASP.NET yang memungkinkan pengguna untuk membuat dan berpartisipasi dalam instans proses pembelian. Langkah ini menggunakan host yang dibuat khusus untuk berinteraksi dengan mesin alur kerja.
WinFormsClient Aplikasi klien Formulir Windows yang memungkinkan pengguna untuk membuat dan berpartisipasi dalam instans proses pembelian. Langkah ini menggunakan host yang dibuat khusus untuk berinteraksi dengan mesin alur kerja.

WfDefinition

Tabel berikut berisi deskripsi file terpenting dalam proyek WfDefinition.

File Deskripsi
IPurchaseProcessHost.cs Antarmuka untuk host alur kerja.
PurchaseProcessHost.cs Implementasi host untuk alur kerja. Host mengabstraksi detail runtime alur kerja dan digunakan di semua aplikasi klien untuk memuat, menjalankan, dan berinteraksi dengan instans alur kerja PurchaseProcess.
PurchaseProcessWorkflow.cs Aktivitas yang berisi definisi alur kerja Proses Pembelian (berasal dari Activity).

Aktivitas yang berasal dari fungsionalitas pembuatan Activity dengan merakit aktivitas kustom dan aktivitas yang ada dari pustaka aktivitas .NET Framework 4.6.1. Merakit aktivitas ini adalah cara paling dasar untuk membuat fungsionalitas kustom.
WaitForVendorProposal.cs Aktivitas kustom ini berasal dari NativeActivity dan membuat bookmark bernama yang harus dilanjutkan nanti oleh vendor saat mengirimkan proposal.

Aktivitas yang berasal dari NativeActivity, seperti yang berasal dari CodeActivity, membuat fungsionalitas imperatif dengan menimpa Execute, tetapi juga memiliki akses ke semua fungsionalitas runtime bahasa umum alur kerja melalui ActivityContext yang diteruskan ke metode Execute. Konteks ini memiliki dukungan untuk menjadwalkan dan membatalkan aktivitas anak, menyiapkan zona tanpa persisten (blok eksekusi di mana runtime tidak mempertahankan data alur kerja, seperti dalam transaksi atomik), dan objek Bookmark (handle untuk melanjutkan alur kerja yang dijeda).
TrackingParticipant.cs TrackingParticipant yang menerima semua peristiwa pelacakan dan menyimpannya ke file teks.

Peserta pelacakan ditambahkan ke instans alur kerja sebagai Ekstensi.
XmlWorkflowInstanceStore.cs InstanceStore kustom yang menyimpan aplikasi alur kerja ke file XML.
XmlPersistenceParticipant.cs PersistenceParticipant kustom yang menyimpan instans permintaan untuk proposal ke file XML.
AsyncResult.cs / CompletedAsyncResult.cs Kelas pembantu untuk menerapkan pola asinkron dalam komponen persistensi.

Biasa

Tabel berikut berisi deskripsi file terpenting dalam proyek WfDefinition.

Kelas Deskripsi
Vendor Vendor yang mengirimkan proposal dalam Permintaan Proposal.
RequestForProposal Permintaan proposal (RFP) adalah undangan bagi vendor untuk mengirimkan proposal pada komoditas atau layanan tertentu.
VendorProposal Proposal yang diajukan oleh vendor ke RFP konkret.
VendorRepository Repositori Vendor. Implementasi ini berisi kumpulan instans Vendor dan metode dalam memori untuk mengekspos instans tersebut.
RfpRepository Repositori Permintaan Proposal. Implementasi ini berisi menggunakan Linq ke XML untuk mengkueri file XML Permintaan Proposal yang dihasilkan oleh persistensi skema.
IOHelper Kelas ini menangani semua masalah terkait I/O (folder, jalur, dan sebagainya.)

Klien Web

Tabel berikut berisi deskripsi halaman Web terpenting dalam proyek Klien Web.

File Deskripsi
CreateRfp.aspx Membuat dan mengirimkan Permintaan Proposal baru.
Default.aspx Menampilkan semua Permintaan Proposal yang aktif dan selesai.
GetVendorProposal.aspx Mendapatkan proposal dari vendor dalam Permintaan Proposal konkret. Halaman ini hanya digunakan oleh vendor.
ShowRfp.aspx Memperlihatkan semua informasi tentang Permintaan Proposal (proposal yang diterima, tanggal, nilai, dan informasi lainnya). Halaman ini hanya digunakan oleh pembuat Permintaan Proposal.

Klien WinForms

Tabel berikut berisi deskripsi formulir terpenting dalam proyek Win Forms.

Formulir Deskripsi
NewRfp Membuat dan mengirimkan Permintaan Proposal baru.
ShowProposals Menampilkan semua Permintaan Proposal yang aktif dan selesai. Catatan: Anda mungkin perlu mengeklik tombol Refresh di UI untuk melihat perubahan di layar tersebut setelah Anda membuat atau mengubah Permintaan Proposal.
SubmitProposal Mendapatkan proposal dari vendor dalam Permintaan Proposal konkret. Jendela ini hanya digunakan oleh vendor.
ViewRfp Memperlihatkan semua informasi tentang Permintaan Proposal (proposal yang diterima, tanggal, nilai, dan informasi lainnya). Halaman ini hanya digunakan oleh pembuat Permintaan Proposal.

File Persistensi

Tabel berikut menunjukkan file yang dihasilkan oleh penyedia persistensi (XmlPersistenceProvider) yang terletak di jalur folder sementara sistem saat ini (menggunakan GetTempPath). File pelacakan dibuat di jalur eksekusi saat ini.

Nama File Deskripsi Jalur
rfps.xml File XML dengan semua Permintaan Proposal yang aktif dan selesai. GetTempPath
[instanceid] File ini berisi semua informasi tentang instans alur kerja.

File ini dihasilkan oleh implementasi persistensi skema (PersistenceParticipant di XmlPersistenceProvider).
GetTempPath
[instanceId].tracking File teks dengan semua peristiwa yang terjadi dalam instans konkret.

File ini dihasilkan oleh TrackingParticipant.
GetTempPath
PurchaseProcess.Tracing.TraceLog.txt File pelacakan yang dihasilkan oleh alur kerja berdasarkan parameter konfigurasi dalam file App.config atau Web.config. Jalur eksekusi saat ini

Untuk menggunakan sampel ini

  1. Dengan menggunakan Visual Studio, buka file solusi PurchaseProcess.sln.

  2. Untuk menjalankan proyek Klien Web, buka Penjelajah Solusi dan klik kanan proyek Klien Web. Pilih Tetapkan sebagai Proyek Startup.

  3. Untuk menjalankan proyek Klien WinForms, buka Penjelajah Solusi dan klik kanan proyek Klien WinForms. Pilih Tetapkan sebagai Proyek Startup.

  4. Untuk membangun solusi, tekan CTRL+SHIFT+B.

  5. Untuk menjalankan solusi, tekan CTRL+F5.

Opsi Klien Web

  • Membuat RFP baru: Membuat Permintaan Proposal (RFP) baru dan memulai alur kerja Proses Pembelian.

  • Refresh: Merefresh daftar RFP Aktif dan Selesai di jendela utama.

  • Tampilan: Menampilkan konten RFP yang ada. Vendor dapat mengirimkan proposal mereka (jika diundang atau RFP belum selesai).

  • Lihat Sebagai: Pengguna dapat mengakses RFP menggunakan identitas yang berbeda dengan memilih peserta yang diinginkan dalam kotak kombo Tampilkan sebagai di kisi RFP aktif.

Opsi Klien WinForms

  • Membuat RFP: Membuat Permintaan Proposal (RFP) baru dan memulai alur kerja Proses Pembelian.

  • Refresh: Merefresh daftar RFP Aktif dan Selesai di jendela utama.

  • Tampilan: Menampilkan konten RFP yang ada. Vendor dapat mengirimkan proposal mereka (jika diundang atau RFP belum selesai)

  • Hubungkan Sebagai: Pengguna dapat mengakses RFP menggunakan identitas yang berbeda dengan memilih peserta yang diinginkan dalam kotak kombo Tampilkan sebagai di kisi RFP aktif.