Вы находитесь на странице: 1из 19

MVTS II

Протокол администрирования из внешних


приложений

© 2013г. МФИ Софт


Тип документа: Руководство оператора
Дата выпуска: 30.1.2013

Copyright © 2013 МФИ Софт


Все права сохраняются за правообладателем.

МФИ Софт оставляет за собой право вносить изменения в содержащуюся в данном


документе информацию без предварительного уведомления.

ИНФОРМАЦИЯ О ПРАВЕ СОБСТВЕННОСТИ

Информация, содержащаяся в данном документе, является собственностью МФИ Софт.


Никакая часть этого документа не может быть воспроизведена или заимствована в какой бы
то ни было форме или каким- либо способом – в графическом, электронном виде или
механическим путем, включая фотокопирование, запись, в том числе и на магнитные
носители, или любые другие устройства, предназначенные для хранения информации – без
письменного разрешения МФИ Софт. Подобное разрешение не может быть выдано третьей
стороной, будь то организация или частное лицо.
Содержание
1 ОБЩИЕ СВЕДЕНИЯ ...............................................................................................................................4
1.1 АВТОРИЗАЦИЯ.......................................................................................................................................4
1.2 ИДЕНТИФИКАЦИЯ ТАБЛИЦ И ПРОЦЕДУР ...............................................................................................4
1.3 ТИПЫ ПЕРЕДАВАЕМЫХ ДАННЫХ ..........................................................................................................5
1.3.1 Column ..........................................................................................................................................5
1.3.2 Row ................................................................................................................................................5
1.3.3 Rowset ...........................................................................................................................................5
1.3.4 Sort ................................................................................................................................................6
1.3.5 Filter ..............................................................................................................................................6
1.3.6 Available_values............................................................................................................................7
1.3.7 Column_desc .................................................................................................................................7
2 ДОСТУПНЫЕ ФУНКЦИИ СЕРВИСА ................................................................................................9
2.1 ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ............................................................................................................9
2.1.1 getTableByTitle ..............................................................................................................................9
2.1.2 describeColumns ...........................................................................................................................9
2.1.3 getColumnLookup........................................................................................................................10
2.2 ВЫБОРКА ЗАПИСЕЙ .............................................................................................................................10
2.3 ПОДСЧЕТ КОЛИЧЕСТВА ЗАПИСЕЙ .......................................................................................................10
2.4 ВСТАВКА ЗАПИСЕЙ .............................................................................................................................10
2.5 ИЗМЕНЕНИЕ ЗАПИСЕЙ .........................................................................................................................11
2.6 УДАЛЕНИЕ ЗАПИСЕЙ ...........................................................................................................................11
3 ОПИСАНИЕ ОШИБОК ........................................................................................................................12
4 ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ WEB-СЕРВИСА .........................................................................13
4.1 ВЫБОРКА ДАННЫХ ИЗ ТАБЛИЦЫ .........................................................................................................13
5 SOAP_SERVER.WSDL ...........................................................................................................................15

3
1 ОБЩИЕ СВЕДЕНИЯ
Протокол администрирования из внешних приложений – это прикладной
программный интерфейс (API-интерфейс), предназначенный для получения
информации о текущих настройках MVTS II и их изменения через запросы,
направляемые к web-серверу MVTS II по протоколу SOAP из внешнего приложения.
Для доступа к web-сервису, реализующему программный интерфейс, необходимо
использовать запрос вида https://your_domain/service/?{proto}. В настоящий момент
можно использовать только протокол SOAP, для этого подстроку proto нужно
заменить на ключевое слово soap.
Интерфейс описывается с помощью WSDL 1.1. (файл описания см. раздел 5)
C помощью интерфейса можно осуществлять следующие операции:
1. Выборка записей из БД;
2. Подсчет количества записей в БД;
3. Вставка записей в БД;
4. Изменение записей в БД;
5. Удаление записей из БД;
6. Осуществление вспомогательных операций, требующихся для более удобной
обработки данных БД.

