Получить набор параметров и значения полей поиска из FetchXml в CRM 2011

Я пытаюсь использовать fetchxml для получения значений из другой записи для создания новой. Мне удалось заставить все это работать, кроме получения любых значений из набора параметров или полей поиска. Установленные параметры не дают никаких ошибок, но просто не устанавливают поле вообще, и поиски говорят, что GUID имеет неправильный формат, предположительно потому, что он не проходит через GUID.

Может ли кто-нибудь помочь мне понять, как получить эти значения?

Спасибо

РЕДАКТИРОВАТЬ: Мой код ниже. Набор опций — grading (ts_grading), а его QUID (ts_quality_statement_id) мне нужно получить из выборки.

string fetchXml = @"<fetch distinct='false' mapping='logical' output-format='xml-platform' version='1.0'>
                            <entity name='ts_self_assessment_item'>
                            <attribute name='ts_evidence_of_areas_of_improvement'/><attribute name='ts_evidence_of_strengths'/><attribute name='ts_expected_completion_date'/>
                            <attribute name='ts_grading'/><attribute name='ts_quality_statement_id'/>
                            <filter type='and'>
                            <condition attribute='ts_self_assessment_id' uitype='ts_self_assessment' operator='eq' value='" + selfAssessmentID + "'/></filter></entity></fetch>";

        // Execute Fetch xml
        EntityCollection selfAssessmentItemResult = Service.RetrieveMultiple(new FetchExpression(fetchXml));

        foreach (var selfAssessment in selfAssessmentItemResult.Entities)
        {                
            string areasOfImprovement = selfAssessment["ts_evidence_of_areas_of_improvement"].ToString();
            string strengths = selfAssessment["ts_evidence_of_strengths"].ToString();
            DateTime completionDate = Convert.ToDateTime(selfAssessment["ts_expected_completion_date"].ToString());
            string grading = selfAssessment["ts_grading"].ToString();
            Guid qualityStatement = new Guid(selfAssessment["ts_quality_statement_id"].ToString());
            Guid parentSelfAssessment = new Guid(entity.Attributes["ts_self_assessmentid"].ToString());              

        }

    }

person jimminybob    schedule 09.07.2012    source источник
comment
Не могли бы вы опубликовать часть кода, который у вас не работает?   -  person Peter Majeed    schedule 09.07.2012
comment
Значения набора параметров являются числовыми, а не гидами - согласитесь с @PeterMajeed, код поможет!   -  person glosrob    schedule 10.07.2012
comment
Я разместил код в своем исходном сообщении   -  person jimminybob    schedule 10.07.2012


Ответы (1)


Атрибуты OptionSet возвращаются как OptionSetValues, а внешние ключи возвращаются как ссылки на сущности. Попробуйте использовать Entity.GetAttributeValue вместо выполнения всей этой работы по приведению ToString:

    foreach (var selfAssessment in selfAssessmentItemResult.Entities)
    {                
        string areasOfImprovement = selfAssessment.GetAttributeValue<String>("ts_evidence_of_areas_of_improvement");
        string strengths = selfAssessment.GetAttributeValue<string>("ts_evidence_of_strengths");
        DateTime completionDate = selfAssessment.GetAttributeValue<DateTime>("ts_expected_completion_date");
        var grading = selfAssessment.GetAttributeValue<OptionSetValue>("ts_grading");
        Guid qualityStatement = selfAssessment.GetAttributeValue<EntityReference>("ts_quality_statement_id").Id;

    }

И если вам нужно текстовое значение OptionSetValue, вам нужно найти его с помощью вызова службы метаданных OptionSet или поиска в свойстве Entity.FormattedAttributes.

Кроме того, использование объектов с ранним связыванием избавит вас от подобных проблем с приведением типов.

person Daryl    schedule 10.07.2012
comment
Отлично, это сработало, спасибо. В качестве побочного вопроса, как вы используете ранние связанные объекты с CRM? - person jimminybob; 10.07.2012
comment
@jimminybob, вы должны создать их с помощью инструмента в SDK. По сути, вы просто указываете инструмент на свои конечные точки CRM, и он будет генерировать объекты для вас, чтобы вы могли получить всю свою интеллигентность, и это позволяет вам использовать LINQ даже вместо Fetch XML. msdn.microsoft.com/en-us/library/gg327844.aspx - person Daryl; 10.07.2012
comment
Я бы сейчас (ну, я думаю, с 2013 года) предложил бы использовать генератор ранней привязки из XrmToolBox для генерации ваших сущностей с ранней привязкой. Он использует тот же инструмент SDK, о котором я упоминал выше, но представляет собой оболочку для командной строки, поэтому его проще настроить и он имеет гораздо больше возможностей для генерации. - person Daryl; 27.07.2020