Описание
Для создания веб-сервиса, к которому будет подключатся клиентское приложение, как минимум, нужно написать код класса, который описывает логику работы сервиса. Далее по тексту будем называть его классом сервиса. Он содержит в себе методы, которые будут вызываться на стороне клиента.
Но использовать один лишь класс сервиса может быть корректно только в том случае, когда и на входе, и на выходе нам нужно только по одной переменной. Если же на вход метода сервиса подается несколько переменных, то более удобно; а если на выходе метода нужно получить более одной переменной, то единственно возможно, использовать классы контрактов. Эти классы содержат в себе перечень переменных, которые будут приниматься на входе метода или отправляться на выход вместе.
Кроме создания этих классов также нужно создать файлы сервисов, соответствующие созданным классам сервисов, и файлы сервисных групп, объединяющие файлы сервисов, и дающие к ним доступ из клиентского приложения. Доступ дается в виде двух URL ссылок – одна из которых указывает на документ XML, используемый форматом SOAP, а другая на строку JSON, для использования форматом JSON. То есть, веб-сервис D365O разворачивается сразу в двух форматах.
Создание класса контракта
В качестве примера приведен элемент контракта с одной обычной переменной и одной коллекцией вложенных контрактов:
Создание класса сервиса
Также он дает возможность добавить аттрибут [DataMember] к их переменным, с опциональным аргументом Name. Например:
В приведенном примере, в качестве возвращаемого результата со стороны клиента будет массив строк (String[]), а в качестве входной переменной будет приниматься массив классов контрактов (InventoryServiceContract[]). Но при этом в коде D365O, все эти переменные будут рассматриваться и обрабатываться в качестве List, то есть с использованием ListEnumerator для считывания входных данных и метода addEnd() для записи в результирующую переменную.
Кроме того, стоит отметить строку changecompany(“USMF”). При работе с SOAP веб-сервисами, программист со стороны клиента может выбрать нужную ему компанию вызывая веб-сервис, с помощью установки значения в специальную переменную контекста, передаваемую в любой SOAP веб-сервис D365O вместе с входными и выходными переменными. В случае же с JSON веб-сервисами, сменить компанию со стороны клиента по умолчанию невозможно, поэтому нужно учитывать этот момент при написании кода веб-сервиса.
Примеры классов сервиса и контракта
Ниже приведен код сервиса для создания записи в складском журнале перемещений. На вход сервиса идут название компании, в которой нужно создать журнал, а также контракт, содержащий обязательные поля журнала. На выходе сервиса возвращается контракт, содержащий номер и RecId созданного журнала, строку содержащую ошибки, а также коллекцию вложенных контрактов, в которых хранятся RecId созданных строк журналов.
Создание файлов сервисов и сервисных групп
https://oit-adm-boryseda2b5401719f08ddevaos.cloudax.dynamics.com/soap/services/InventJourMovementGeneratorServiceGroup?wsdl
При этом, успешная проверка по ссылке выше, соответствующая адресу SOAP веб-сервиса, также значит и успешное развертывание JSON веб-сервиса, который всегда разворачивается одновременно. JSON веб-сервис доступен по ссылке вида https://«ИМЯ ХОСТА»/api/services/«НАЗВАНИЕ СЕРВИСНОЙ ГРУППЫ»/«НАЗВАНИЕ СЕРВИСА»/«НАЗВАНИЕ МЕТОДА СЕРВИСА». Например:
https://oit-adm-boryseda2b5401719f08ddevaos.cloudax.dynamics.com/api/services/InventJourMovementGeneratorServiceGroup/InventJourMovementGeneratorService/createInventJournal