2016-08-10 4 views
1

Я использовал для создания ранних классов классов для Dynamics CRM, используя CrmSvcUtil and the 2011 endpoint.
Это все еще работает, но должно быть устарело так Я пытаюсь понять новую конечную точку OData и использовать ее для генерации классов.Как преобразовать XML-метаданные CRM Online в классы C#?

Вы можете просмотреть сущность модели XML для CRM, перейдя по ссылке на соответствующий URL:

https://myorg.crm4.dynamics.com/api/data/v8.1/ $metadata

Или же вы можете просто загрузить XML из раздела разработчиков в CRM:

download odata metadata

В любом случае вы получите XML, определяющий модель сущности:

<?xml version="1.0" encoding="utf-8"?> 
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx"> 
    <edmx:Reference Uri="http://vocabularies.odata.org/OData.Community.Keys.V1.xml"> 
    <edmx:Include Namespace="OData.Community.Keys.V1" Alias="Keys" /> 
    <edmx:IncludeAnnotations TermNamespace="OData.Community.Keys.V1" /> 
    </edmx:Reference> 
    <edmx:Reference Uri="http://vocabularies.odata.org/OData.Community.Display.V1.xml"> 
    <edmx:Include Namespace="OData.Community.Display.V1" Alias="Display" /> 
    <edmx:IncludeAnnotations TermNamespace="OData.Community.Display.V1" /> 
    </edmx:Reference> 
    .... blah blah .... 

Как преобразовать это в набор строго типизированных классов C#?

Я нашел this guide which recommends using the OData v4 Client Code Generator tool, но это кажется излишним, и я предпочел бы избегать использования инструментов, которые могут перестать работать в будущем.

Я также видел MSDN article for DataSvcUtil.exe, который может конвертировать файлы EDMX, но у меня есть XML. Я попытался изменить расширение файла, но он не будет конвертировать, он выдает ошибку:

error 7001: The 'Scale' attribute is invalid - The value 'Variable' is invalid according to its datatype ' http://schemas.microsoft.com/ado/2007/05/edm:TScaleFacet ' - The string 'Variable' is not a valid Integer value.
The string 'Variable' is not a valid Integer value.

теперь я застрял и не уверен, что является рекомендуемым способом сделать это.

ответ

1

Microsoft заявила, что они переведут SDK из конечной точки 2011 в WebAPI. Я не слышал никаких подробностей о том, что это значит для ранних связанных типов, но я предполагаю, что они выйдут с официальным ответом до этого. (возможно, CrmWebApiUtil.exe) Я считаю, что CrmSrvUtil был первоначально написан третьей стороной, и Microsoft просто взяла на себя ответственность за это.

+0

Я читал об этом, но он был слишком расплывчатым и не обязывающим, чтобы облегчить мои проблемы. На данный момент я смягчился и использовал инструмент генератора кода для создания DataServiceContext и связанных классов, и он работает очень хорошо. Я занимаюсь исследованием, чтобы узнать, могу ли я сам создавать эти классы, используя библиотеку OData, чтобы я мог понять немного больше о том, что произошло в этом инструменте. Если я найду какую-либо информацию, я отправлю ее здесь. – Equalsk