Home > WF4

[WF4]Promote persistence Data

4. August 2010

By promoting data,we can query sql persistence store directly:

1. My persistence participant:

    public class MyPersistenceParticipant : PersistenceParticipant {

        public string message;

        static XNamespace dataNamespace =

            XNamespace.Get("http://xhinker.com/");

 

        protected override void

            CollectValues(out IDictionary<XName, object> readWriteValues,

                          out IDictionary<XName, object> writeOnlyValues) {

            readWriteValues = new Dictionary<XName, object>();

            readWriteValues.Add(dataNamespace.GetName("messageXName"), this.message);

            writeOnlyValues = null;

        }

 

        protected override IDictionary<XName, object>

            MapValues(IDictionary<XName, object> readWriteValues,

                      IDictionary<XName, object> writeOnlyValues) {

            return base.MapValues(readWriteValues, writeOnlyValues);

        }

 

        protected override void PublishValues(

            IDictionary<XName, object> readWriteValues) {

            Console.WriteLine("message:" +

                readWriteValues[dataNamespace.GetName("messageXName")]);

        }

    }

2. Collect Data Activity:

    public sealed class CollectDataActivity : CodeActivity {

        protected override void Execute(CodeActivityContext context) {

            context.GetExtension<MyPersistenceParticipant>().message =

                "hello persistence participant";

        }

    }

3.Setup sql persistence store:

   private static SqlWorkflowInstanceStore SetupSqlpersistenceStore() {

        string connectionString =

                @"Data Source=.\sqlexpress;

                Initial Catalog=PersistenceDatabase;

                Integrated Security=True";

        SqlWorkflowInstanceStore sqlWFInstanceStore =

            new SqlWorkflowInstanceStore(connectionString);

        dataNamespace = XNamespace.Get("http://xhinker.com/WF4Cookbook");

 

        List<XName> variantProperties = new List<XName>();

        variantProperties.Add(dataNamespace.GetName("messageXName"));

        sqlWFInstanceStore.Promote("additionalProperty", variantProperties, null);

 

        sqlWFInstanceStore.InstanceCompletionAction =

            InstanceCompletionAction.DeleteAll;

        InstanceHandle handle = sqlWFInstanceStore.CreateInstanceHandle();

        InstanceView view = sqlWFInstanceStore.Execute(handle,

                                                        new CreateWorkflowOwnerCommand(),

                                                        TimeSpan.FromSeconds(5));

        handle.Free();

        sqlWFInstanceStore.DefaultInstanceOwner = view.InstanceOwner;

        return sqlWFInstanceStore;

    }

 

WF4

Comments

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading