C

Данный пример описывает использование DataService - низкоуровневого сервиса Devprom SOAP API, позволяющего выполнять любые действия над данными в Devprom, которые разрешены правами доступа текущего пользователя.


Devprom SOAP API по-умолчанию доступен в любой поставке Devprom, независимо от ее редакции. Перечень поддерживаемых сервисов доступен в документации программных интерфейсов.


Пример предназначен для того, чтобы сформировать у вас базовое понимание принципов использования Devprom SOAP API. В формате теста (C#, nUnit) мы создадим нового пользователя в Devprom с заданным атрибутами и проверим, что этот пользователь может войти в систему.


 using DEVPROM.WebTest.Core;
 using NUnit.Framework;
 using DEVPROM.WebTest.devprom.api.security;
 using DEVPROM.WebTest.devprom.api.model;
 
 namespace DEVPROM.WebTest.Api
 {
   [TestFixture]
   public class ApiUser
   {
     [Test]
     public void TestCreateUser()
     {
       // login under administrator
       var securityService = new SecurityService() { Url = TestUtils.GetAppConfigurationItem("HostUrl") + "/api/securityservice" };
       var token = securityService.login(TestHelper.appUserName, TestHelper.appUserPassword, null);
 
       // low-level API data service
       var dataService = new DataService() { Url = TestUtils.GetAppConfigurationItem("HostUrl") + "/api/dataservice" };
 
       // create new user
       var testUser = new user()
       {
         Caption = "Api Test User",
         Description = "",
         Email = "apitestuser@devprom.ru",
         IsAdmin = "N", // Y or N
         Login = "ApiUser",
         Skype = "api_test",
         Phone = "+7910xxxxxxx",
         Password = "testpass"
       };
 
       var createdUser = dataService.userRemoteAdd(token.Key, testUser);
 
       // assert user created
       Assert.IsNotNull(createdUser.Id); // now we have user ID
       Assert.AreEqual(testUser.Caption, createdUser.Caption);
       Assert.AreEqual(testUser.Email, createdUser.Email);
 
       // assert user can login
       token = securityService.login(testUser.Login, testUser.Password, null);
       Assert.IsNotNullOrEmpty(token.Key, "Can't login under new user");
     }
   }
 }

Пространства имен (namespaces) DEVPROM.WebTest.devprom.api.security и DEVPROM.WebTest.devprom.api.model были автоматически созданы на основе WSDL http://localhost/api/securityservice?wsdl и http://localhost/api/dataservice?wsdl соответственно (Visual Studio - Project - Add Web Reference).

PHP

Создание нового пользователя:

<?php
 $security = new SoapClient(
     'https://demo.myalm.ru/api/securityservice?wsdl',
     array(
         'soap_version'=>SOAP_1_1,
         'cache_wsdl' => WSDL_CACHE_NONE,
         'trace'=>true
     )
 );
 $result = $security->login(
     array(
         'username' => '***',
         'userpass' => '***',
         'project' => '')
 );
 $token = $result->return;
 
 $data = new SoapClient(
     'https://demo.myalm.ru/api/dataservice?wsdl',
     array(
         'soap_version'=>SOAP_1_1,
         'cache_wsdl' => WSDL_CACHE_NONE,
         'trace'=>true
     )
 );
 
 $user = $data->__soapCall('user.RemoteAdd',
     array (
         'token' => $token->Key,
         'parms' => array (
              'Caption' => 'New user',
              'Password' => 'test',
              'AskChangePassword' => 'Y',
              'Language' => 1,
              'Email' => '',
              'Login' => '',
              'Description' => '',
              'Phone' => '',
              'Photo' => '',
              'PhotoExt' => '',
              'PhotoPath' => '',
              'NotificationTrackingType' => '',
              'NotificationEmailType' => '',
              'OrderNum' => '',
              'RecordCreated' => '',
              'RecordModified' => '',
              'Id' => '',
              'GroupId' => '',
              'ClassName' => '',
              'RecordVersion' => '',
              'Url' => ''
         )
     )
 );
 
 echo $user->Id;

Создание заявки и изменение ее статуса:

 <?php
  $security = new SoapClient(
      'https://demo.myalm.ru/api/securityservice?wsdl',
      array(
          'soap_version'=>SOAP_1_1,
          'cache_wsdl' => WSDL_CACHE_NONE,
          'trace'=>true
      )
  );
  $result = $security->login(
      array(
          'username' => '*****',
          'userpass' => '****',
          'project' => '****')
  );
  $token = $result->return;
  
  $data = new SoapClient(
      'https://demo.myalm.ru/api/dataservice?wsdl',
      array(
          'soap_version'=>SOAP_1_1,
          'cache_wsdl' => WSDL_CACHE_NONE,
          'trace'=>true
      )
  );
  
  $request = $data->__soapCall('request.RemoteAdd',
      array (
          'token' => $token->Key,
          'parms' => array (
              'Caption' => 'New request',
              'Description' => 'test',
              'Environment' => '',
              'Priority' => '',
              'Estimation' => '',
              'State' => 'submitted',
              'Type' => '',
              'Function' => '',
              'Author' => '',
              'Owner' => '',
              'Project' => '',
              'SubmittedVersion' => '',
              'ClosedInVersion' => '',
              'PlannedRelease' => '',
              'LifecycleDuration' => '',
              'StartDate' => '',
              'FinishDate' => '',
              'DeliveryDate' => '',
              'Fact' => '',
              'FactTasks' => '',
              'OrderNum' => '',
              'RecordCreated' => '',
              'RecordModified' => '',
              'RecordVersion' => '',
              'Attachment' => '',
              'Tags' => '',
              'Links' => '',
              'ProjectPage' => '',
              'Question' => '',
              'DueWeeks' => '',
              'Watchers' => '',
              'Id' => '',
              'ClassName' => '',
              'Url' => ''
          )
      )
  );
  
  echo $request->Id;
 
  $request->State = 'planned';
  $request = $data->__soapCall('request.RemoteStore',
      array (
          'token' => $token->Key,
 	 'id' =>  $request->Id,
          'parms' => $request
      )
  );


Для использования SOAP API при интеграции с продуктами 1C необходимо указать альтернативный разделитель между названием сущности (класса) и его методами. Для этого в адресную строку необходимо добавить параметр delim=_ например:

https://<serverName>/api/dataservice?wsdl&style=document&use=literal&delim=_

Тогда все методы примут следующий вид: