Sdílet prostřednictvím


Rozšiřitelnost úložiště

SqlWorkflowInstanceStore umožňuje uživatelům zvýšit úroveň vlastních vlastností specifických pro aplikaci, které lze použít k dotazování na instance v databázi trvalosti. Povýšení vlastnosti způsobí, že hodnota bude k dispozici v rámci zvláštního zobrazení v databázi. Tyto upřednostněné vlastnosti (vlastnosti, které lze použít v uživatelských dotazech), můžou být jednoduché typy, jako jsou Int64, Guid, String a DateTime nebo serializovaný binární typ (bajt[]).

Třída SqlWorkflowInstanceStore má metodu Promote , kterou můžete použít k povýšení vlastnosti jako vlastnosti, kterou lze použít v dotazech. Následující příklad je kompletním příkladem rozšiřitelnosti úložiště.

  1. V tomto ukázkovém scénáři má aplikace pro zpracování dokumentů pracovní postupy, z nichž každá používá vlastní aktivity ke zpracování dokumentů. Tyto pracovní postupy mají sadu stavových proměnných, které je potřeba zpřístupnit koncovému uživateli. K dosažení tohoto cíle aplikace DP poskytuje rozšíření instance typu PersistenceParticipant, které jsou používány aktivitami k poskytování stavových proměnných.

    class DocumentStatusExtension : PersistenceParticipant
    {
        public string DocumentId;
        public string ApprovalStatus;
        public string UserName;
        public DateTime LastUpdateTime;
    }
    
  2. Nové rozšíření se pak přidá do hostitele.

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

    Další podrobnosti o přidání vlastního účastníka trvalosti najdete v ukázce Účastníci trvalosti.

  3. Vlastní aktivity v aplikaci DP naplní různá stavová pole v metodě 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();
        // ...
    }
    
  4. Když instance pracovního postupu dosáhne bodu trvalosti, CollectValues Metoda DocumentStatusExtension trvalost účastníka uloží tyto vlastnosti do kolekce dat trvalosti.

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

    Poznámka:

    Všechny tyto vlastnosti se předávají sqlWorkflowInstanceStore architekturou trvalosti prostřednictvím kolekce SaveWorkflowCommand.InstanceData.

  5. Aplikace DP inicializuje úložiště instancí pracovního postupu SQL a vyvolá metodu Zvýšení úrovně pro zvýšení úrovně těchto dat.

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

    Na základě těchto informací o povýšení sqlWorkflowInstanceStore umístí vlastnosti dat do sloupců zobrazení InstancePromotedProperties .

  6. Pokud chcete dotazovat podmnožinu dat z tabulky povýšení, aplikace DP přidá do zobrazení povýšení přizpůsobené zobrazení.

    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] zobrazení

Název sloupce Typ sloupce Popis
InstanceId Identifikátor GUID Instance pracovního postupu, do které tento povýšení patří.
PromotionName nvarchar(400) Název samotného povýšení.
Hodnota1, Hodnota2, Hodnota3,..,Value32 Sql_variant Hodnota samotné upřednostněné vlastnosti. Většina primitivních datových typů SQL s výjimkou binárních objektů blob a řetězců s délkou více než 8 000 bajtů se může vejít do sql_variant.
Hodnota33, Hodnota34, Hodnota35, ..., Hodnota64 Varbinary(max) Hodnota upřednostněných vlastností, které jsou explicitně deklarovány jako varbinary(max).