Bagikan melalui


Proses Pembelian Perusahaan

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.

  1. Karyawan Perusahaan X membuat Permintaan Proposal (RFP).

    1. Karyawan mengetik judul dan deskripsi RFP.

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

  2. Karyawan mengajukan proposal.

    1. Sebuah instance alur kerja dibuat.

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

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

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

    2. Nilai total proposal ditentukan oleh (Nilai yang di ketik oleh vendor) * (Reputasi yang dicatat vendor) / 100.

  4. 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

  1. 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: 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.