2016-09-08 3 views
0

У меня была динамика CRM 2011 экземпляра генерировать CSDL модель:Цель модели csdl/edm для запроса набора данных odata?

enter image description here

Целью этой модели является так, что я могу запросить свой набор данных с помощью OData.

Можно ли вручную удалить все файлы CSDL, кроме одного объекта?

Я спрашиваю потому, что я был в состоянии отделить от этой гигантской модели ЦДЦБЛА только 1 объект, который выглядит примерно так:

enter image description here

Однако запросы не работают. Только чрезвычайно простые запросы с Edm.String работают.

В качестве важной стороне записки, я был в состоянии загрузить подмножество файла ЦДЦБЛ, без каких-либо ошибок:

public static IEdmModel GetModel() 
{ 
    if (EdmModel != null) 
    { 
     return EdmModel; 
    } 

    IEdmModel referencedModel; 
    using (
     Stream csdlStream = File.Open("csdl\\WorkingorgFile.csdl", FileMode.Open, FileAccess.Read, 
      FileShare.Read)) 
    { 
     IEnumerable<EdmError> errors; 
      var parseResult = CsdlReader.TryParse(new[] {XmlReader.Create(csdlStream)}, out referencedModel, out errors); 

     if (!parseResult) 
      throw new InvalidOperationException("Failed to load model : " + 
               string.Join(Environment.NewLine, 
                errors.Select(e => e.ErrorMessage))); 
    } 
    EdmModel = referencedModel; 
    return referencedModel; 
} 

ответ

0

Я не совсем уверен, что модель CSDL есть, но всякий раз, когда вы взаимодействуя с CRM, он не требует, чтобы вы знали точную структуру данных. Вы просто не можете фильтровать или выбирать атрибут, который не существует, или определить отфильтрованный атрибут как другой тип (например, сравнить дату с деньгами).

CRM также не полностью поддерживает протокол OData Querying. Например, вы не можете выполнять агрегированные запросы или объединять более трех слоев в глубину или фильтровать несколько объектов.

Если вы ищете инструменты для создания ваших запросов, я рекомендую использовать FetchXmlBuilder для создания ваших запросов. Он будет генерировать вызов OData для CRM на основе запроса FetchXml, который вы ему дали. Затем вы можете запустить их, чтобы проверить, что данные - это то, что вы хотите.