Top.Mail.Ru
26 февраля в 17:00 МСК
онлайн-митап
Как мы перенесли игру «Герои меча и магии 3» на 1С

Создание веб-сервиса в Dynamics 365 Finance and Operations (Axapta)

Для создания веб-сервиса в Dynamics 365 Finance and Operations можно использовать методы контроллеров (SysOperation или DataEntity) или OData-сервисы. Вот пошаговая инструкция для создания RESTful веб-сервиса с помощью контроллера:

Создание класса Data Contract

Data Contract используется для передачи данных в веб-сервис. Он определяет структуру данных, которые клиент может отправить в веб-сервис.

  1. Создайте новый класс:
    1. Откройте Visual Studio.
    2. В AOT добавьте новый класс и дайте ему имя (например, MyWebServiceDataContract).
  2. Добавьте атрибут [DataContractAttribute] к классу.
  3. Добавьте приватные переменные, которые будут использоваться как параметры.
  4. Создайте публичные методы (геттеры/сеттеры) с атрибутом [DataMemberAttribute].

Пример

[DataContractAttribute]
class MyWebServiceDataContract
{
    private str _inputData;

    [DataMemberAttribute]
    public str parmInputData(str _value = _inputData)
    {
        _inputData = _value;
        return _inputData;
    }
}

Объяснение

  • DataContractAttribute указывает, что класс используется как контракт данных.
  • DataMemberAttribute указывает, что метод будет доступен для сериализации.

Создание класса Data Provider

Этот класс реализует бизнес-логику. Он обрабатывает входные данные из Data Contract и возвращает результат.

  1. Создайте новый класс, например, MyWebServiceProvider.
  2. Напишите статический метод, который принимает объект Data Contract в качестве параметра.
  3. Реализуйте бизнес-логику.

Пример

class MyWebServiceProvider
{
    public static str processData(MyWebServiceDataContract _contract)
    {
        str inputData = _contract.parmInputData();
        // Пример бизнес-логики
        str result = strFmt("Processed data: %1", inputData);

        return result;
    }
}

Создание сервиса

Сервисный класс контролирует, какие методы будут доступны клиенту.

  1. Создайте новый класс, например, MyWebService.
  2. Укажите атрибут [ServiceContractAttribute].
  3. Определите метод, который принимает объект Data Contract и вызывает метод из Provider.

Пример

[ServiceContractAttribute]
class MyWebService
{
    public str processRequest(MyWebServiceDataContract _contract)
    {
        return MyWebServiceProvider::processData(_contract);
    }
}

Объяснение

  • ServiceContractAttribute указывает, что этот класс будет доступен через веб-сервис.
  • Метод processRequest – это основной метод, вызываемый клиентом.

Добавление сервиса в Application Object Tree (AOT)

  1. Создайте новый объект Service.
  2. Создайте новый сервис:
    1. Назовите его (например, MyWebServiceService).
    2. В поле Class укажите созданный класс MyWebService.
  3. В разделе Operations добавьте метод processRequest.

Создание Service Group

Service Group позволяет развернуть сервис и сделать его доступным для вызова.

  1. Создайте новый Service Group.
  2. Создайте новую группу:
    1. Дайте имя, например, MyWebServiceGroup.
  3. Добавьте в группу созданный сервис (MyWebServiceService).
  4. Разверните группу:
    1. Нажмите правой кнопкой мыши на группе.
    2. Выберите Deploy Service Group.

После развертывания сервис станет доступен по URL.

Тестирование веб-сервиса

  1. Откройте URL веб-сервиса в браузере или используйте инструмент вроде SoapUI.
  2. URL имеет вид: https://[server]:[port]/soap/services/[ServiceGroupName]
  3. Отправьте тестовый запрос в формате SOAP или JSON.

Тестирование через SoapUI

  1. Откройте SoapUI.
  2. Создайте новый проект:
    1. В меню выберите File → New SOAP Project.
    2. В поле Project Name введите название проекта (например, MyWebServiceTest).
    3. В поле Initial WSDL вставьте URL вашего WSDL (например, https://[server]:[port]/soap/services/MyWebServiceGroup?wsdl).
    4. Нажмите OK.
  3. SoapUI автоматически загрузит описание сервиса и сгенерирует список доступных методов.
  4. Выбор метода для тестирования
    1. В дереве проекта откройте узел, соответствующий вашему сервису.
    2. Найдите метод, который хотите протестировать (например, processRequest).
    3. Дважды кликните по методу, чтобы открыть окно запроса.
  5.  Настройка SOAP-запроса
    1. В открывшемся окне SoapUI будет сгенерирован шаблон SOAP-запроса.
    2. Заполните тело запроса, указав входные данные для Data Contract.
  6. Отправка запроса
    1. В верхнем меню нажмите Run (зеленая кнопка с треугольником).
    2. SoapUI отправит запрос на сервер.
  7. Анализ ответа
    1. Если запрос успешен, вы получите SOAP-ответ с результатом выполнения метода.
    2. Если произошла ошибка, проверьте:
      1. Корректность WSDL-адреса.
      2. Настройки безопасности в Dynamics 365 F&O (например, разрешение доступа к сервису для текущего пользователя).
  8. Отладка и исправление ошибок
    1. Если сервис не отвечает:
      1. Проверьте, запущен ли IIS на сервере.
      2. Убедитесь, что сервис развернут корректно.
    2. Если появляется ошибка авторизации:
      1. Включите аутентификацию через SOAP-заголовки.
      2. Добавьте учетные данные в Request Properties → Authentication.
  9. Тестирование разных сценариев
    1. Измените входные данные в запросе для проверки разных случаев.
    2. Убедитесь, что ваш веб-сервис возвращает корректные ответы для всех тестовых сценариев.

Пример SOAP-запроса:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:svc="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <svc:processRequest>
         <!-- Data Contract -->
         <svc:_contract>
            <svc:parmInputData>Test Data</svc:parmInputData>
         </svc:_contract>
      </svc:processRequest>
   </soapenv:Body>
</soapenv:Envelope>

Объяснение

  • <svc:processRequest> — имя метода.
  • <svc:_contract> — объект Data Contract.
  • <svc:parmInputData> — входной параметр, соответствующий вашему контракту.

Пример успешного ответа

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <processRequestResponse xmlns="http://tempuri.org/">
         <return>Processed data: Test Data</return>
      </processRequestResponse>
   </soapenv:Body>
</soapenv:Envelope>

Теперь ваш веб-сервис готов для использования внешними системами!

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar