Продолжаем знакомство с Microsoft Dynamics CRM с поста «Что такое CRM«. Для разработчика очень важно иметь инструмент и возможность для работы с объектами системы MS CRM такими как сущности, их связь между собой и атрибуты. Для этого в MS CRM cуществует стандартный набор CRM SDK, о котром дальше и пойдет речь.
CRM SDK преимущественно состоит из двух веб-служб: CRM Service и Metadata Service. Нет необходимости включать сборки в свой код (кроме одной для Callouts).
Служба CRM Service
Служба CRM Service содержит все классы, которые вам понадобятся при разработке приложения, работающего с CRM сервером. Чтобы включить эту службу в ваш проект – добавьте новую веб-ссылку на
http://<имя crm-сервера>/mscrmservices/2006/crmservice.asmx
Конечно, вам необходимо заменить <имя crm-сервера> на имя или ip-адрес вашего CRM-сервера.
Вы можете назвать свою веб-службу как угодно, но вы не должны использовать «CrmService». Такое название кажется отличным для нее, но у вас могу возникнуть нежелательные ошибки позже, потому что CrmService – это также и название главного класса службы, которая необходима для связи с CRM-сервером, и, иногда в Visual Studio возникают проблемы. Обычно используют название типа CrmSdk или CrmService3, но как я и говорил ранее – вы можете назвать ее как угогдно.
Сгенерированные классы будут подключены в пространство имен (далее namespace) вашего текущего проекта. Например: по умолчанию в вашем проекте namespace называется «CrmTest» и вы назвали веб-службу CrmService3, тогда CRM классы будут созданы в namespace CrmTest.CrmService3 и одна из первых строчек вашего приложения будет
using CrmTest.CrmService3;
После создания веб-службы, вы можете переименовать ваш namespace как захотите. Потому что это всего лишь единственная строка и это очень просто сделать. Поэтому вы можете поменять namespace на Microsoft.Crm, так лучше выглядит. Однако, каждое обновление ссылки на веб-службу перезапишет файл и придется снова вручную изменить namespace.
Вам необходимо обновить веб-службу, когда вы настраиваете CRM сервер. Новые сущности и атрибуты не доступны через классы веб-службы до тех пор, пока вы не опубликуете их и не обновите службы в вашем проекте. Сгенерированные классы представляют доступные сущности на момент создания или обновления веб-службы. Другими словами – содержание WSDL динамическое и изменяется, когда атрибут или сущность изменяются. Если вы связываетесь с сущностью account через account класс и добавляете новый атрибут для account-сущности в CRM веб-клиенте (т.е. через браузер), ваше приложение не будет иметь доступ к новому атрибуту до тех пор пока вы не обновите веб-службу и не перекомпилируете приложение. Чтобы избежать такого сценария вы можете использовать DynamicEntity класс, который возвращает все сущности как массив свойств.
Служба Metadata Service
Служба Metadata Service используется для получения информации о доступных сущностях, их атрибутах и связях. Она очень полезна если вам необходимо создать приложение, которое будет работать с CRM, если вы не знаете какие сущности доступны и как они настроены. Однако, надо четко понимать как работать со службой CRM Service перед началом работы со службой metadata service. Чтобы подключить службу metadata service, добавьте другую веб-службу в ваш проект и укажите на адрес:
http://<имя crm-сервера>/mscrmservices/2006/metadataservice.asmx
Основной класс службы использует имя MetadataService, поэтому вам необходимо использовать другое название для вашей службы, например CrmMetadataService3. В ваш проект добавьте
using CrmTest.CrmMetadataService3;
Т.к. все данные MS CRM хранять в базе данных MS SQL, то можно использовать прямое подключение к БД и работают с данными напрямую. Это не рекомендуется делать, т.к. все равно какую-то проверку на целостность данных вы можете упустить и что-то обязательно пойдет не так, и зачем ломать голову над тем, чтобы выяснить как связаны таблицы между собой и прочее. Для этого и были созданы такие службы как: CrmService и MetadataService, пользуйтесь
With best regards to Michael Höhne
