PersistenceParticipant.MapValues Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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.