Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel PurchaseProcess menunjukkan cara membuat proses pembelian berbasis Request for Proposals (RFP) yang sangat mendasar dengan pemilihan proposal terbaik otomatis. 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 khusus.
Komposisi kegiatan.
Penanda Buku.
Ketekunan.
Ketekunan yang diskemakan
Menelusuri.
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.
Karyawan Perusahaan X membuat Permintaan Proposal (RFP).
Karyawan mengetik judul dan deskripsi RFP.
Karyawan memilih vendor yang ingin mereka undang untuk mengirimkan proposal.
Karyawan mengajukan proposal.
Sebuah instance alur kerja dibuat.
Alur kerja sedang menunggu semua vendor mengirimkan proposal mereka.
Setelah semua proposal diterima, alur kerja berulang melalui semua proposal yang diterima dan memilih yang terbaik.
Setiap vendor memiliki reputasi (sampel ini menyimpan daftar reputasi dalam VendorRepository.cs).
Nilai total proposal ditentukan oleh (Nilai yang di ketik oleh vendor) * (Reputasi yang dicatat vendor) / 100.
Pemohon asli dapat melihat semua proposal yang dikirimkan. Proposal terbaik disajikan di bagian khusus dalam laporan.
Definisi Proses
Logika inti dari sampel ini menggunakan aktivitas ParallelForEach<T> yang menunggu penawaran dari setiap vendor (menggunakan aktivitas khusus yang membuat penanda), dan mendaftarkan proposal vendor sebagai RFP (menggunakan aktivitas InvokeMethod).
Sampel kemudian melakukan iterasi melalui semua proposal yang diterima dan disimpan dalam RfpRepository, menghitung nilai yang disesuaikan (dengan menggunakan aktivitas Assign dan System.Activities.Expressions), dan jika nilai yang disesuaikan lebih baik daripada penawaran terbaik sebelumnya, menetapkan nilai baru tersebut sebagai penawaran terbaik (dengan menggunakan aktivitas If dan Assign).
Proyek dalam Sampel ini
Sampel ini berisi proyek berikut.
| Proyek | 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. Ini menggunakan host yang dibuat khusus untuk berinteraksi dengan mesin alur kerja. |
| WinFormsClient | Aplikasi klien Windows Forms yang memungkinkan pengguna untuk membuat dan berpartisipasi dalam instans proses pembelian. Ini menggunakan host yang dibuat khusus untuk berinteraksi dengan mesin alur kerja. |
WfDefinition
Tabel berikut berisi deskripsi file terpenting dalam proyek WfDefinition.
| Arsip | Deskripsi |
|---|---|
| IPurchaseProcessHost.cs | Antarmuka untuk host alur kerja. |
| PurchaseProcessHost.cs | Implementasi host untuk alur kerja. Tuan rumah mengabstraksikan detail waktu proses alur kerja dan digunakan di semua aplikasi klien untuk memuat, menjalankan, dan berinteraksi dengan instance alur kerja PurchaseProcess. |
| PurchaseProcessWorkflow.cs | Aktivitas yang berisi definisi alur kerja Proses Pembelian (berasal dari Activity). Aktivitas yang berasal dari Activity menyusun fungsionalitas dengan menggabungkan aktivitas kustom yang sudah ada dan aktivitas 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 mengesampingkan Execute, tetapi juga memiliki akses ke semua fungsionalitas runtime alur kerja melalui ActivityContext yang diteruskan ke Execute metode . Konteks ini memiliki dukungan untuk menjadwalkan dan membatalkan aktivitas anak, menyiapkan zona non-persisten (blok eksekusi di mana runtime tidak menyimpan data alur kerja, seperti dalam transaksi atomik), dan Bookmark objek (handel untuk mengaktifkan kembali alur kerja yang dijeda). |
| TrackingParticipant.cs |
TrackingParticipant Yang menerima semua peristiwa pelacakan dan menyimpannya ke file teks. Peserta pemantauan ditambahkan ke instance alur kerja sebagai Ekstensi. |
| XmlWorkflowInstanceStore.cs | Kustom InstanceStore yang menyimpan aplikasi alur kerja ke file XML. |
| XmlPersistenceParticipant.cs | Kustom PersistenceParticipant yang menyimpan sebuah instance permintaan proposal ke dalam file XML. |
| AsyncResult.cs / CompletedAsyncResult.cs | Kelas pembantu untuk menerapkan pola asinkron dalam komponen persistensi. |
Biasa
Tabel berikut berisi deskripsi kelas terpenting dalam proyek Umum.
| Kelas | Deskripsi |
|---|---|
| Penyedia | Vendor yang mengirimkan proposal dalam Pengajuan Permintaan Proposal. |
| RequestForProposal | Permintaan proposal (RFP) adalah undangan bagi vendor untuk mengirimkan proposal pada komoditas atau layanan tertentu. |
| VendorProposal | Proposal yang diajukan oleh vendor untuk RFP tertentu. |
| VendorRepository | Kumpulan Para Vendor. Implementasi ini berisi koleksi instans Vendor yang disimpan dalam memori dan metode untuk mengekspos instans tersebut. |
| RfpRepository | Repositori Permintaan untuk Proposal. Implementasi ini menggunakan Linq ke XML untuk mengakses file XML Permintaan Proposal yang dihasilkan oleh persistensi yang sudah terstruktur. |
| 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.
| Arsip | Deskripsi |
|---|---|
| CreateRfp.aspx | Membuat dan mengirimkan Permintaan Proposal baru. |
| Default.aspx | Menampilkan semua Permintaan proposal yang aktif dan selesai. |
| GetVendorProposal.aspx | Menerima proposal dari vendor dalam Permintaan Proposal yang konkret. Halaman ini hanya digunakan oleh vendor. |
| ShowRfp.aspx | Tampilkan 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. |
| TampilkanProposal | Tampilkan semua Permintaan proposal yang aktif dan selesai. Nota: Anda mungkin perlu mengklik tombol Refresh di UI untuk melihat perubahan di layar tersebut setelah Anda membuat atau mengubah Permintaan Proposal. |
| KirimProposal | Dapatkan proposal dari vendor dalam Permintaan untuk Proposal yang terstruktur. Jendela ini hanya digunakan oleh vendor. |
| LihatRfp | Tampilkan semua informasi tentang Permintaan Proposal (proposal yang diterima, tanggal, nilai, dan informasi lainnya). Jendela ini hanya digunakan oleh pembuat Permintaan Proposal. |
File Persistensi
Tabel berikut menunjukkan file yang dihasilkan oleh penyedia persistensi (XmlPersistenceProvider) 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].pelacakan | 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
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: Menyegarkan daftar RFP Aktif dan Selesai di jendela utama.
Tampilan: Menampilkan konten RFP yang sudah 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 Lihat sebagai kombo di grid RFP aktif.
Opsi Klien WinForms
Buat RFP: Membuat Permintaan Proposal (RFP) baru dan memulai alur kerja Proses Pembelian.
Refresh: Menyegarkan daftar RFP Aktif dan Selesai di jendela utama.
Lihat RFP: 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 grid RFP yang aktif.