1.1 АВТОРИЗАЦИЯ
Учетные данные клиента для аутентификации и авторизации должны предоставляться
при каждом запросе к сервису.
Для протокола SOAP необходимо в заголовок каждого пакета добавлять имя учетной
записи клиента и ее пароль. См. пример на языке PHP:
$client = new SoapClient(
'https://rtu2/mvtspro/extensions/service/?wsdl',
array(
'timeout' => 1000
)
);
$headers = array();
$headers[] = new
SoapHeader('http://mfisoft.ru/auth','Login','admin');
$headers[] = new
SoapHeader('http://mfisoft.ru/auth','Password','admin');
$client->__setSoapHeaders($headers);

1.2 ИДЕНТИФИКАЦИЯ ТАБЛИЦ И ПРОЦЕДУР


При выполнении различных операций с таблицами обращение к ним происходит по
специальному идентификатору (ID), уникальному для каждой таблицы. Для того
чтобы узнать ID таблицы, необходимо воспользоваться функцией getTableByTitle (см
раздел 2).

4
1.3 ТИПЫ ПЕРЕДАВАЕМЫХ ДАННЫХ
Наряду с основными типами данных (int, string и др.) при использовании сервиса
применяются и специальные типы, описанные ниже.

1.3.1 COLUMN
Тип COLUMN представляет собой описание ассоциативный массив, с двумя
элементами: name - ID колонки, и value – значение колонки.
Array(
‘name’ => ‘column1’,
‘value’ => ‘value1’
)

1.3.2 ROW
Тип ROW используется для передачи записей таблиц, а так же для передачи
параметров процедурам. Представляет собой ассоциативный массив колонок (типа
COLUMN).
Пример:
Array(
Array(
‘name’ => ‘column1’,
‘value’ => ‘value1’
),
Array(
‘name’ => ‘column2’,
‘value’ => ‘value2’
),
)

1.3.3 ROWSET
Тип ROWSET используется для передачи набора записей. Представляет собой массив
элементов типа ROW.
Пример:
Array(
Array(
Array(
‘name’ => ‘column1’,
‘value’ => ‘value1’
),
Array(
‘name’ => ‘column2’,
‘value’ => ‘value2’
)
),
Array(
Array(
‘name’ => ‘column1’,
‘value’ => ‘value1’
),
Array(
‘name’ => ‘column2’,
‘value’ => ‘value2’

5
)
)
)

1.3.4 SORT
Тип SORT используется для передачи параметров сортировки. Данный тип
представляет собой массив из элементов сортировки, которые, в свою очередь,
являются ассоциативными массивами, состоящими из двух элементов: названия
колонки, и способа сортировки. Существует два способа сортировки: по возрастанию
(asc) и по убыванию (desc).
Пример:
Array(
Array(
‘column’ => ‘num_call’,
‘dir’ => ‘desc’
),
Array(
‘column’ => ‘contr_hi’,
‘dir’ => ‘asc’
)
)

1.3.5 FILTER
Тип FILTER используется для передачи фильтров (параметр p_filter в функциях). Тип
представляет собой ассоциативный массив, структура которого зависит от вида
фильтра.
Первый вид фильтра – условие. Массив FILTER при этом имеет следующую
структуру:
Array(
‘type’ => ‘cond’,
‘column’ => ‘num_call’,
‘operator’ => ‘>’,
‘value’ => ‘1’
)

‘type’ – вид фильтра, значение cond означает, что вид – условие;


