Dela via


Utökningsbarhet för store

SqlWorkflowInstanceStore tillåter användare att höja upp anpassade, programspecifika egenskaper som kan användas för att fråga efter instanser i beständighetsdatabasen. Att främja en egenskap gör att värdet blir tillgängligt i en särskild vy i databasen. Dessa framhävda egenskaper (egenskaper som kan användas i användarfrågor) kan vara av enkla typer som Int64, Guid, String och DateTime eller av en serialiserad binär typ (byte[]).

Klassen SqlWorkflowInstanceStore har den Promote metod som du kan använda för att höja upp en egenskap som en egenskap som kan användas i frågor. Följande exempel är ett exempel på utökningsbarhet från slutpunkt till slutpunkt.

  1. I det här exempelscenariot har ett program för dokumentbearbetning (DP) arbetsflöden, som var och en använder anpassade aktiviteter för dokumentbearbetning. Dessa arbetsflöden har en uppsättning tillståndsvariabler som måste göras synliga för slutanvändaren. För att uppnå detta tillhandahåller DP-programmet ett instanstillägg av typen PersistenceParticipant, som används av aktiviteter för att ange tillståndsvariablerna.

    class DocumentStatusExtension : PersistenceParticipant
    {
        public string DocumentId;
        public string ApprovalStatus;
        public string UserName;
        public DateTime LastUpdateTime;
    }
    
  2. Det nya tillägget läggs sedan till i värden.

    static Activity workflow = CreateWorkflow();
    WorkflowApplication application = new WorkflowApplication(workflow);
    DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension ();
    application.Extensions.Add(documentStatusExtension);
    

    Mer information om hur du lägger till en anpassad beständighetsdeltagare finns i exemplet Beständighetsdeltagare .

  3. De anpassade aktiviteterna i DP-programmet fyller i olika statusfält i metoden Kör .

    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();
        // ...
    }
    
  4. När en arbetsflödesinstans når en beständighetspunkt sparar metoden CollectValues för deltagaren DocumentStatusExtension persistence dessa egenskaper i insamlingen av beständighetsdata.

    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;
        }
        // ...
    }
    

    Kommentar

    Alla dessa egenskaper skickas till SqlWorkflowInstanceStore av persistence-ramverket via samlingen SaveWorkflowCommand.InstanceData .

  5. DP-programmet initierar SQL Workflow Instance Store och anropar metoden Höj upp för att höja upp dessa data.

    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);
    

    Baserat på den här kampanjinformationen placerar SqlWorkflowInstanceStore dataegenskaperna i kolumnerna i vyn InstancePromotedProperties .

  6. Om du vill köra frågor mot en delmängd av data från upphöjningstabellen lägger DP-programmet till en anpassad vy ovanpå upphöjningsvyn.

    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] vy

Kolumnnamn Kolumntyp beskrivning
InstanceId GUID Arbetsflödesinstansen som den här kampanjen tillhör.
PromotionName nvarchar(400) Namnet på själva kampanjen.
Value1, Value2, Value3,..,Value32 Sql_variant Värdet för själva den upphöjda egenskapen. De flesta primitiva SQL-datatyper förutom binära blobbar och strängar över 8 000 byte får plats i sql_variant.
Value33, Value34, Value35, ..., Value64 varbinary(max) Värdet för framhävda egenskaper som uttryckligen deklareras som varbinary(max).