次の方法で共有


ストア拡張

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

SqlWorkflowInstanceStore を使用して、永続性データベースのインスタンスをクエリする場合に使用できるカスタムのアプリケーション固有のプロパティを昇格できます。プロパティを昇格することで、データベース内の特殊なビュー内で値が使用できるようになります。これらの昇格したプロパティ (ユーザー クエリで使用できるプロパティ) は、単純型 (Int64、Guid、String、DateTime など) またはシリアル化されたバイナリ型 (byte[]) になる場合があります。

SqlWorkflowInstanceStore クラスには Promote メソッドがあり、クエリで使用できるプロパティとしてプロパティを昇格するために使用できます。次の例は、ストア拡張のエンド ツー エンドの例です。

  1. この例のシナリオでは、ドキュメント処理 (DP) アプリケーションにワークフローがあり、それぞれがドキュメント処理にカスタム アクティビティを使用しています。これらのワークフローは、エンド ユーザーから見える必要がある一連の状態変数を備えています。これを実現するために、DP アプリケーションには PersistenceParticipant 型を持つインスタンス拡張機能があり、状態変数を提供するアクティビティによって使用されます。

    class DocumentStatusExtension : PersistenceParticipant
    {
        public string DocumentId;
        public string ApprovalStatus;
        public string UserName;
        public DateTime LastUpdateTime;
    }
    
  2. 次に、新しい機能拡張がホストに追加されます。

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

    カスタムの永続参加要素の追加の詳細については、「永続参加要素」のサンプルを参照してください。

  3. DP アプリケーションのカスタム アクティビティでは、Execute メソッドでさまざまな状態フィールドを設定します。

    public override void Execute(ActivityExecutionContext 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. ワークフロー インスタンスが永続性ポイントに達すると、DocumentStatusExtension 永続参加要素の CollectValues メソッドによって、これらのプロパティが永続性データ コレクションに保存されます。

    class DocumentStatusExtension : PersistenceParticipant
    {
        const XNamespace xNS = XNamespace.Get("https://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;
        }
        // ...
    }
    
    Ee364726.note(ja-jp,VS.100).gif注 :
    これらすべてのプロパティは、SaveWorkflowCommand.InstanceData コレクションを介して、永続化フレームワークによって SqlWorkflowInstanceStore に渡されます。

  5. DP アプリケーションは SQL Workflow Instance Store を初期化し、Promote メソッドを呼び出してこのデータを昇格します。

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

    この昇格情報に基づいて、SqlWorkflowInstanceStore は、 [System.Activities.DurableInstancing.InstancePromotedProperties] viewの列にデータ プロパティを設定します。

  6. 昇格テーブルのデータのサブセットを照会するために、DP アプリケーションによって昇格ビューの上にカスタマイズされたビューが追加されます。

    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] ビュー

列名 列の型 説明

InstanceId

GUID

この昇格が属するワークフロー インスタンス。

PromotionName

nvarchar(400)

昇格自体の名前。

Value1、Value2、Value3、…Value32

sql_variant

昇格したプロパティ自体の値。ほとんどの SQL プリミティブ データ型はバイナリ ブロブを除外し、長さが 8,000 バイトを超える文字列は sql_variant に合わせて短縮されます。

Value33、Value34、Value35、…、Value64

varbinary(max)

varbinary(max) として明示的に宣言される昇格したプロパティの値。