‘column’ – название колонки, по которой происходит фильтрация;
‘operator’ – условный оператор. Может принимать следующие значения: '=',
'<>', '<', ‘<=', '>', '>=', 'like', 'not like', 'regexp'.
‘value’ – значение, с которым сравнивается значение колонки.
Таким образом, пример выше означает следующее условие: num_call > 1.
Второй (сложный) вид фильтра – объединение условий или других сложных фильтров.
Данный тип применяется, если необходимо объединить несколько фильтров первого
или второго вида. Массив FILTER при этом имеет следующую структуру:
Array(
‘type’ => ‘agg’,
‘operator’ => ‘and’,
‘childs’ => Array(

6
Array(
‘type’ => ‘cond’,
‘column’ => ‘contr_hi’,
‘operator’ => ‘like’,
‘value’ => ‘01%’
),
Array(
‘type’ => ‘cond’,
‘column’ => ‘contr_desc’,
‘operator’ => ‘=’,
‘value’ => ‘Company’
)
)
)
)

‘type’ – вид фильтра, значение agg означает, что вид – объединение условий;
‘operator’ – оператор объединяющий условия. Может принимать следующие
значения: 'and', 'or', 'not_and', ‘not_or';
‘childs’ – параметр представляет собой массив других фильтров первого или
второго вида.
Таким образом, в примере выше получается фильтр: (contr_hi like ‘01%’ )
and (contr_desc = Company ).

1.3.6 AVAILABLE_VALUES
Тип используется для передачи возможных значений колонки. Представляет собой
массив ассоциативных массивов с двумя ключами“k” и “v”:
Array(
Array(
‘k’ => ‘1’,
‘v’ => ‘Yes’
)
)

‘k’ – доступное значение колонки;


‘v’ – строка, отображаемая в GUI.

1.3.7 COLUMN_DESC
Тип COLUMN_DESC используется для передачи описания колонок. Данный тип
представляет собой ассоциативный массив со следующей структурой:
Array(
column_name
not_null
data_type
ctl_type
have_lookup
initial_value
data_mask
title
verify_pattern
transform_pattern
min_val

7
max_val
min_val_exclude
max_val_exclude
delimiter
min_len
max_len
action
character_maximum_length
)
На языке PHP все значения в массиве имеют тип string.
‘column_name’ – внутреннее имя колонки, использующееся для идентификации
колонок;
‘not_null’ – параметр должен иметь значение “true”, если колонка не может
содержать значение NULL;
‘data_type’ – тип данных колонки;
‘ctl_type’ – имя органа управления, который используется в GUI для данной
колонки;
‘have_lookup’ – параметр принимает значение “true”, если колонка имеет
предопределенный список возможных значений, который можно получить функцией
getColumnLookup;
‘initital_value’ – значение по умолчанию, которое получает данная колонка
при добавлении новой записи в GUI;
‘data_mask’ – маска даты, в которой хранится дата в БД (например, YMDhms, где
Y – год, 4 цифры, M – месяц, 2 цифры, D – день, 2 цифры, h – час, 2 цифры, m –
минуты, 2 цифры, s – секунды, 2 цифры);
‘title’ – название колонки, отображающееся в GUI;
‘verify_pattern’ – регулярное выражение для проверки данных на соответствие
списку возможных значений;
‘transform_pattern’ – регулярное выражение для трансформации данных,
введенных через web-интерфейс;
‘min_val’ – минимальное числовое значение колонки;
‘max_val’ – максимальное числовое значение колонки;
‘min_val_exclude’ – параметр равен “true”, если необходимо исключать
минимальное значение из списка возможных;
‘max_val_exclude’ – параметр равен “true”, если необходимо исключать
максимальное значение из списка возможных;
‘delimiter’ – разделитель списка значений в колонке;
‘min_len’ – минимальная длина поля (то есть, минимальное количество знаков,
которые могут содержаться в поле);
‘max_len’ – максимальная длина поля (то есть, максимальное количество знаков,
которые могут содержаться в поле);
‘action’ – права на колонку. Задаются битовой маской, представленной десятичным
числом, где 1 означает права на просмотр, 2 – права на обновление, 4 – права на
добавление данных;
‘character_maximum_length’ - максимальная длина поля, заданная на уровне
БД.

8
2 ДОСТУПНЫЕ ФУНКЦИИ СЕРВИСА
2.1 ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ
2.1.1 GETTABLEBYTITLE

