次の方法で共有


方法: カスタム永続参加要素を作成する

次の手順では、永続参加要素を作成します。 永続参加要素の実装例については、永続性への参加のサンプルと「ストア拡張」のトピックを参照してください。

  1. PersistenceParticipant または PersistenceIOParticipant クラスから派生するクラスを作成します。 PersistenceIOParticipant クラスには、I/O 操作に参加できることに加え、PersistenceParticipant クラスと同じ拡張ポイントが備わっています。 次のうち、必要な手順を行います。

  2. CollectValues メソッドを実装します。 CollectValues メソッドには、2 つのディクショナリ パラメーターがあります。1 つは、読み取り/書き込み可能な値を格納するもので、もう 1 つは書き込み専用の値を格納するものです (後でクエリで使用します)。 このメソッドでは、永続参加要素に固有のデータをこれらのディクショナリに設定する必要があります。 各ディクショナリには、値の名前がキーとして格納されているほか、値そのものが InstanceValue オブジェクトとして格納されています。

    readWriteValues ディクショナリ内の値は、InstanceValue オブジェクトとしてパッケージ化されています。 書き込み専用ディクショナリ内の値は、InstanceValueOptions.Optional および InstanceValueOption.WriteOnly セットで InstanceValue オブジェクトとしてパッケージ化されています。 すべての永続参加要素について CollectValues の実装によって形成される各 InstanceValue の名前は一意である必要があります。

    protected virtual void CollectValues(out IDictionary<XName,Object> readWriteValues, out IDictionary<XName,Object> writeOnlyValues)
    {
    }
    
  3. MapValues メソッドを実装します。 MapValues メソッドが受け取る 2 つのパラメーターは、CollectValues メソッドが受け取るパラメーターと似ています。 CollectValues の段階で収集されるすべての値は、これらのディクショナリ パラメーターを通じて渡されます。 MapValues の段階で追加される新しい値は、書き込み専用の値に追加されます。 書き込み専用のディクショナリが、インスタンスの値に直接関連付けられていない外部ソースにデータを提供するために使用されます。 すべての永続参加要素について MapValues メソッドの実装によって形成されるそれぞれの値の名前は一意である必要があります。

    protected virtual IDictionary<XName,Object> MapValues(IDictionary<XName,Object> readWriteValues,IDictionary<XName,Object> writeOnlyValues)
    {
    }
    

    MapValues メソッドは CollectValues が提供しない機能を提供し、CollectValues が処理しなかった別の永続参加により提供される、別の値への依存関係が許可されます。

  4. PublishValues メソッドを実装します。 PublishValues メソッドは、永続ストアから読み込まれた値をすべて含むディクショナリを受け取ります。

    protected virtual void PublishValues(IDictionary<XName,Object> readWriteValues)
    {
    }
    
  5. 参加要素が永続 I/O 参加要素である場合、BeginOnSave メソッドを実装します。 このメソッドは保存操作中に呼び出されます。 このメソッドでは、永続化 (保存) しているワークフロー インスタンスに付随する I/O を実行する必要があります。 ホストが、対応する永続化コマンドのトランザクションを使用している場合、同じトランザクションが Transaction.Current で確立されます。 さらに、PersistenceIOParticipant はトランザクションの一貫性の要件を通知することがあります。この場合、ホストはほかに使用されなければ、永続化のトランザクションを作成します。

    protected virtual IAsyncResult BeginOnSave(IDictionary<XName,Object> readWriteValues, IDictionary<XName,Object> writeOnlyValues, TimeSpan timeout, AsyncCallback callback, Object state)
    {
    }
    
  6. 参加要素が永続 I/O 参加要素である場合、BeginOnLoad メソッドを実装します。 このメソッドは読み込み操作中に呼び出されます。 このメソッドでは、ワークフロー インスタンスの読み込みに付随する I/O を実行する必要があります。 ホストが、対応する永続化コマンドのトランザクションを使用している場合、同じトランザクションが Transaction.Current で確立されます。 さらに、PersistenceIOParticipant はトランザクションの一貫性の要件を通知することがあります。この場合、ホストはほかに使用されなければ、永続化のトランザクションを作成します。

    protected virtual IAsyncResult BeginOnLoad(IDictionary<XName,Object> readWriteValues, TimeSpan timeout, AsyncCallback callback, Object state)
    {
    }