Описание

В D365O, как и в AX2012, доступна возможность развертывания SOAP веб-сервисов, выполняющих заданную программистом логику. Эти веб-сервисы могут принимать от подключенных к ним клиентов некоторые данные, после чего выполнить работу с таблицами D365O и вернуть результат.

Логика таких веб-сервисов написана на языке X++, но клиентские программы, подлючающиеся к веб-сервису, не зависят от языка программирования, так как они видят только генерируемый при развертывании SOAP веб-сервиса XML документ, в котором дается полное описание всех доступных методов веб-сервиса и их переменных.

Клиентские программы при работе с SOAP веб-сервисами должны настроиться на адрес сгенерированного XML документа, после чего просто вызывать один из доступных в веб-сервисе методов, используя переменные требуемых типов для передачи входных параметров и считывания результата.

Вызов веб-сервиса D365O из Desktop приложения

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

Так как вызывается веб-сервис D365O, необходимо пройти процесс авторизации. Для этого сначала необходимо получить авторизационный хедер, в будущем прикрепляемый к запросу, вызывающему метод веб-сервиса:

Основной код

Copy to Clipboard

Как видно, при этом используется класс из AuthenticationUtility Microsoft. При возникновении ошибки авторизации (логин или пароль введен неверно, или пользователь не имеет прав использования приложения Azure), программа прекратит работу.

Далее создается клиент. Для этого используется класс клиента веб-сервиса, на который была создана ссылка при подготовке к работе. Название класса выглядит следующим образом: «NAMESPACE СЕРВИСА В C#».«НАЗВАНИЕ СЕРВИСА В MSD»Client.

Copy to Clipboard

Так как SOAP веб-сервисы D365O требуют неразрывного подключения для своей работы, создается канал подключения. Все дальнейшие действия производятся внутри этого канала.

Copy to Clipboard

Далее создается и настраивается контекст запроса к веб-сервису. В нем мы можем указать, с какой компанией D365O мы будем работать. Представляет собой класс с названием вида «NAMESPACE СЕРВИСА В C#». CallContext.

Copy to Clipboard

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

Copy to Clipboard

Создаются входные и выходные переменные для передачи в веб-сервис.

В случае, если веб-сервис на входе или на выходе использует класс контракта, необходимо создать переменную этого класса. При этом используется имя класса вида «NAMESPACE СЕРВИСА В C#».«НАЗВАНИЕ КЛАССА КОНТРАКТА В D365O».

Copy to Clipboard

После этого можно присваивать значение переменным контракта, указав через точку выбранное в контракте имя. Например:

Copy to Clipboard

Создав все необходимые переменные, можно вызвать метод веб-сервиса командой вида «ПЕРЕМЕННАЯ КЛИЕНТА СЕРВИСА». «НАЗВАНИЕ МЕТОДА»(«КОНТЕКСТ», «ВХОДНЫЕ ДАННЫЕ (МОЖЕТ БЫТЬ НЕСКОЛЬКО)», «РЕЗУЛЬТАТ»). При чем вызывать метод нужно в try-catch, потому что программа выдаст ошибку, если пользователь имеет доступ к зарегистрированому в Azure приложению, но не имеет доступа к D365O.

Copy to Clipboard

Так как последние действия происходили в канале подключения клиента, необходимо закрыть клиент (снаружи канала).

Copy to Clipboard

Пример

В качестве примера приведено подключение к сервису для создания записи в складском журнале перемещений из статьи «Развертывание SOAP и JSON веб-сервисов в D365O» с помощью приложения Windows forms.

Copy to Clipboard

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

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

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

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