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.
Seorang karyawan Perusahaan X membuat Permintaan Proposal (Request for Proposal/RFP).
Karyawan mengisi judul dan deskripsi RFP.
Karyawan memilih vendor yang ingin mereka undang untuk mengirimkan proposal.
Karyawan mengajukan proposal.
Instans alur kerja dibuat.
Alur kerja sedang menunggu semua vendor mengirimkan proposal mereka.
Setelah semua proposal diterima, alur kerja melakukan iterasi melalui semua proposal yang diterima dan memilih yang terbaik.
Setiap vendor memiliki reputasi (sampel ini menyimpan daftar reputasi di VendorRepository.cs).
Nilai total proposal ditentukan oleh (Nilai yang diisi oleh vendor) * (Reputasi yang direkam vendor) / 100.
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
Dengan menggunakan Visual Studio, buka file solusi PurchaseProcess.sln.
Untuk menjalankan proyek Klien Web, buka Penjelajah Solusi dan klik kanan proyek Klien Web. Pilih Tetapkan sebagai Proyek Startup.
Untuk menjalankan proyek Klien WinForms, buka Penjelajah Solusi dan klik kanan proyek Klien WinForms. Pilih Tetapkan sebagai Proyek Startup.
Untuk membangun solusi, tekan CTRL+SHIFT+B.
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk