Описание

Для уменьшения количества кода, требуемого для подключения к OData вебсервисам, необходимо использовать автоматически генерируемый прокси класс. Этот класс содержит множество вложенных классов, которые соответствуют data entity, находящимся по указанному адресу, который может быть адресом D365O. Используя их, можно считывать, создавать, обновлять и удалять данные.

Чтобы еще больше упростить подключение к OData вебсервисам D365O, мною был написан базовый класс OData клиента ODataServiceBase, который убирает необходимость самостоятельно инициализировать подключение к прокси классу и добавлять авторизационные хедеры OAuth, необходимые в вебсервисах D365O.

Рекомендуется создать проект, который будет содержать сгенерированный прокси класс и класс ODataServiceBase, и использовать ссылку на него в собственных проектах.

Подготовительный этап

Принцип работы

Класс ODataServiceBase содержит только конструктор, инициализирующий необходимые для подключения к D365O элементы.

Сначала в нем создается объект клиента прокси класса:

Copy to Clipboard

В качестве URL используется базовый адрес D365O из AuthenticationUtility Microsoft с приставкой data.

Далее к объекту клиента крепится хедер авторизации из AuthenticationUtility Microsoft:

Copy to Clipboard

Сам по себе класс ODataServiceBase больше ничего не делает, — он используется как базовый класс для классов-наследников, которые и содержат логику подключений к data entity клиента, объявленого в ODataServiceBase.

Генерация прокси класса

Для генерации прокси класса сначала нужно добавить расширение для Visual Studio, открыв Tools / Extensions and Updates.

В открывшемся окне выбрать слева вкладку Online / Visual Studio Gallery.

После этого в поиске в правом верхнем углу ввести OData v4 Client Code Generator и нажать Download возле найденного результата.

При этом откроется окно, в котором нужно нажать кнопку Install. После установки окно Extensions and Updates можно закрыть.

Далее нужно создать проект C# и добавить в него новый элемент типа OData Client.

При этом создастся файл с расширением .tt. Файл будет выглядеть как показано в примере далее, но без выделенных жирным шрифтом строк:

Copy to Clipboard

Выделенные жирным шрифтом 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.

Программный код

Copy to Clipboard

Подготовил статью:

Дыкуха
ДыкухаБорис Александрович
Senior Software Developer, OntargIT
Published On: 21 апреля, 2021 / Рубрики: Technical Support /

Следите за новостями компании OntargIT

    Ознакомиться с Политикой конфиденицальности можно здесь.