Описание
В D365O, как и в AX2012, доступна возможность развертывания SOAP веб-сервисов, выполняющих заданную программистом логику. Эти веб-сервисы могут принимать от подключенных к ним клиентов некоторые данные, после чего выполнить работу с таблицами D365O и вернуть результат.
Логика таких веб-сервисов написана на языке X++, но клиентские программы, подлючающиеся к веб-сервису, не зависят от языка программирования, так как они видят только генерируемый при развертывании SOAP веб-сервиса XML документ, в котором дается полное описание всех доступных методов веб-сервиса и их переменных.
Клиентские программы при работе с SOAP веб-сервисами должны настроиться на адрес сгенерированного XML документа, после чего просто вызывать один из доступных в веб-сервисе методов, используя переменные требуемых типов для передачи входных параметров и считывания результата.
Основной код
Как видно, при этом используется класс из AuthenticationUtility Microsoft. При возникновении ошибки авторизации (логин или пароль введен неверно, или пользователь не имеет прав использования приложения Azure), программа прекратит работу.
Далее создается клиент. Для этого используется класс клиента веб-сервиса, на который была создана ссылка при подготовке к работе. Название класса выглядит следующим образом: «NAMESPACE СЕРВИСА В C#».«НАЗВАНИЕ СЕРВИСА В MSD»Client.
Так как SOAP веб-сервисы D365O требуют неразрывного подключения для своей работы, создается канал подключения. Все дальнейшие действия производятся внутри этого канала.
Далее создается и настраивается контекст запроса к веб-сервису. В нем мы можем указать, с какой компанией D365O мы будем работать. Представляет собой класс с названием вида «NAMESPACE СЕРВИСА В C#». CallContext.
После этого устанавливаются авторизационные хедеры запроса, без которых D365O не даст право использовать веб-сервис. При этом используется полученый ранее хедер.
Создаются входные и выходные переменные для передачи в веб-сервис.
В случае, если веб-сервис на входе или на выходе использует класс контракта, необходимо создать переменную этого класса. При этом используется имя класса вида «NAMESPACE СЕРВИСА В C#».«НАЗВАНИЕ КЛАССА КОНТРАКТА В D365O».
После этого можно присваивать значение переменным контракта, указав через точку выбранное в контракте имя. Например:
Создав все необходимые переменные, можно вызвать метод веб-сервиса командой вида «ПЕРЕМЕННАЯ КЛИЕНТА СЕРВИСА». «НАЗВАНИЕ МЕТОДА»(«КОНТЕКСТ», «ВХОДНЫЕ ДАННЫЕ (МОЖЕТ БЫТЬ НЕСКОЛЬКО)», «РЕЗУЛЬТАТ»). При чем вызывать метод нужно в try-catch, потому что программа выдаст ошибку, если пользователь имеет доступ к зарегистрированому в Azure приложению, но не имеет доступа к D365O.
Так как последние действия происходили в канале подключения клиента, необходимо закрыть клиент (снаружи канала).
Пример
В качестве примера приведено подключение к сервису для создания записи в складском журнале перемещений из статьи «Развертывание SOAP и JSON веб-сервисов в D365O» с помощью приложения Windows forms.