Описание
Для уменьшения количества кода, требуемого для подключения к OData вебсервисам, необходимо использовать автоматически генерируемый прокси класс. Этот класс содержит множество вложенных классов, которые соответствуют data entity, находящимся по указанному адресу, который может быть адресом D365O. Используя их, можно считывать, создавать, обновлять и удалять данные.
Чтобы еще больше упростить подключение к OData вебсервисам D365O, мною был написан базовый класс OData клиента ODataServiceBase, который убирает необходимость самостоятельно инициализировать подключение к прокси классу и добавлять авторизационные хедеры OAuth, необходимые в вебсервисах D365O.
Рекомендуется создать проект, который будет содержать сгенерированный прокси класс и класс ODataServiceBase, и использовать ссылку на него в собственных проектах.
Подготовительный этап
Принцип работы
Класс ODataServiceBase содержит только конструктор, инициализирующий необходимые для подключения к D365O элементы.
Сначала в нем создается объект клиента прокси класса:
В качестве URL используется базовый адрес D365O из AuthenticationUtility Microsoft с приставкой data.
Далее к объекту клиента крепится хедер авторизации из AuthenticationUtility Microsoft:
Сам по себе класс ODataServiceBase больше ничего не делает, — он используется как базовый класс для классов-наследников, которые и содержат логику подключений к data entity клиента, объявленого в ODataServiceBase.
При этом создастся файл с расширением .tt. Файл будет выглядеть как показано в примере далее, но без выделенных жирным шрифтом строк:
Выделенные жирным шрифтом MetadataDocumentUri и TempFilePath нужно указать самостоятельно.
MetadataDocumentUri – основной параметр файла, который содержит адрес ресурса с data entity. Для D365O он равен базовому адресу с приставкой /data. В примере это https://oit-adm-boryseda2b5401719f08ddevaos.cloudax.dynamics.com/data.
TempFilePath – это параметр, указывающий адрес на компьютере, куда нужно сохранить XML разметку data entity. По умолчанию параметр пуст, и это значит, что разметка будет храниться вместе с кодом C#. Возможно для некоторых ресурсов с развернутыми вебсервисами OData это приемлемо, из-за небольшого количества data entity, но в случае с D365O, количество data entity слишком велико для хранения XML разметки вместе с кодом, — они просто не помещаются в прокси класс. Поэтому для D365O этот параметр обязателен.
После сохранения изменений в файле автоматически выполняется скрипт генерации прокси класса и XML разметки (в одном или в двух разных файлах). Полученный прокси класс можно использовать у себя в программах.
Полученный результат содержит в себе, в частности, статус выполнения (успешно/неуспешно), а также выходные данные веб-сервиса, или сообщение с текстом ошибки, если что-то пошло не так. Для обработки результата проверяется статус выполнения запроса, после чего считывается его содержимое. Как в случае с получением выходных данных, так и в случае с получением текста ошибки, эта информация получается в виде строки JSON.