Данный пример описывает использование 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
$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=_
Тогда все методы примут следующий вид: