PersistenceParticipant.MapValues Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Un host invoca este método después de que haya terminado con la recopilación de los valores de la primera fase. El host reenvía dos diccionarios de solo lectura de valores recopilados de todos los participantes de persistencia durante la primera fase (fase CollectValues) a este método para la asignación. El host agrega valores en el diccionario devuelto por este método a la colección de valores de solo escritura.
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)
Parámetros
- readWriteValues
- IDictionary<XName,Object>
Valores de lectura y escritura que se van a conservar.
- writeOnlyValues
- IDictionary<XName,Object>
Valores de solo escritura que se van a conservar.
Devoluciones
Diccionario que contiene valores adicionales de solo escritura que se van a conservar.
Ejemplos
En el ejemplo de código siguiente se muestra el uso de MapValues en una clase que deriva de PersistenceParticipant. Este ejemplo procede del ejemplo de proceso de compra corporativa .
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;
}
Comentarios
Cada valor proporcionado por implementaciones de todos los MapValues métodos de todos los participantes de persistencia, incluidos todos los valores recopilados en la primera fase (fase CollectValues) debe tener un XName único.