getTableByTitle (p_title) – функция принимает название таблицы в web-


интерфейсе и возвращает ID первой таблицы с подобным названием.
p_title (тип string) – название таблицы или процедуры в GUI. Название должно
соответствовать языку для пользователя Системы, от имени которого выполняются
действия.
Функция возвращает идентификатор в виде строки.
Пример:
Запрос:
getTableByTitle (‘Пользователи’)
Ответ:
02.2102

Примечание: В запросах следует использовать название, указанное в заголовке


таблицы, а не в дереве объектов на левой панели интерфейса (в некоторых случаях они
могут различаться, см. рис. ниже).

2.1.2 DESCRIBECOLUMNS

describeColumns (p_table_hi) – функция принимает ID таблицы и возвращает


массив структур COLUMN_DESC для всех колонок в данной таблице.
p_table_hi – идентификатор таблицы.
Данная функция используется исключительно для получения имен колонок и другой
специфической информации при написании внешнего приложения.

9
2.1.3 GETCOLUMNLOOKUP

GetColumnLookup ( p_table_hi, p_column_name ) – функция возвращает


список возможных значений колонки с названиями, используемыми в GUI.
p_table_hi (тип string) – идентификатор таблицы.
p_column_name (тип string) – внутреннее имя колонки, для которой возвращаются
значения.
Функция возвращает доступные значения в массиве с элементами типа
AVAILABLE_VALUES. Если ограничений на доступные значения для колонки нет, то
возвращается пустой массив.

2.2 ВЫБОРКА ЗАПИСЕЙ


selectRowset ( p_table_hi, p_filter, p_sort, p_limit, p_offset ) – функция
возвращает выборку строк из таблицы с применением заданного фильтра и способа
сортировки.
p_table_hi (тип string) – ID таблицы, из которой ведется выборка.
p_filter (тип filter) – фильтр, накладываемый на таблицу (по умолчанию равен NULL
и выборка производится без применения фильтра).
p_sort (тип sort) – способ сортировки, заданный для таблицы (по умолчанию равен
NULL и сортировка не производится).
p_limit (тип int) – максимальное количество отобранных записей (по умолчанию
равен NULL, что означает отсутствие ограничений).
p_offset (тип int) – смещение начальной строки, с которой начинается выборка (по
умолчанию равно NULL, что означает смещение равно 0 и начинается с первой
строки).
Функция возвращает набор строк в структуре типа ROWSET.
Примечание: Чтобы параметры p_limit и p_offset были применены для данного
запроса необходимо, чтобы значение ни одного из них не было равно NULL.
Пример корректного запроса:
selectRowset(table_hi, filter, sort, 1, 0).
Пример некорректного запроса:
selectRowset(table_hi, filter, sort, 1) и selectRowset(table_hi, filter, sort, 1, NULL)

2.3 ПОДСЧЕТ КОЛИЧЕСТВА ЗАПИСЕЙ


countRowset (p_table_hi, p_filter ) – функция, возвращающая количество строк
из таблицы с применением заданного фильтра.
p_table_hi (тип string) – идентификатор таблицы, в которой ведется подсчет.
p_filter (тип filter) – фильтр, накладываемый на таблицу (по умолчанию равен NULL
и подсчет производится без наложения фильтра).
Функция возвращает количество строк, удовлетворяющих фильтру.

2.4 ВСТАВКА ЗАПИСЕЙ


insertRowset (p_table_hi, p_rowset ) – функция вставляет набор строк в
таблицу.

10
p_table_hi (тип string) – идентификатор таблицы, в которую ведется вставка.
p_rowset (тип rowset) – набор строк, которые будут вставлены (см. 1.3.3).
Функция возвращает количество вставленных строк.

2.5 ИЗМЕНЕНИЕ ЗАПИСЕЙ


