PersistenceParticipant.MapValues Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Een host roept deze methode aan nadat deze is uitgevoerd met het verzamelen van de waarden in de eerste fase. De host stuurt twee alleen-lezen woordenlijsten door van waarden die zijn verzameld van alle persistentiedeelnemers tijdens de eerste fase (CollectValues-fase) naar deze methode voor toewijzing. De host voegt waarden toe in de woordenlijst die door deze methode wordt geretourneerd aan de verzameling alleen-schrijven-waarden.
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)
Parameters
- readWriteValues
- IDictionary<XName,Object>
De waarden voor lezen/schrijven die moeten worden behouden.
- writeOnlyValues
- IDictionary<XName,Object>
De alleen-schrijven-waarden die moeten worden behouden.
Retouren
Een woordenlijst met extra alleen-schrijven-waarden die moeten worden behouden.
Voorbeelden
Het volgende codevoorbeeld laat zien hoe u MapValues gebruikt in een klasse die is afgeleid van PersistenceParticipant. Dit voorbeeld is afkomstig uit het voorbeeld van het bedrijfsaankoopproces .
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;
}
Opmerkingen
Elke waarde die wordt geleverd door implementaties van alle MapValues methoden voor alle persistentiedeelnemers, inclusief alle waarden die in de eerste fase (CollectValues-fase) zijn verzameld, moeten een unieke XName hebben.