Udostępnij za pośrednictwem


PersistenceParticipant.MapValues Metoda

Definicja

Host wywołuje tę metodę po zakończeniu zbierania wartości w pierwszym etapie. Host przekazuje dwa słowniki tylko do odczytu wartości zebranych od wszystkich uczestników trwałości podczas pierwszego etapu (etap CollectValues) do tej metody mapowania. Host dodaje wartości w słowniku zwracanym przez tę metodę do kolekcji wartości tylko do zapisu.

protected:
 virtual System::Collections::Generic::IDictionary<System::Xml::Linq::XName ^, System::Object ^> ^ MapValues(System::Collections::Generic::IDictionary<System::Xml::Linq::XName ^, System::Object ^> ^ readWriteValues, System::Collections::Generic::IDictionary<System::Xml::Linq::XName ^, System::Object ^> ^ writeOnlyValues);
protected virtual System.Collections.Generic.IDictionary<System.Xml.Linq.XName,object> MapValues (System.Collections.Generic.IDictionary<System.Xml.Linq.XName,object> readWriteValues, System.Collections.Generic.IDictionary<System.Xml.Linq.XName,object> writeOnlyValues);
abstract member MapValues : System.Collections.Generic.IDictionary<System.Xml.Linq.XName, obj> * System.Collections.Generic.IDictionary<System.Xml.Linq.XName, obj> -> System.Collections.Generic.IDictionary<System.Xml.Linq.XName, obj>
override this.MapValues : System.Collections.Generic.IDictionary<System.Xml.Linq.XName, obj> * System.Collections.Generic.IDictionary<System.Xml.Linq.XName, obj> -> System.Collections.Generic.IDictionary<System.Xml.Linq.XName, obj>
Protected Overridable Function MapValues (readWriteValues As IDictionary(Of XName, Object), writeOnlyValues As IDictionary(Of XName, Object)) As IDictionary(Of XName, Object)

Parametry

readWriteValues
IDictionary<XName,Object>

Wartości odczytu i zapisu, które mają być utrwalane.

writeOnlyValues
IDictionary<XName,Object>

Wartości tylko do zapisu, które mają być utrwalane.

Zwraca

IDictionary<XName,Object>

Słownik zawierający dodatkowe wartości tylko do zapisu, które mają być utrwalane.

Przykłady

W poniższym przykładzie kodu pokazano użycie elementu MapValues w klasie pochodzącej z PersistenceParticipantklasy . Ten przykład pochodzi z przykładowego procesu zakupów firmowych .

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;
    }

Uwagi

Każda wartość dostarczana przez implementacje wszystkich metod dla wszystkich MapValues uczestników trwałości, w tym wszystkich wartości zebranych w pierwszym etapie (etap CollectValues) musi mieć unikatową nazwę XName.

Dotyczy