Uitbreidbaarheid opslaan
SqlWorkflowInstanceStore stelt gebruikers in staat om aangepaste, toepassingsspecifieke eigenschappen te promoten die kunnen worden gebruikt om query's uit te voeren voor exemplaren in de persistentiedatabase. Het bevorderen van een eigenschap zorgt ervoor dat de waarde beschikbaar is in een speciale weergave in de database. Deze gepromoveerde eigenschappen (eigenschappen die kunnen worden gebruikt in gebruikersquery's) kunnen eenvoudige typen zijn, zoals Int64, Guid, Tekenreeks en Datum/tijd of van een geserialiseerd binair type (byte[]).
De SqlWorkflowInstanceStore klasse heeft de Promote methode die u kunt gebruiken om een eigenschap te promoveren als een eigenschap die kan worden gebruikt in query's. Het volgende voorbeeld is een end-to-end voorbeeld van uitbreidbaarheid van winkels.
In dit voorbeeldscenario heeft een DP-toepassing (Document Processing) werkstromen die gebruikmaken van aangepaste activiteiten voor documentverwerking. Deze werkstromen hebben een set statusvariabelen die zichtbaar moeten worden gemaakt voor de eindgebruiker. Om dit te bereiken, biedt de DP-toepassing een exemplaarextensie van het type PersistenceParticipant, die wordt gebruikt door activiteiten om de statusvariabelen op te geven.
class DocumentStatusExtension : PersistenceParticipant { public string DocumentId; public string ApprovalStatus; public string UserName; public DateTime LastUpdateTime; }
De nieuwe extensie wordt vervolgens toegevoegd aan de host.
static Activity workflow = CreateWorkflow(); WorkflowApplication application = new WorkflowApplication(workflow); DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension (); application.Extensions.Add(documentStatusExtension);
Zie het voorbeeld Van persistentiedeelnemers voor meer informatie over het toevoegen van een aangepaste persistentiedeelnemer.
De aangepaste activiteiten in de DP-toepassing vullen verschillende statusvelden in de methode Execute .
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(); // ... }
Wanneer een werkstroomexemplaren een persistentiepunt bereikt, worden deze eigenschappen door de methode CollectValues van de persistentiedeelnemer DocumentStatusExtension opgeslagen in het verzamelen van persistentiegegevens.
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; } // ... }
Notitie
Al deze eigenschappen worden doorgegeven aan SqlWorkflowInstanceStore door het persistentieframework via de verzameling SaveWorkflowCommand.InstanceData .
De DP-toepassing initialiseert het SQL Workflow Instance Store en roept de methode Niveau verhogen aan om deze gegevens te promoveren.
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);
Op basis van deze promotiegegevens plaatst SqlWorkflowInstanceStore de gegevenseigenschappen in de kolommen van de weergave InstancePromotedProperties .
Als u een subset van de gegevens uit de promotietabel wilt opvragen, voegt de DP-toepassing een aangepaste weergave toe boven op de promotieweergave.
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
[System.Activities.DurableInstancing.InstancePromotedProperties] weergave
Kolomnaam | Kolomsoort | Beschrijving |
---|---|---|
InstanceId | GUID | Het werkstroomexemplaren waartoe deze promotie behoort. |
PromotionName | nvarchar(400) | De naam van de promotie zelf. |
Waarde1, Waarde2, Waarde3,..,Waarde32 | sql_variant | De waarde van de gepromoveerde eigenschap zelf. De meeste primitieve SQL-gegevenstypen, behalve binaire blobs en tekenreeksen van meer dan 8000 bytes, kunnen in sql_variant passen. |
Waarde33, Waarde34, Waarde35, ..., Waarde64 | varbinary(max) | De waarde van gepromoveerde eigenschappen die expliciet worden gedeclareerd als varbinary(max). |