Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

PersistenceParticipant.MapValues Method

A host invokes this method after it is done with collecting the values in the first stage. The host forwards two read-only dictionaries of values it collected from all persistence participants during the first stage (CollectValues stage) to this method for mapping. The host adds values in the dictionary returned by this method to the collection of write-only values.

Namespace:  System.Activities.Persistence
Assembly:  System.Activities (in System.Activities.dll)
protected virtual IDictionary<XName, Object> MapValues(
	IDictionary<XName, Object> readWriteValues,
	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.

Return Value

Type: System.Collections.Generic.IDictionary<XName, Object>
A dictionary containing additional write-only values to be persisted.

Each value provided by implementations of all the MapValues methods across all persistence participants including all the values collected in the first stage (CollectValues stage) must have a unique XName.

The following code sample demonstrates using MapValues in a class that derives from PersistenceParticipant. This example is from the Corporate Purchase Process sample.

class XmlPersistenceParticipant : PersistenceParticipant
{
    const string propertiesNamespace = "urn:schemas-microsoft-com:System.Activities/4.0/properties";
    private Guid Id;

    public XmlPersistenceParticipant(Guid id)
    {
        Id = id;
    }

    //Add any additional necessary data to persist here 
    protected override void CollectValues(out IDictionary<XName, object> readWriteValues, out IDictionary<XName, object> writeOnlyValues)
    {
        base.CollectValues(out readWriteValues, out writeOnlyValues);
    }

    //Implementations of MapValues are given all the values collected from all participants’ implementations of CollectValues 
    protected override IDictionary<XName, object> MapValues(IDictionary<XName, object> readWriteValues, IDictionary<XName, object> writeOnlyValues)
    {
        XName statusXname = XName.Get("Status", propertiesNamespace);

        IDictionary<XName, object> mappedValues = base.MapValues(readWriteValues, writeOnlyValues);

        RequestForProposal requestForProposal = null;
        string status = string.Empty;
        object value = null;

        //retrieve the status of the workflow 
        if (writeOnlyValues.TryGetValue(statusXname, out value))
        {
            status = (string)value;
        }

        //retrieve the RequestForProposal object 
        foreach (KeyValuePair<System.Xml.Linq.XName, object> item in writeOnlyValues)
        {
            if (item.Value is LocationInfo)
            {
                LocationInfo li = (LocationInfo)item.Value;
                if (li.Value is RequestForProposal)
                {
                    requestForProposal = (RequestForProposal)li.Value;
                }
            }
        }

        IOHelper.EnsureAllRfpFileExists();

        // load the document
        XElement doc = XElement.Load(IOHelper.GetAllRfpsFileName());

        IEnumerable<XElement> current =
                                from r in doc.Elements("requestForProposal")
                                where r.Attribute("id").Value.Equals(Id.ToString())
                                select r;

        if (status == "Closed")
        {
            // erase nodes for the current rfp                     
            foreach (XElement xe in current)
            {
                xe.Attribute("status").Value = "finished";
            }
        }
        else
        {
            // erase nodes for the current rfp                     
            foreach (XElement xe in current)
            {
                xe.Remove();
            }

            // get the Xml version of the Rfp, add it to the document and save it 
            if (requestForProposal != null)
            {
                XElement e = SerializeRfp(requestForProposal, Id);
                doc.Add(e);
            }
        }

        doc.Save(IOHelper.GetAllRfpsFileName());

        return mappedValues;
    }

.NET Framework

Supported in: 4.5.1, 4.5, 4

.NET Framework Client Profile

Supported in: 4

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.