updateRowset ( p_table_hi, p_rowset, p_filter ) – функция изменяет записи в
таблице, отобранные по фильтру либо по первичным ключам из переданного набора
строк.
p_table_hi (тип string) – ID редактируемой таблицы.
p_rowset (тип rowset) – набор строк, которые будут изменены.
p_filter (тип filter) – фильтр, накладываемый на таблицу.
Если p_filter равен NULL, то производится поиск первичных ключей в параметре
p_rowset, в таблице по первичным ключам находятся строки, подлежащие
редактированию, и значения колонок в данных строках изменяются согласно
значениям переданным в параметре p_rowset.
Если p_filter не равен NULL, то производится отбор строк, удовлетворяющих фильтру
p_filter, и отобранные строки обновляются согласно первой строке параметра
p_rowset.
Функция возвращает количество измененных строк.

2.6 УДАЛЕНИЕ ЗАПИСЕЙ


deleteRowset ( p_table_hi, p_rowset, p_filter ) – функция удаляет записи из
таблице по примененному фильтру или по первичным ключам из набора строк.
p_table_hi (тип string) – идентификатор таблицы, из которой будут удалены записи.
p_rowset (тип rowset) – набор строк, которые будут удалены.
p_filter (тип filter) – фильтр, накладываемый на таблицу.
Если p_filter равен NULL, то производится поиск первичных ключей в параметре
p_rowset и из таблицы удаляются строки, соответствующие этим первичным ключам.
Если p_filter не равен NULL, то удаляются строки соответствующие фильтру,
заданному параметром p_filter.
Функция возвращает количество удаленных строк.

11
3 ОПИСАНИЕ ОШИБОК
Для передачи ошибок используется объект SOAP Fault
http://www.w3schools.com/SOAP/soap_fault.asp. Список возможных ошибок включает в
себя ошибки при работе с GUI, ошибки, связанные с неправильным синтаксисом при
создании фильтра и способа сортировки, а также ошибки при указании неправильных
авторизационных данных.

12
4 ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ WEB-СЕРВИСА
4.1 ВЫБОРКА ДАННЫХ ИЗ ТАБЛИЦЫ
В примере делается выборка данных из таблицы зон. Выбираются только зоны с
идентификаторами, начинающимися на test. Для этого необходимо:
1. Создать SOAP-соединение и добавить в заголовки запросов авторизационную
информацию:
$client = new SoapClient(
'https://your_domain/service/?wsdl'
);
$headers = array();
$headers[] = new
SoapHeader('http://mfisoft.ru/auth','Login','admin');
$headers[] = new
SoapHeader('http://mfisoft.ru/auth','Password','admin');
$client->__setSoapHeaders($headers);

2. Получить идентификатор таблицы и имена колонок “Название” и “Описание”.


$table_hi = $client->getTableByTitle('Зоны');

Значения переменной $table_hi будет равно «02.2209.01». Рекомендуется сохранить


идентификатор таблицы для дальнейшего использования. Частый запрос ID с
помощью функции getTableByTitle() не рекомендуется, так как это может негативно
сказаться на быстродействии внешнего приложения.
3. Получить данные о колонках и вывести их на экран.
print_r($client->describeColumns($table_hi));

Будет получено подробное описание колонок:


