다음을 통해 공유


PersistenceParticipant.MapValues 메서드

정의

호스트는 첫 번째 단계에서 값 수집을 완료한 후 이 메서드를 호출합니다. 호스트는 첫 번째 단계(CollectValues 단계) 중에 모든 지속성 참석자로부터 수집한 값의 읽기 전용 사전 두 개를 매핑을 위해 이 메서드로 전달합니다. 호스트는 이 메서드에 의해 반환된 사전의 값을 쓰기 전용 값 컬렉션에 추가합니다.

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)

매개 변수

readWriteValues
IDictionary<XName,Object>

지속할 읽기/쓰기 값입니다.

writeOnlyValues
IDictionary<XName,Object>

지속할 쓰기 전용 값입니다.

반환

IDictionary<XName,Object>

지속할 추가 쓰기 전용 값이 포함된 사전입니다.

예제

다음 코드 샘플에서는 PersistenceParticipant에서 파생되는 클래스에 MapValues를 사용하는 방법을 보여 줍니다. 이 예제에서는 합니다 기업 구매 프로세스 샘플입니다.

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

설명

첫 번째 단계(CollectValues 단계)에서 수집한 모든 값을 포함하는 모든 지속성 참석자에 대해 모든 MapValues 메서드 구현이 제공하는 각 값에는 고유한 XName이 있어야 합니다.

적용 대상