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.
SqlWorkflowInstanceStore memungkinkan pengguna untuk mempromosikan properti khusus aplikasi kustom yang dapat digunakan untuk mengkueri instans dalam database persistensi. Tindakan mempromosikan properti menyebabkan nilai tersedia dalam tampilan khusus dalam database. Properti yang dipromosikan ini (properti yang dapat digunakan dalam kueri pengguna) dapat berupa jenis sederhana, seperti Int64, , GuidString, dan DateTime, atau dari jenis biner berseri (byte[]).
Kelas SqlWorkflowInstanceStore ini memiliki Promote metode yang dapat Anda gunakan untuk mempromosikan properti sebagai properti yang dapat digunakan dalam kueri. Contoh berikut adalah contoh lengkap ekstensibilitas penyimpanan.
Dalam skenario contoh ini, aplikasi pemrosesan dokumen (DP) memiliki alur kerja, yang masing-masing menggunakan aktivitas kustom untuk pemrosesan dokumen. Alur kerja ini memiliki sekumpulan variabel status yang perlu dibuat terlihat oleh pengguna akhir. Untuk mencapai hal ini, aplikasi DP menyediakan ekstensi instans jenis PersistenceParticipant, yang digunakan oleh aktivitas untuk menyediakan variabel status.
class DocumentStatusExtension : PersistenceParticipant { public string DocumentId; public string ApprovalStatus; public string UserName; public DateTime LastUpdateTime; }Ekstensi baru kemudian ditambahkan ke host.
static Activity workflow = CreateWorkflow(); WorkflowApplication application = new WorkflowApplication(workflow); DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension (); application.Extensions.Add(documentStatusExtension);Untuk detail selengkapnya tentang menambahkan peserta persistensi kustom, lihat sampel Peserta Persistensi .
Aktivitas kustom dalam aplikasi DP mengisi berbagai bidang status dalam metode Jalankan .
public override void Execute(CodeActivityContext context) { // ... context.GetExtension<DocumentStatusExtension>().DocumentId = Guid.NewGuid(); context.GetExtension<DocumentStatusExtension>().UserName = "John Smith"; context.GetExtension<DocumentStatusExtension>().ApprovalStatus = "Approved"; context.GetExtension<DocumentStatusExtension>().LastUpdateTime = DateTime.Now(); // ... }Ketika instans alur kerja mencapai titik persistensi, metode CollectValues dari peserta persistensi DocumentStatusExtension menyimpan properti ini ke dalam pengumpulan data persistensi.
class DocumentStatusExtension : PersistenceParticipant { const XNamespace xNS = XNamespace.Get("http://contoso.com/DocumentStatus"); protected override void CollectValues(out IDictionary<XName, object> readWriteValues, out IDictionary<XName, object> writeOnlyValues) { readWriteValues = new Dictionary<XName, object>(); readWriteValues.Add(xNS.GetName("UserName"), this.UserName); readWriteValues.Add(xNS.GetName("ApprovalStatus"), this.ApprovalStatus); readWriteValues.Add(xNS.GetName("DocumentId"), this.DocumentId); readWriteValues.Add(xNS.GetName("LastModifiedTime"), this.LastUpdateTime); writeOnlyValues = null; } // ... }Nota
Semua properti ini diteruskan ke SqlWorkflowInstanceStore oleh kerangka kerja persistensi melalui koleksi SaveWorkflowCommand.InstanceData .
Aplikasi DP menginisialisasi SQL Workflow Instance Store dan memanggil metode Promote untuk mempromosikan data ini.
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(connectionString); List<XName> variantProperties = new List<XName>() { xNS.GetName("UserName"), xNS.GetName("ApprovalStatus"), xNS.GetName("DocumentId"), xNS.GetName("LastModifiedTime") }; store.Promote("DocumentStatus", variantProperties, null);Berdasarkan informasi promosi ini, SqlWorkflowInstanceStore menempatkan properti data di kolom tampilan InstancePromotedProperties .
Untuk mengkueri subset data dari tabel promosi, aplikasi DP menambahkan tampilan yang dikustomisasi di atas tampilan promosi.
create view [dbo].[DocumentStatus] with schemabinding as select P.[InstanceId] as [InstanceId], P.Value1 as [UserName], P.Value2 as [ApprovalStatus], P.Value3 as [DocumentId], P.Value4 as [LastUpdatedTime] from [System.Activities.DurableInstancing].[InstancePromotedProperties] as P where P.PromotionName = N'DocumentStatus' go
Tampilan [System.Activities.DurableInstancing.InstancePromotedProperties]
| Nama Kolom | Tipe Kolom | Deskripsi |
|---|---|---|
| Id Instansi | GUID | Instans alur kerja tempat promosi ini berada. |
| NamaPromosi | nvarchar(400) | Nama promosi itu sendiri. |
| Value1, Value2, Value3,..,Value32 | sql_variant | Nilai properti yang dipromosikan itu sendiri. Sebagian besar jenis data primitif SQL kecuali blob dan string biner dengan panjang lebih dari 8000 byte dapat pas dalam sql_variant. |
| Value33, Value34, Value35, ..., Value64 | varbinary(max) | Nilai properti yang dipromosikan yang secara eksplisit dinyatakan sebagai varbinary(maks). |