Array
(
[0] => Array
(
[column_name] => zone_id
[not_null] => 1
[data_type] => S
[ctl_type] => TEXTBOX
[have_lookup] => 0
[title] => Название
[action] => 5
[character_maximum_length] => 100
)

[1] => Array


(
[column_name] => description
[data_type] => S
[ctl_type] => TEXTAREA
[have_lookup] => 0
[title] => Описание
[action] => 7

13
[character_maximum_length] => 1000
)

Оно означает, что в таблице имеется две колонки с именами zone_id и description.
4. Создать фильтр для выборки:
$filter = Array(
‘type’ => ‘agg’,
‘operator’ => ‘and’,
‘childs’ => Array(
Array(
‘type’ => ‘cond’,
‘column’ => ‘zone_id’,
‘operator’ => ‘like’,
‘value’ => ‘test%’
)
)
)

Задать способ сортировки:


$sort = Array(
Array(
‘column’ => ‘description’,
‘dir’ => ‘asc’
)
)

5. Произвести выборку первых 10-ти записей, начиная со второй (нумерация


начинается с нуля), с использованием фильтра и способа сортировки:
$rowset = $client->selectRowset($table_hi,$filter,$sort,10,1);
print_r($rowset);
Таким образом, в переменной $rowset будет получена желаемая выборка, а на экран
выведется:
Array
(
[0] => Array
(
[0] => Array
(
[name] => zode_id
[value] => Test zone
)

[1] => Array


(
[name] => description
[value] => Тестовая зона
)
)

14
5 SOAP_SERVER.WSDL
WSDL-документ, содержащий необходимые спецификации для клиентской части,
приведен ниже и также доступен по адресу https://your_domain/service/?wsdl.
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://xml.apache.org/xml-soap"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:ns3="http://mfisoft.ru/voip/service/soap"
xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/" name="mvtsii-api"
targetNamespace="http://mfisoft.ru/voip/service/soap">
<wsdl:types>
<s:schema targetNamespace="http://mfisoft.ru/voip/service/soap">

<s:complexType name="rowset">
<s:complexContent>
<s:restriction base="ns:Array">
<s:sequence>
<s:element name="item" type="ns3:row"
maxOccurs="unbounded"/>
</s:sequence>
<s:attribute ref="ns:arrayType"
arrayType="ns3:row[]" />
</s:restriction>
</s:complexContent>
</s:complexType>

<s:complexType name="row">
<s:complexContent>
<s:restriction base="ns:Array">
<s:sequence>
<s:element name="item" type="ns3:column"
maxOccurs="unbounded"/>
</s:sequence>
<s:attribute ref="ns:arrayType"
arrayType="ns3:column[]" />
</s:restriction>
</s:complexContent>
</s:complexType>

<s:complexType name="column">
<s:all>
<s:element name="name" type="s:string"/>
<s:element name="value" type="s:string"/>
</s:all>
</s:complexType>

<s:complexType name="sort">
<s:complexContent>
<s:restriction base="ns:Array">
<s:sequence>
<s:element name="item"
type="ns3:sort_item" maxOccurs="unbounded"/>
</s:sequence>
<s:attribute ref="ns:arrayType"
arrayType="ns3:sort_item[]" />
</s:restriction>
</s:complexContent>
</s:complexType>

<s:complexType name="sort_item">
<s:all>
<s:element name="column" type="s:string"/>
<s:element name="dir" type="ns3:order_type"/>
</s:all>
</s:complexType>

<s:simpleType name="order_type">
<s:restriction base="s:string">
<s:enumeration value="asc"/>

15
<s:enumeration value="desc"/>
</s:restriction>
</s:simpleType>

<s:complexType name="filter_childs_arr">
<s:complexContent>
<s:restriction base="ns:Array">
<s:sequence>
<s:element name="item" type="ns3:filter"
maxOccurs="unbounded"/>
</s:sequence>
<s:attribute ref="ns:arrayType"
arrayType="ns3:filter[]" />
</s:restriction>
</s:complexContent>
</s:complexType>

<s:complexType name="filter">
<s:all>
<s:element name="type" type="s:string"/>
<s:element name="column" type="s:string"
nillable="true"/>
<s:element name="operator" type="s:string"
nillable="true"/>
<s:element name="value" type="s:string"
nillable="true"/>
<s:element name="childs" type="ns3:filter_childs_arr"
nillable="true"/>
</s:all>
</s:complexType>

</s:schema>
</wsdl:types>
<message name="insertRowsetRequest">
<part name="p_table_hi" type="s:string"/>
<part name="p_rowset" type="ns3:rowset"/>
</message>
<message name="insertRowsetResponse">
<part name="result" type="s:integer"/>
</message>
<message name="updateRowsetRequest">
<part name="p_table_hi" type="s:string"/>
<part name="p_rowset" type="ns3:rowset"/>
<part name="p_filter" type="ns3:filter"/>
</message>
<message name="updateRowsetResponse">
<part name="result" type="s:integer"/>
</message>
<message name="deleteRowsetRequest">
<part name="p_table_hi" type="s:string"/>
<part name="p_rowset" type="ns3:rowset"/>
<part name="p_filter" type="ns3:filter"/>
</message>
<message name="deleteRowsetResponse">
<part name="result" type="s:integer"/>
</message>
<message name="selectRowsetRequest">
<part name="p_table_hi" type="s:string"/>
<part name="p_filter" type="ns3:filter"/>
<part name="p_sort" type="ns3:sort"/>
<part name="p_limit" type="s:integer"/>
<part name="p_offset" type="s:integer"/>
</message>
<message name="selectRowsetResponse">
<part name="result" type="s:anyType"/>
</message>
<message name="countRowsetRequest">
<part name="p_table_hi" type="s:string"/>
<part name="p_filter" type="ns3:filter"/>
</message>
<message name="countRowsetResponse">
<part name="result" type="s:integer"/>
</message>
<message name="getTableByTitleRequest">

16
<part name="p_title" type="s:string"/>
</message>
<message name="getTableByTitleResponse">
<part name="result" type="s:string"/>
</message>
<message name="describeColumnsRequest">
<part name="p_table_hi" type="s:string"/>
</message>
<message name="describeColumnsResponse">
<part name="result" type="s:anyType"/>
</message>
<message name="getColumnLookupRequest">
<part name="p_table_hi" type="s:string"/>
<part name="p_column_nm" type="s:string"/>
</message>
<message name="getColumnLookupResponse">
<part name="result" type="s:anyType"/>
</message>
<portType name="servicePortType">
<operation name="insertRowset">
<input message="ns3:insertRowsetRequest"/>
<output message="ns3:insertRowsetResponse"/>
</operation>
<operation name="updateRowset">
<input message="ns3:updateRowsetRequest"/>
<output message="ns3:updateRowsetResponse"/>
</operation>
<operation name="deleteRowset">
<input message="ns3:deleteRowsetRequest"/>
<output message="ns3:deleteRowsetResponse"/>
</operation>
<operation name="selectRowset">
<input message="ns3:selectRowsetRequest"/>
<output message="ns3:selectRowsetResponse"/>
</operation>
<operation name="countRowset">
<input message="ns3:countRowsetRequest"/>
<output message="ns3:countRowsetResponse"/>
</operation>
<operation name="getTableByTitle">
<input message="ns3:getTableByTitleRequest"/>
<output message="ns3:getTableByTitleResponse"/>
</operation>
<operation name="describeColumns">
<input message="ns3:describeColumnsRequest"/>
<output message="ns3:describeColumnsResponse"/>
</operation>
<operation name="getColumnLookup">
<input message="ns3:getColumnLookupRequest"/>
<output message="ns3:getColumnLookupResponse"/>
</operation>
</portType>
<binding name="servicePortBinding" type="ns3:servicePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="insertRowset">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
<operation name="updateRowset">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>

17
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
<operation name="deleteRowset">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
<operation name="selectRowset">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
<operation name="countRowset">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
<operation name="getTableByTitle">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
<operation name="describeColumns">
<soap:operation soapAction=""/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
<operation name="getColumnLookup">
<soap:operation soapAction=""/>
<input>

18
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</input>
<output>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://mfisoft.ru/soap"/>
</output>
</operation>
</binding>
<service name="Service">
<port name="ServicePortType" binding="ns3:servicePortBinding">
<soap:address location=":SERVICE_URL"/>
</port>
</service>
</definitions>

Подстроку :SERVICE_URL необходимо заменить на адрес, на котором запущен


сервис, например, https://your_domain/service/?soap.

19

Оценить