Работа с Web-сервисами Terrasoft из внешних приложений
В этой статье я расскажу принципы работы с веб-сервисами Terrasoft из внешних приложений. С помощью этих механизмов можно реализовать различные интеграционные задачи с любой внешней системой.
Работать с Web-сервисами из сторонних приложений можно двумя способами, все зависит от цели использования и конкретного языка программирования:
1. Работа через COM-объекты Terrasoft
2. Работа с Web-сервисами напрямую
Работа через COM-объекты
Первый вариант наименее трудоемкий и более удобный, но требует, чтобы на клиентской машине были зарегистрированы библиотеки Terrasoft (для использования COM-объектов). При этом вся работа с Web-сервисами будет выполняться COM-объектами Terrasoft, предоставляя доступ к данным и объектам через объектную модель платформы Terrasoft: IDataset, ISelectQuery и т.д.
Для подключения программно нужно выполнить следующий код (пример на Jscript, но это можно реализовать на любом языке, который работает с COM-объектами):
WSConnector = new ActiveXObject('TSDskObjectLibrary.DskConnector'); // Для версий 3.4.0+ объект создается ActiveXObject('TSObjectLibrary.Connector')
var WSConfiguration = new ActiveXObject('TSObjectLibrary.Configuration');
WSConfiguration.DBExecutorTypeCode = 'WebServices';
// Кэшироование созданного соединения
Connector.Attributes('WSConnector') = WSConnector;
// Установка строки соедения и название конфигурации настроенной на сервере
WSConfiguration.SetConnectionString(
'"URL=http://192.168.227.128/TSWebServicesServerLibrary.dll/soap/IServer"' +
',"ConfigurationName=Dev332"');
// Открытие конфигурации
var IsConnected = WSConnector.OpenConfiguration(
WSConfiguration,
1, // Тип аутентификации: 0 - Windows Authentication, 1 - Server
'ddd', // Имя пользователя
''); // Пароль
После успешного подключения можем обращаться к любым объектам, получать данные и т.д. Например получение данных о контрагентах:
var AccountDataset = WSConnector.Services.GetSingleItemByUSI('ds_Account');
// Подготовка датасета: закрытие и очистка фильтров
AccountDataset.Close();
EnableDatasetFilters(AccountDataset, false);
// Наложение фильтра по ID текущей записи
ApplyDatasetFilter(AccountDataset, 'ID', dlData.Dataset('ID'), true);
// Открытие датасета
AccountDataset.Open();
// Считывание данных
if (AccountDataset.IsEOF) {
var Value = '(нет данных)';
edtWSName.Value = Value;
edtWSOfficialName.Value = Value;
edtWSCode.Value = Value;
} else {
edtWSName.Value = AccountDataset.ValAsStr('Name');
edtWSOfficialName.Value = AccountDataset.ValAsStr('OfficialAccountName');
edtWSCode.Value = AccountDataset.ValAsStr('Code');
}
// Закрытие датасета
AccountDataset.Close();
Во вложении полный пример работы с Web-сервисами на Jscript, используя COM-объекты.
Работа с Web-сервисами напрямую
Этот тип работы сложнее, т.к. все запросы к Web-сервисам нужно посылать самостоятельно, а также самому обрабатывать ответ от сервера. При этом не используются COM-объекты Terrasoft, соответственно не нужно устанавливать и регистрировать библиотеки Terrasoft на каждом клиентском компьютере, откуда будут запрашиваться веб-сервисы.
Запросы Web-сервисам можно отправлять исходя из их интерфейса (WSDL) – описания всех методов с параметрами.
Для упрощенной разработки программ для работы с Web-сервисами в некоторых IDE, например Visual Studio, предусмотрен импорт WSDL (Add WebService Reference), при этом сама IDE генерирует оберточные классы для работы с Web-сервисами. Вызывая методы такого класса вы будете упрощенно вызывать соответствующие методы веб-сервиса.
Упрощение заключается в том, что для вызова метода Web-сервиса нужно отправить полный XML запрос, а с помощью оберточных классов – просто вызвать соответствующий метод с параметрами.
Пример на C# :
ws.IServer sc = new ws.ServerClient(); // ws.IServer – оберточный класс для работы с Web-сервисами Terrasoft
ws.OpenConfigurationRequest rqOpenConfiguration = new ws.OpenConfigurationRequest(); // Запросы для открытия конфигурации
ws.OpenConfigurationResponse rsOpenConfiguration = new ws.OpenConfigurationResponse();
// Открытие конфигурации
rqOpenConfiguration.ACompressionLevel = 0; //Without compression (zip)
rqOpenConfiguration.AConfigurationName = Configuration;
rqOpenConfiguration.ADBExecutorTypeCode = "MSSQL";
rqOpenConfiguration.AUserName = UserName;
rqOpenConfiguration.AUserPassword = Password;
rsOpenConfiguration = sc.OpenConfiguration(rqOpenConfiguration);
При этом передачу данных, разбивку больших данных на пакеты, разбор ответа сервера и т.д. нужно реализовывать самостоятельно.
Во вложении полный пример работы с Web-сервисами на C#.
Отдельное спасибо Александру Кравчуку за предоставленные примеры.
Приятной разработки:)
Александр, здравствуйте.
Подскажите:
1) Доступна ли настройка веб сервиса на версии Terrasoft CRM 3.3.2.X ?
2) Приходилось ли применять какой то из способов на практике?
Здравствуйте, Анна!
1. Возможность настройки веб-сервиса на версии Terrasoft CRM 3.3.2 доступна.
2. Приведенные примеры взяты с реальных практических решений.
Простите, а нельзя ли прислать на почту neveryes@bk.ru полный пример работы с Web-сервисами на C#.
Потому что вложения как такового нет((