PersistenceParticipant.CollectValues Method (IDictionary<XName, Object>, IDictionary<XName, Object>)

.NET Framework (current version)
 

A host invokes this method on a custom persistence participant to collect read-write values and write-only values, to be persisted.

Namespace:   System.Activities.Persistence
Assembly:  System.Activities (in System.Activities.dll)

protected virtual void CollectValues(
	out IDictionary<XName, object> readWriteValues,
	out IDictionary<XName, object> writeOnlyValues
)

Parameters

readWriteValues
Type: System.Collections.Generic.IDictionary<XName, Object>

The read-write values to be persisted.

writeOnlyValues
Type: System.Collections.Generic.IDictionary<XName, Object>

The write-only values to be persisted.

The host packages read-write values in the first dictionary as T:System.Runtime.Persistence.InstanceValue objects of an P:System.Activities.Persistence.SaveWorkflowCommand.InstanceData collection, and packages write-only values in the second dictionary as T:System.Runtime.Persistence.InstanceValue objects with F:System.Runtime.Persistence.InstanceValueOptions.Optional and F:System.Runtime.Persistence.InstanceValueOptions.WriteOnly flags set. For more information, seeT:System.Runtime.Persistence.InstanceValueOptions.

System_CAPS_importantImportant

Each value provided by implementations of CollectValues across all persistence participants within one persistence episode must have a unique XName.

The following code sample demonstrates using CollectValues in a class that derives from PersistenceParticipant. This example is from the Persistence Participants sample.

public class StepCountExtension : PersistenceParticipant
{
    static XNamespace stepCountNamespace = XNamespace.Get("urn:schemas-microsoft-com:Microsoft.Samples.WF/WorkflowInstances/properties");
    static XName currentCountName = stepCountNamespace.GetName("CurrentCount");

    int currentCount;

    public int CurrentCount
    {
        get
        {
            return this.currentCount;
        }
    }

    internal void IncrementStepCount()
    {
        this.currentCount += 1;
    }

    protected override void CollectValues(out IDictionary<XName, object> readWriteValues, out IDictionary<XName, object> writeOnlyValues)
    {
        readWriteValues = new Dictionary<XName, object>(1) { { currentCountName, this.currentCount } };
        writeOnlyValues = null;
    }

    protected override void PublishValues(IDictionary<XName, object> readWriteValues)
    {
        object loadedData;
        if (readWriteValues.TryGetValue(currentCountName, out loadedData))
        {
            this.currentCount = (int)loadedData;
        }
    }
}

.NET Framework
Available since 4.0
Return to top
Show: