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;
}
c20e0622-2784-494d-ad9f-440aa78a51e1|1|4.0
WF4