|
Сторонний Веб сервис, XDTO | ☑ | ||
---|---|---|---|---|
0
Bliz
03.07.13
✎
13:24
|
Задача: есть сторонний сервис в интернете у которого прописано API команды получения данных из сервиса
Соединение и выполнение некоторых API команд происходит успешно, если в параметрах команд простые типы (Число, Дата, Булево), а если в параметрах необходимо передать Массив, или структуру то вызов не проходит. Скорей всего необходимо Объект 1с (Массив, Структуру и т.п.) перевести в Тип который ожидает сервис. ОбъектXDTO = Сериализатор.ЗаписатьXDTO(Новый Массив()); Ответ=Client.getCurrencyList("demo_api", "[email protected]", "demo",ОбъектXDTO); в первых 3 параметрах указывается информация аутентификации, а в 4 параметр надо для этой функции передать пустой массив. При этом при вызове функции выдается ошибка "Ошибка установки соответствия префикса и URI пространства имен" Видимо надо каким то образом указать, что мой массив принадлежит тому пространству имен который ожидает сервис. Не пойму как это сделать Доп. инфа: URIПространстваИмен = "urn:ddengi" Подключение к веб сервису: ОпределениеТ=Новый WSОпределения("http://www.drebedengi.ru/soap/dd.wsdl"); WSСервис=ОпределениеТ.Сервисы[0]; Client=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя); |
|||
1
Bliz
03.07.13
✎
13:27
|
Либо надо при создании параметра использовать ФабрикуXDTO которую выдает WSПрокси.
Там вот такая фабрика http://s2.hostingkartinok.com/uploads/images/2013/07/dc4753781301978e1ad90ab84d99ba61.jpg За ранее хочу сказать, что с XDTO и сервисами только пытаюсь, что то делать, поэтому возможно неправильно использую термнилагию. |
|||
2
Bliz
03.07.13
✎
13:27
|
*терминалогию.
|
|||
3
Serginio1
03.07.13
✎
14:15
|
Что типа такого
Типа такого Фабрика=Прокси.ФабрикаXDTO; ТипТаблица = Фабрика.Тип(ПространствоИмен, "Таблица"); Таблица = Фабрика.Создать(ТипТаблица); ТипСтрокаТаблицы = Фабрика.Тип(ПространствоИмен,"СтрокаТаблицы"); СтрокаТаблицы = Фабрика.Создать(ТипСтрокаТаблицы ); ОтветТаблицаЦен.СвойствоСписок.Добавить(СтрокаТаблицыЦен); или v8: Заполнение массива XDTO |
|||
4
Serginio1
03.07.13
✎
14:18
|
Фабрика=Прокси.ФабрикаXDTO;
ТипТаблица = Фабрика.Тип(ПространствоИмен, "Таблица"); Таблица = Фабрика.Создать(ТипТаблица); ТипСтрокаТаблицы = Фабрика.Тип(ПространствоИмен,"СтрокаТаблицы"); СтрокаТаблицы = Фабрика.Создать(ТипСтрокаТаблицы ); .... Заполняем поля СтрокаТаблицы Таблица.СвойствоСписок.Добавить(СтрокаТаблицыЦен); (СвойствоСписок это сойство тип СтрокаТаблицы у которой максимальное количество -1 |
|||
5
Bliz
03.07.13
✎
15:36
|
(3) если у меня у Прокси.ФабрикаXDTO;
только один пакет "http://www.w3.org/2001/XMLSchema" Получается, что в ней нету типов "Таблица" "СтрокаТаблицы" или "array" Пробовал написать вот так: ПространствоИмен="http://www.w3.org/2001/XMLSchema"; Фабрика=Client.ФабрикаXDTO; Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен, "anyType")); Объект.Добавить(ФормаXML.Элемент, ПространствоИмен, "elem",ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, "string"), "Значение Элемента")); Но выдается сообщение "Ошибка SOAP сервера: getCurrencyList: Parameter 'idList' must be an array" Если передаешь просто "anyType" "Ошибка при вызове метода объекта модели XDTO. Неверный параметр." |
|||
6
Serginio1
03.07.13
✎
15:48
|
При использовании anyType массивом он будет только когда 2 элемента
|
|||
7
Bliz
03.07.13
✎
15:51
|
Связывался с разработчиком, он говорит что этот параметр должен быть пустой, он служебный и заполнять его не надо.
Но при этом он ругается, что параметр не заполнен при вызове из 1с. |
|||
8
Bliz
03.07.13
✎
15:53
|
(6) 2 элемента ситуацию не спасло... все равно пишет
"Ошибка SOAP сервера: getCurrencyList: Parameter 'idList' must be an array" попробовал записать этот объект в хмл вот такой код: <anyType xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <elem>Значение Элемента</elem> <elem>Значение Элемента1</elem> </anyType> |
|||
9
Serginio1
03.07.13
✎
15:59
|
Передай пустую строку
Фабрика.Создать(Фабрика.Тип(ПространствоИмен, "string"),""); или можно попробовать ТипNull=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","anySimpleType"); СсылкаNull=ФабрикаДляКомплексной.Создать(ТипNull); и эту ссылку передать |
|||
10
Serginio1
03.07.13
✎
15:59
|
СсылкаNull=Фабрика.Создать(ТипNull);
|
|||
11
Bliz
03.07.13
✎
16:04
|
(9)
Первый вариант "Ошибка при вызове метода объекта модели XDTO. Неверный параметр." Второй вариант: "Обязательный параметр не задан: {urn:ddengi}:ddengiService:getCurrencyList(...idList...)" |
|||
12
Serginio1
03.07.13
✎
16:12
|
Вообще
-<message name="getCurrencyList"><part name="apiId" type="xsd:string"/><part name="login" type="xsd:string"/><part name="pass" type="xsd:string"/><part name="idList" type="xsd:anyType"/></message> там эни тайп. Спроси у разработчика какой должен быть xml запроса |
|||
13
Bliz
03.07.13
✎
16:16
|
Он посоветовал, поставить php там есть рабочий пример на пхп.
Пошел, ставить, поидее там же и будет видно какой должен быть XML запрос. |
|||
14
Serginio1
03.07.13
✎
17:28
|
Если посмотреть на http://www.drebedengi.ru/soap/getRecordList.xml
то подключают они -<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://xml.apache.org/xml-soap" map из http://xml.apache.org/xml-soap можешь сохранить в файл и дописать ипорт смотри v8: Заполнение массива XDTO 82 <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <import namespace="http://xml.apache.org/xml-soap/"/> и попробу передать пустой map. Эти пэхэпэшники пространства имен по умолчанию не указывают в дерективах импорта |
|||
15
Serginio1
03.07.13
✎
17:55
|
Не знаю где лежит описание http://xml.apache.org/xml-soap
но тебе нужно импортировать наподобие <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/> |
|||
16
Serginio1
03.07.13
✎
17:59
|
Или можешь сохранить в файл описание и сохранить в файл
<schema elementFormDefault="qualified" targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <complexType name="Item"> <all> <element name="key" type="xsd:anyType"/> <element name="value" type="xsd:anyType"/> </all> </complexType> <complexType name="Map"> <sequence> <element maxOccurs="unbounded" minOccurs="0" name="item" type="tns4:Item"/> </sequence> </complexType> </schema> и в schemaLocation указать путь к этому файлу |
|||
17
Bliz
04.07.13
✎
09:05
|
(16) Сохранил в файл, что ты указал. Далее в конфу в пакеты XDTO загрузил эту схему далее:
Объект = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://xml.apache.org/xml-soap","Map")); Ответ=Client.getCurrencyList("demo_api", "[email protected]", "demo",Объект); Ошибка: "Ошибка установки соответствия префикса и URI пространства имен" Попробовал в этом XDTO указать пространство имен "urn:ddengi" выдало "Неверный параметр" как выглядит MAP в ХМЛ: <Map xmlns="http://xml.apache.org/xml-soap" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> Что касается (14) (15) не совсем понял как импортировать это, поидее (16) уже готовый тип. |
|||
18
Serginio1
04.07.13
✎
10:12
|
Тебе нужно это надо прописать в файле wsdl
То есть скачать http://www.drebedengi.ru/soap/dd.wsdl <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <import namespace="http://xml.apache.org/xml-soap" schemaLocation="ПутьКФайлуСхемыОписания"/> Тогда тебе будут доступны при загрузке этого файла все определения пространств имен у прокси ОпределениеТ=Новый WSОпределения("ПутьКСохраненнойСхемеurn:ddengi.wsdl"); Там в файле есть секция определяющая путь к первису и точки подключения -<service name="ddengiService">-<port name="SoapPort" binding="typens:SoapBinding"><soap:address location="http://www.drebedengi.ru/soap/"/></port></service></definitions> И тогда этот пакет появится у прокси фабрики и бебе будет доступно Объект = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://xml.apache.org/xml-soap","Map")); |
|||
19
Bliz
04.07.13
✎
10:31
|
(18) Сохранил wsdl далее в какое место файла необходимо вставить:
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <import namespace="http://xml.apache.org/xml-soap" schemaLocation="ПутьКФайлуСхемыОписания"/> Вставлял вначало сразу же после объявления. Выдается ошибка при выполнении: ПутьКСохраненнойСхеме="C:\Temp\dd.wsdl"; ОпределениеТ=Новый WSОпределения(ПутьКСохраненнойСхеме); "Фатальная ошибка: Extra content at the end of the document SystemId: file://C:\Temp\dd.wsdl" Не совсем понял, для чего ты указываешь: "Там в файле есть секция определяющая путь к первису и точки подключения" |
|||
20
Serginio1
04.07.13
✎
10:46
|
Смотри v8: Заполнение массива XDTO
82 там после импорт идет в секции типов Попробуй создать эту секцию со свои пространством имен -<types>-<schema targetNamespace="urn:Magento" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" />--> -<complexType name="FixedArray">-<complexContent>-<restriction base="soapenc:Array"><attribute wsdl:arrayType="xsd:anyType[]" ref="soapenc:arrayType"/></restriction></complexContent></complexType></schema></types> |
|||
21
Serginio1
04.07.13
✎
10:50
|
Вернее
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" /> |
|||
22
Bliz
04.07.13
✎
10:50
|
Добавил вот это:
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ddengi"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> </schema> </types> В прокси появились доп. пакеты: "http://schemas.xmlsoap.org/soap/encoding/" |
|||
23
Serginio1
04.07.13
✎
10:52
|
Добваь еще
<import namespace="http://xml.apache.org/xml-soap" schemaLocation="ПутьКФайлуСхемыОписания"/> для получения map |
|||
24
Serginio1
04.07.13
✎
10:57
|
можно почитать http://www.zahodi-ka.ru/doc/spec/wsdl_1_1.shtml
|
|||
25
Serginio1
04.07.13
✎
11:09
|
||||
26
Bliz
04.07.13
✎
11:38
|
(23) добавил
Пакет в прокси появился Выполняю Объект = Фабрика.Создать(Фабрика.Тип("http://xml.apache.org/xml-soap","Map")); Ответ=Client.getCurrencyList("demo_api", "[email protected]", "demo",Объект); Ошибка: "Свойство 'item' не обнаружено" |
|||
27
Bliz
04.07.13
✎
11:39
|
Представление в ХМЛ
<Map xmlns="http://xml.apache.org/xml-soap" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> |
|||
28
Bliz
04.07.13
✎
11:40
|
||||
29
Serginio1
04.07.13
✎
11:47
|
(26) Добавь какой нибудь элемент или как в демо
http://www.drebedengi.ru/?module=soap&action=soapTest echo "\nSet currency list:\n"; // $currencyList = array( // array( // 'server_id' => 18, // 'name' => 'USgrn', // 'course' => 5.9215, // 'code' => 'USD', // 'is_default' => true, // 'is_autoupdate' => true, // 'is_hidden' => false, // ), // array( // 'client_id' => 11111, // 'name' => 'TUGRIK', // 'course' => 34.3232, // 'code' => 'USD', // 'is_default' => false, // 'is_autoupdate' => true, // 'is_hidden' => false, // ), // ); // print_r($client->setCurrencyList('demo_api', '[email protected]', 'demo', $currencyList)); |
|||
30
Bliz
04.07.13
✎
11:54
|
Выполняю код
ПространствоИмен="http://xml.apache.org/xml-soap"; Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен,"Map")); Объект.Добавить(ФормаXML.Элемент, ПространствоИмен, "item",Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "string"), "")); Ошибка: Несоответствие типов XDTO: Тип '{http://xml.apache.org/xml-soap}Map' не найден Тип объекта не является открытым |
|||
31
Bliz
04.07.13
✎
12:00
|
ошибка выдается при выполнении строки Объект.Добавить...
|
|||
32
Serginio1
04.07.13
✎
12:16
|
Тебе нужно
Строка=Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен,"Item")); Строка.key=Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "string"), "name"); Строка.value=Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "string"), "USgrn"); Объект.Item.Добавить(строка); итак для всех кей валуе |
|||
33
Serginio1
04.07.13
✎
12:19
|
тебе нужно заполнять как в 3 только таблица это map а
СтрокаТаблицы это Item и простанчтво имен http://xml.apache.org/xml-soap |
|||
34
Bliz
04.07.13
✎
12:54
|
(29) ты указал на код "Set currency list"
поидее, это какая то запись в базу. В параметрах надо указать "list" думаю это не тоже самое, что и "idList" в параметрах вызова операции getCurrencyList Судя по всему Веб сервис там ожидает только числовые значения, т.к. выдается ошибка на какой то другой Попробовал указать 0, тогда вызов проходит getCurrencyList (думал это уже не случится=)), но ответ приходит пустой. |
|||
35
Bliz
04.07.13
✎
13:03
|
Написал еще разработчику, может подскажет какими значениями надо заполнить параметр idList чтобы получить норм ответ.
|
|||
36
Bliz
04.07.13
✎
13:53
|
Serginio1, а как то можно в схеме wsdl которую мы указываем, для параметра idList указать, что он не является обязательным?
Когда в конфу загружаешь по ссылке wsdl, то там у параметров показывается свойство: Возможно пустое, там оно везде Ложь |
|||
37
Serginio1
04.07.13
✎
13:58
|
(34) Возможно ошибки были при возврате значения
v8: Заполнение массива XDTO см 100 Там точно возвращался map а 1С не могла разобрать этот тип (36) МинимальноеКоличество=0 minOccurs="0" maxOccurs=1 |
|||
38
Bliz
04.07.13
✎
14:05
|
(37) у меня возвращается Неопределено, и ошибки не выскакивает
"МинимальноеКоличество=0 minOccurs="0" maxOccurs=1" Поставил вот так <part name="idList" type="xsd:anyType" minOccurs="0" maxOccurs=1/> Ошибка: Ошибка разбора XML: - [79,28] Фатальная ошибка: AttValue: " or ' expected SystemId: file://C:\Temp\dd.wsdl Попробовал просто удалить эту строку idList, тогда параметр не требуется но при вызове функции, но сервер все равно выдает ошибку: "Свойство 'item' не обнаружено" Т.е. это на стороне сервера... |
|||
39
Serginio1
04.07.13
✎
14:17
|
(38) Знач проблема на сервере или что то нужно подставлять по умолчанию
minOccurs это для полей структуры. Хрень сморозил. Есть понятие возможно пустое значение, но туда передается anySimpleType |
|||
40
Serginio1
04.07.13
✎
15:10
|
можешь поиграться с http://www.soapui.org
|
|||
41
Bliz
05.07.13
✎
16:11
|
Нашел еще один варинат работы через SOAP клиент, с помощью , но результат тот же.
ИмяСервиса = "http://www.drebedengi.ru/soap/dd.wsdl";
Ошибка: "Произошла исключительная ситуация (Client): Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: Параметр задан неверно. - Client:Unspecified client error. HRESULT=0x80070057: Параметр задан неверно." Уже можно указать "" в качестве параметра, но при попытке выполнить выдает: Произошла исключительная ситуация (SoapMapper): SoapMapper:Restoring data into SoapMapper anyType failed HRESULT=0x8007000E: Недостаточно памяти для завершения операции. - Client:Unspecified client error. HRESULT=0x8007000E: Недостаточно памяти для завершения операции. Ссылка на описание: http://infostart.ru/public/189959/ |
|||
42
Bliz
05.07.13
✎
16:30
|
Думал, мб с 1с что то. Сделал подключение через SoapClient с помощью AutoIT результат, тот же не удается выполнить команды.
|
|||
43
Serginio1
05.07.13
✎
16:39
|
П на php то что выдает?
|
|||
44
Bliz
05.07.13
✎
16:49
|
(43) у меня что то проблемы с установкой PHP на комп, точнее с портом 80.
Пробовал Денвер, поидее ничего не надо прописывать, устанавливаешь и все. Вообщем пока php код не могу выполнить. |
|||
45
Bliz
05.07.13
✎
17:32
|
(43) похоже на php все работает... вызов проходит нормально. Приплыли...
|
|||
46
Serginio1
05.07.13
✎
21:53
|
Значит надо смотреть какой запрос выдает php
|
|||
47
Serginio1
05.07.13
✎
22:04
|
||||
48
Bliz
08.07.13
✎
09:16
|
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:ddengi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:getCurrencyList><apiId xsi:type="xsd:string">demo_api</apiId><login xsi:type="xsd:string">[email protected]</login><pass xsi:type="xsd:string">demo</pass><idList xsi:nil="true"/></ns1:getCurrencyList></SOAP-ENV:Body></SOAP-ENV:Envelope> |
|||
49
Bliz
08.07.13
✎
09:18
|
добавил в wsdl строку
<import namespace="http://www.w3.org/2001/XMLSchema-instance"/> Далее в коде пытаюсь выполнить: Объект = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema-instance","nil")); |
|||
50
Bliz
08.07.13
✎
09:18
|
Не может выполнить
|
|||
51
Bliz
08.07.13
✎
09:18
|
Фабрика.Тип("http://www.w3.org/2001/XMLSchema-instance","nil")
|
|||
52
Serginio1
08.07.13
✎
10:01
|
А ты http://www.w3.org/2001/XMLSchema-instance импортировал?
|
|||
53
Bliz
08.07.13
✎
10:06
|
добавил в wsdl строку
<import namespace="http://www.w3.org/2001/XMLSchema-instance"/> |
|||
54
Bliz
08.07.13
✎
10:07
|
В пакетах у прокси она появилась
|
|||
55
Serginio1
08.07.13
✎
11:04
|
Вообщето такую строку формирует
ТипNull=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","anySimpleType"); СсылкаNull=Фабрика.Создать(ТипNull); Ответ=Прокси.getCurrencyList("demo_api", "[email protected]", "demo",СсылкаNull); |
|||
56
Bliz
08.07.13
✎
11:10
|
СсылкаNull=Фабрика.Создать(ТипNull);
|
|||
57
Bliz
08.07.13
✎
11:10
|
В этом случае СсылкаNull= Неопределено
|
|||
58
Serginio1
08.07.13
✎
11:22
|
Это неопределено в отладчике.
А вот если присвоить это значение какомунибудь anyType она правильно прописывает. Например Стр.Проект=СсылкаNull; при записи в файл дает <Проект xsi:nil="true"/> |
|||
59
Bliz
08.07.13
✎
11:31
|
"А вот если присвоить это значение какомунибудь anyType она правильно прописывает."
Возможно, но как это сделать, чтобы передать в параметр WS операции... |
|||
60
Bliz
08.07.13
✎
11:32
|
Объект=Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "anyType"));
Объект.Добавить(ФормаXML.Атрибут,"http://www.w3.org/2001/XMLSchema-instance","nil",Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "boolean"), "true")); В XML файле получается так: <anyType xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> При вызове операции выдается ошибка... Ошибка SOAP сервера: getCurrencyList: Parameter 'idList' must be an array |
|||
61
Serginio1
08.07.13
✎
11:40
|
Процедура ПоказатьОбъектПоФабрике(Фабрика,ОтветТаблицаЦен)
ЗаписьХМЛ= новый ЗаписьXML; ЗаписьХМЛ.УстановитьСтроку(); попытка Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,,,,НазначениеТипаXML.Явное); исключение Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,"Тест",,,НазначениеТипаXML.Явное); КонецПопытки; //записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен); текст=Новый ТекстовыйДокумент; Текст.УстановитьТекст(ЗаписьХМЛ.Закрыть()); Текст.Показать(); КонецПроцедуры ссылкаNULL выдает <anyType xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="anyType"/> |
|||
62
Serginio1
08.07.13
✎
11:44
|
Попробуй через WSПараметр
http://1clancer.ru/article/peredacha_parametrov_veb_servisu_i_razbor_poluchennogo_otveta_958 |
|||
63
Serginio1
08.07.13
✎
11:59
|
61 Выдает
<Тест xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> Если неявное то и прописать соответствие пространства имен Процедура ПоказатьОбъектПоФабрике(Фабрика,ОтветТаблицаЦен) ЗаписьХМЛ= новый ЗаписьXML; ЗаписьХМЛ.УстановитьСтроку(); ЗаписьХМЛ.ЗаписатьОбъявлениеXML(); ЗаписьХМЛ.ЗаписатьНачалоЭлемента(XMLСтрока("Данные")); // ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config"); ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); попытка //Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,,,,НазначениеТипаXML.Явное); Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен); исключение // Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,"Тест",,,НазначениеТипаXML.Явное); Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,"Тест"); КонецПопытки; //записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен); ЗаписьХМЛ.ЗаписатьКонецЭлемента(); текст=новый ТекстовыйДокумент; Текст.УстановитьТекст(ЗаписьХМЛ.Закрыть()); Текст.Показать(); КонецПроцедуры то <?xml version="1.0"?> <Данные xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Тест xmlns="" xsi:nil="true"/> </Данные> |
|||
64
Serginio1
08.07.13
✎
12:34
|
(62) не в тему. Попробуй через HTTPСоединение
http://itland.ru/forum/lofiversion/index.php/t24505.html |
|||
65
Bliz
08.07.13
✎
12:51
|
(62) тоже не понял к чему
|
|||
66
Serginio1
08.07.13
✎
14:17
|
Попробуй прописать nillable="true"
message name="getCurrencyList"><part name="apiId" type="xsd:string"/><part name="login" type="xsd:string"/><part name="pass" type="xsd:string"/><part name="idList" type="xsd:anyType" nillable="true"/> В 1с для параметров создантся структура <xs:element name="ReturnPricesTable"> <xs:complexType> <xs:sequence> <xs:element name="StructPrice" type="tns:StructPrice" nillable="true"/> </xs:sequence> </xs:complexType> </xs:element> |
|||
67
Serginio1
08.07.13
✎
14:18
|
У параметра StructPrice стоит возможно пустое
|
|||
68
Bliz
08.07.13
✎
15:06
|
<message name="getCurrencyList">
<part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType" nillable="true"/> </message> |
|||
69
Bliz
08.07.13
✎
15:06
|
В wsdl прописал
Результат: {Форма.Форма.Форма(60)}: Недостаточно фактических параметров Ответ=Client.getCurrencyList("demo_api", "[email protected]", "demo"); |
|||
70
Serginio1
08.07.13
✎
15:19
|
(69) Вообще то nillable="true" для anyType это не совсем то. Кстати, а что возвращает то сервис?
и что возвращает http://www.soapui.org 'idList' must be an array |
|||
71
Bliz
08.07.13
✎
15:22
|
Ответ от разработчика:
"Вам нужно добиться, чтобы передаваемый XML был таким-же, как у PHP скрипта. На самом деле не только у PHP скрипта, многие стандартные библиотеки, в частности под все мобильные устройства - тоже умеют это делать, т.к. независимые разработчики это реализовали в приложениях. Каким должно быть значение параметра, чтобы 1с сгенерил такой XML - вам нужно разобраться." |
|||
72
Bliz
08.07.13
✎
15:24
|
(70) сервис вернет, поидее массив записей о движениях, вроде как.
"и что возвращает http://www.soapui.org" Честно говоря не понял, для чего этот сервис. "Нагрузочное тестирование веб сервисов" ? |
|||
73
Serginio1
08.07.13
✎
15:58
|
Можешь тестировать вэб сервис http://www.soapui.org/Functional-Testing/functional-testing.html
|
|||
74
Serginio1
08.07.13
✎
16:16
|
Кстати попробовал создал структуру соответсвующую параметрам
Фабрика=ФабрикаXDTO; ТипNull=Фабрика.Тип("http://www.w3.org/2001/XMLSchema","anySimpleType"); СсылкаNull=Фабрика.Создать(ТипNull); Тип=Фабрика.Тип("http://www.TestShema.ru/sample","getCurrencyList"); Объект=Фабрика.Создать(Тип); Объект.apiId="demo_api"; Объект.login="[email protected]"; Объект.pass="demo"; Объект.idList=СсылкаNull; ПоказатьОбъект(Объект); выдает <getCurrencyList xmlns="http://www.TestShema.ru/sample" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="getCurrencyList"> <apiId>demo_api</apiId> <login>[email protected]</login> <pass>demo</pass> <idList xsi:nil="true"/> </getCurrencyList> |
|||
75
Serginio1
08.07.13
✎
16:24
|
или можно попробовать
part name="idList" type="ns2:Map" nillable="true"/> странно, что он выдает ответ Ошибка SOAP сервера: getCurrencyList: Parameter 'idList' must be an array А какой эррай если передается nil? |
|||
76
Serginio1
08.07.13
✎
16:25
|
(72) Это по идее, а что реально возвращает PHP?
|
|||
77
Bliz
08.07.13
✎
17:02
|
Еххууууу
|
|||
78
Bliz
08.07.13
✎
17:02
|
нашел как
|
|||
79
Bliz
08.07.13
✎
17:03
|
|
|||
80
Bliz
08.07.13
✎
17:03
|
по этой теме: хз как на нее вышел
v8: MSSOAP 1C |
|||
81
Bliz
08.07.13
✎
17:13
|
Понимаю, что это не особо средствами 1с... Но все же, лучше чем ничего.
Огромное спасибо за помощь Serginio1 |
|||
82
Serginio1
08.07.13
✎
17:31
|
(81) А объекты ты можешь из XML ответа подгружать используя прокси фабрику.
ЧтениеXML=Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(Файл); ЧтениеXML.ПерейтиКСодержимому(); // ЧтениеXML.Прочитать(); читать до появления результата // Пока ЧтениеXML.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл ОбъектXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя)); // КонецЦикла; ЧтениеXML.Закрыть(); |
|||
83
Serginio1
08.07.13
✎
17:40
|
(80) А 64 не подошел?
httpServer="www.drebedengi.ru"; Адрес="soap"; Соединение = Новый HTTPСоединение("httpServer"); ТД = Новый ТекстовыйДокумент; ТД.УстановитьТекст(("<?xml version=""1.0"" encoding=""utf-8""?> |<SOAP-ENV:Envelope | xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" | xmlns:ns1=""urn:ddengi"" | xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" | xmlns:ns2=""http://xml.apache.org/xml-soap"" | xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/"" | SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""> | <SOAP-ENV:Body> | <ns1:getCurrencyList> | <apiId xsi:type=""xsd:string"">demo_api</apiId> | <login xsi:type=""xsd:string"">[email protected]</login> | <pass xsi:type=""xsd:string"">demo</pass> | <idList xsi:nil=""true""/> | </ns1:getCurrencyList> | </SOAP-ENV:Body> |</SOAP-ENV:Envelope>"); " ); ИмяФайлаОтправки = ПолучитьИмяВременногоФайла(".snd"); ТД.Записать(ИмяФайлаОтправки); ИмяФайлаПолучения = ПолучитьИмяВременногоФайла(".rsv"); Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки,Адрес, ИмяФайлаПолучения); УдалитьФайлы(ИмяФайлаОтправки); ПараметрыЧтенияXML = Новый ПараметрыЧтенияXML(,,,, true, true, true, true, true); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяФайлаПолучения, ПараметрыЧтенияXML); Пока ЧтениеXML.Прочитать() Цикл Сообщить("" + ЧтениеXML.ТипУзла + " - " + ЧтениеXML.Имя + " - " + ЧтениеXML.Значение); КонецЦикла; ЧтениеXML.Закрыть(); УдалитьФайлы(ИмяФайлаПолучения); |
|||
84
Bliz
08.07.13
✎
17:53
|
(83) не выполяется
поставил httpServer="http://www.drebedengi.ru/soap/"; Адрес="SoapPort"; все равно ошибку выдает |
|||
85
Serginio1
08.07.13
✎
18:02
|
(84) Ну и . Главное 79 Работает
|
|||
86
Serginio1
08.07.13
✎
18:33
|
(82) +
ИмяФайлаПолучения="c:\tmp\GetData.xml"; ЧтениеXML = Новый ЧтениеXML; ПараметрыЧтенияXML = Новый ПараметрыЧтенияXML(,,,, true, true, true, true, true); ЧтениеXML.ОткрытьФайл(ИмяФайлаПолучения, ПараметрыЧтенияXML); Пока ЧтениеXML.Прочитать() Цикл Сообщить("" + ЧтениеXML.ТипУзла + " - " + ЧтениеXML.Имя + " - " + ЧтениеXML.Значение); Если ЧтениеXML.Имя="ns1:getCurrencyListResponse" Тогда ОбъектXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя)); КонецЕсли; КонецЦикла; ЧтениеXML.Закрыть(); Читает объект map |
|||
87
Serginio1
08.07.13
✎
18:43
|
Для каждого стр Из ОбъектXDTO.getCurrencyListReturn.item Цикл
Для каждого валюта Из стр.item Цикл Сообщить(валюта.key+"="+валюта.value) КонецЦикла; КонецЦикла; |
|||
88
Serginio1
08.07.13
✎
18:48
|
Там кстати достаточно
responseText=xmlHttp.responseText; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(responseText); |
|||
89
Serginio1
08.07.13
✎
19:01
|
Если
responseText=xmlHttp.responseText; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(responseText); ЧтениеXML.ПерейтиКСодержимому(); То пропускаются определения и сначала идет SOAP-ENV:Body - потом ns1:getCurrencyListResponse тоесть можно создать универсальную функцию для чтения результата, который будет 2 То есть responseText=xmlHttp.responseText; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(responseText); ЧтениеXML.ПерейтиКСодержимому(); ЧтениеXML.Прочитать(); //считываем SOAP-ENV:Body ОбъектXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя)); |
|||
90
Bliz
09.07.13
✎
08:39
|
(86) Почему то при чтении выдает ошибку
{Форма.Форма.Форма(395)}: Ошибка при вызове метода контекста (ПрочитатьXML)
|
|||
91
Bliz
09.07.13
✎
08:44
|
в wsdl в шапке прописано
<definitions name="ddengi" targetNamespace="urn:ddengi" xmlns:typens="urn:ddengi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
|
|||
92
Bliz
09.07.13
✎
08:49
|
в файле map
<schema elementFormDefault="qualified"
|
|||
93
Serginio1
09.07.13
✎
10:11
|
Сохранил схему "http://xml.apache.org/xml-soap/" в файл
d:\tmp\apachmap.xsd и прописал импорт <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ddengi"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <import namespace="http://xml.apache.org/xml-soap/" Location="d:\tmp\apachmap.xsd"/> </schema> |
|||
94
Serginio1
09.07.13
✎
10:15
|
Да у меня еще стоит 8.3
|
|||
95
Serginio1
09.07.13
✎
13:03
|
Стал разбираться с возможно пустой параметр. nillable в параметрах не прокатывает
в 1с для параметров городится структура г де у параметра указывается nillable например <xs:element name="GetOrderStatusReport"> <xs:complexType> <xs:sequence> <xs:element name="StructOrderStatusReportIn" type="tns:StructOrderStatusReportIn" nillable="true"/> <xs:element name="ShowArchive" type="xs:boolean"/> <xs:element name="ConversationStatus" type="xs:string"/> <xs:element name="ShowClosed" type="xs:boolean"/> </xs:sequence> </xs:complexType> затем формирует <message name="GetOrderStatusReportRequestMessage"> <part name="parameters" element="tns:GetOrderStatusReport"/> </message> <operation name="GetOrderStatusReport"> <input message="tns:GetOrderStatusReportRequestMessage"/> <output message="tns:GetOrderStatusReportResponseMessage"/> </operation> |
|||
96
Bliz
09.07.13
✎
13:08
|
Можешь скинуть файл Map и dd.wsdl ?
Платформу 8.3 поставил, ошибка не уходит. |
|||
97
Serginio1
09.07.13
✎
13:33
|
<schema elementFormDefault="qualified"
targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <complexType name="Item"> <all> <element name="key" type="xsd:anyType"/> <element name="value" type="xsd:anyType"/> </all> </complexType> <complexType name="Map"> <sequence> <element maxOccurs="unbounded" minOccurs="0" name="item" type="tns4:Item"/> </sequence> </complexType> </schema> |
|||
98
Serginio1
09.07.13
✎
13:34
|
<?xml version='1.0' encoding='UTF-8'?>
<!-- WSDL file generated by Zend Studio. --> <definitions name="ddengi" targetNamespace="urn:ddengi" xmlns:typens="urn:ddengi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ddengi"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <import namespace="http://xml.apache.org/xml-soap/" Location="d:\tmp\apachmap.xsd"/> </schema> <message name="deleteAll"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> </message> <message name="deleteAllResponse"/> <message name="deleteObject"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="id" type="xsd:integer"/> <part name="type" type="xsd:string"/> </message> <message name="deleteObjectResponse"> <part name="deleteObjectReturn" type="xsd:integer"/> </message> <message name="getAccessStatus"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> </message> <message name="getAccessStatusResponse"> <part name="getAccessStatusReturn" type="xsd:integer"/> </message> <message name="getAccumList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getAccumListResponse"> <part name="getAccumListReturn" type="xsd:anyType"/> </message> <message name="getBalance"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="params" type="xsd:anyType"/> </message> <message name="getBalanceResponse"> <part name="getBalanceReturn" type="xsd:anyType"/> </message> <message name="getCategoryList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getCategoryListResponse"> <part name="getCategoryListReturn" type="xsd:anyType"/> </message> <message name="getChangeList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="revision" type="xsd:string"/> </message> <message name="getChangeListResponse"> <part name="getChangeListReturn" type="xsd:anyType"/> </message> <message name="getCurrencyList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getCurrencyListResponse"> <part name="getCurrencyListReturn" type="xsd:anyType"/> </message> <message name="getCurrentRevision"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> </message> <message name="getCurrentRevisionResponse"> <part name="getCurrentRevisionReturn" type="xsd:integer"/> </message> <message name="getExpireDate"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> </message> <message name="getExpireDateResponse"> <part name="getExpireDateReturn" type="xsd:string"/> </message> <message name="getOrderList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getOrderListResponse"> <part name="getOrderListReturn" type="xsd:anyType"/> </message> <message name="getPlaceList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getPlaceListResponse"> <part name="getPlaceListReturn" type="xsd:anyType"/> </message> <message name="getRecordList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="params" type="xsd:anyType"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getRecordListResponse"> <part name="getRecordListReturn" type="xsd:anyType"/> </message> <message name="getRightAccess"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> </message> <message name="getRightAccessResponse"> <part name="getRightAccessReturn" type="xsd:string"/> </message> <message name="getServerSubs"> <part name="url" type="xsd:string"/> </message> <message name="getServerSubsResponse"> <part name="getServerSubsReturn" type="xsd:anyType"/> </message> <message name="getSourceList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getSourceListResponse"> <part name="getSourceListReturn" type="xsd:anyType"/> </message> <message name="getSubscriptionStatus"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> </message> <message name="getSubscriptionStatusResponse"> <part name="getSubscriptionStatusReturn" type="xsd:string"/> </message> <message name="getTagList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="idList" type="xsd:anyType"/> </message> <message name="getTagListResponse"> <part name="getTagListReturn" type="xsd:anyType"/> </message> <message name="getUserIdByLogin"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> </message> <message name="getUserIdByLoginResponse"> <part name="getUserIdByLoginReturn" type="xsd:string"/> </message> <message name="setAccumList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="list" type="xsd:string"/> </message> <message name="setAccumListResponse"> <part name="setAccumListReturn" type="xsd:anyType"/> </message> <message name="setCategoryList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="list" type="xsd:anyType"/> </message> <message name="setCategoryListResponse"> <part name="setCategoryListReturn" type="xsd:anyType"/> </message> <message name="setCurrencyList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="list" type="xsd:anyType"/> </message> <message name="setCurrencyListResponse"> <part name="setCurrencyListReturn" type="xsd:anyType"/> </message> <message name="setPaymentTransaction"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="transactionReceipt" type="xsd:string"/> <part name="amount" type="xsd:string"/> </message> <message name="setPaymentTransactionResponse"> <part name="setPaymentTransactionReturn" type="xsd:string"/> </message> <message name="setPlaceList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="list" type="xsd:anyType"/> </message> <message name="setPlaceListResponse"> <part name="setPlaceListReturn" type="xsd:anyType"/> </message> <message name="setRecordList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="list" type="xsd:anyType"/> </message> <message name="setRecordListResponse"> <part name="setRecordListReturn" type="xsd:anyType"/> </message> <message name="setSourceList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="list" type="xsd:anyType"/> </message> <message name="setSourceListResponse"> <part name="setSourceListReturn" type="xsd:anyType"/> </message> <message name="setTagList"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="pass" type="xsd:string"/> <part name="list" type="xsd:anyType"/> </message> <message name="setTagListResponse"> <part name="setTagListReturn" type="xsd:anyType"/> </message> <message name="userRegister"> <part name="apiId" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="name" type="xsd:string"/> <part name="lang" type="xsd:string"/> </message> <message name="userRegisterResponse"> <part name="userRegisterReturn" type="xsd:string"/> </message> <portType name="SoapPortType"> <documentation> drebedengi.ru web-service description; In this document term "waste" means expense. </documentation> <operation name="deleteAll"> <documentation> Delete all data (transactions, waste category, income source, place list, currency and tags; Used for synchronization in case of the conflicts; Returns void if success, or throws SoapFault exception; </documentation> <input message="typens:deleteAll"/> <output message="typens:deleteAllResponse"/> </operation> <operation name="deleteObject"> <documentation> Delete any object; [id] => ID of the object to delete; [type] => The type of the object, must be one of: 'waste' 'income' 'move' 'change' 'object' 'currency' 'tag' 'accum'; 'object' is waste category, income source or place; If 'id' identifies 'move' or 'change', both records will be deleted on the server; Returns 1 on success; if an error accures - generates SoapFault message; if there is other object connected to this ID - delete them first; </documentation> <input message="typens:deleteObject"/> <output message="typens:deleteObjectResponse"/> </operation> <operation name="getAccessStatus"> <documentation> Get current payment status; Returns 1 if Ok, throw SoapFault otherwise. </documentation> <input message="typens:getAccessStatus"/> <output message="typens:getAccessStatusResponse"/> </operation> <operation name="getAccumList"> <documentation> Gets list of purchases (accums); For purchase list logic is only needed fields 'id, name, sum_need, sum_currency_id, user_id, is_family, created, comment, priority, order_id', other fields is for accum logic and should not be changed; ; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> <input message="typens:getAccumList"/> <output message="typens:getAccumListResponse"/> </operation> <operation name="getBalance"> <documentation> Retrievs balance list (array of arrays) grouped by places; [params] => array of parameters: 'restDate' [YYYY-MM-DD (NOW default)] - rests will be retrieved relative to this value; 'is_with_accum' [true|false (default)] - If true, the the accumulation will be subtracted; 'is_with_duty' [true|false (default)] - If true, duties will be subtracted; </documentation> <input message="typens:getBalance"/> <output message="typens:getBalanceResponse"/> </operation> <operation name="getCategoryList"> <documentation> Retrievs waste category list (array of arrays): [id] => Internal category ID; [parent_id] => For tree structure; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 3 - waste category; [name] => Category name given by user; [is_hidden] => is category hidden in user interface; [sort] => User sort of category tree; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> <input message="typens:getCategoryList"/> <output message="typens:getCategoryListResponse"/> </operation> <operation name="getChangeList"> <documentation> Get all changes (array of arrays) from server relative to given revision: [revision] => the revision of the change, [action_id] => the action of the change '1' - add, '2' - update, '3' - delete'; [object_type_id] => type of the object changed '1' - any record (transction), '2' - income source, '3' - waste category, '4' - place, '5' - currency, '6' - budget_tags, '7' - budget_accum, '8' - budget_accum_order; [object_id] => ID of the object for subsequent calls getRecordList, getCategoryList etc; [date] => the date of the change; Parameter [revision] => int8 number, usually saved on the client from last successfull sync. </documentation> <input message="typens:getChangeList"/> <output message="typens:getChangeListResponse"/> </operation> <operation name="getCurrencyList"> <documentation> Retrievs currency list (array of arrays) with codes and courses: [id] => Internal currency ID; [name] => Currency name, given by user; [course] => current course from sbrf(dot)ru; [code] => International currency code (for course autoupdating); [family_id] => User family ID (for multiuser mode); [is_default] => is default currency# There should be only one default currency; [is_autoupdate] => autoupdate course once per day, from sbrf(dot)ru; [is_hidden] => is currency hidden in user interface; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> <input message="typens:getCurrencyList"/> <output message="typens:getCurrencyListResponse"/> </operation> <operation name="getCurrentRevision"> <documentation> Get current server revision number. </documentation> <input message="typens:getCurrentRevision"/> <output message="typens:getCurrentRevisionResponse"/> </operation> <operation name="getExpireDate"> <documentation> Get expire date of active subscription (payed until) for the user - [YYYY-MM-DD]; If there is no active subscription return 0; If an error accur return -1; </documentation> <input message="typens:getExpireDate"/> <output message="typens:getExpireDateResponse"/> </operation> <operation name="getOrderList"> <documentation> Gets list of orders for purchases; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> <input message="typens:getOrderList"/> <output message="typens:getOrderListResponse"/> </operation> <operation name="getPlaceList"> <documentation> Retrievs place list (array of arrays): [id] => Internal place ID; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 4 - places; [name] => Place name given by user; [is_hidden] => is place hidden in user interface; [is_for_duty] => Internal place for duty logic, Auto created while user adds "Waste or income duty"; [sort] => User sort of place list; [purse_of_nuid] => Not empty if place is purse of user# The value is internal user ID; [icon_id] => Place icon ID from http://www(dot)drebedengi(dot)ru/img/pl[icon_id](dot)gif; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; There is may be empty response, if user access level is limited; </documentation> <input message="typens:getPlaceList"/> <output message="typens:getPlaceListResponse"/> </operation> <operation name="getRecordList"> <documentation> Retrievs record list (array of arrays) or report table by parameters; [params] => array of following parameters: 'is_report' [true|false (no default)] - retrievs data for report only or full records (waste, incomes, moves, changes) for export; 'relative_date' [YYYY-MM-DD (NOW by default)] - all data will be retrieved relative to this value, according to 'r_period' value; 'period_to', 'period_from' [YYYY-MM-DD] - custom period, if 'r_period' = 0; 'is_show_duty' [true(default)|false] - whether or not include duty record; 'r_period' [custom period = 0, this month = 1, today = 7, last month = 2, this quart = 3, this year = 4, last year = 5, all time = 6, last 20 record = 8 (default)] - period for which data will be obtained; 'r_what' [income = 2, waste = 3 (default), move = 4, change = 5, all types = 6] - type of data you want to get; 'r_who' [0 (default) - all users, int8 = user ID] - The data of the user to obtain, in the case of multiplayer mode; 'r_how' [show record list by detail = 1 (default), group incomes by source = 2, group wastes by category = 3] - Values 2 and 3 are for 'report' mode only# How to group the result record list; 'r_middle' [No average = 0 (default), Average monthly = 2592000, Average weekly = 604800, Averaged over days = 86400] - How to average the data, if r_how = 2 or 3; 'r_currency' [Original currency = 0 (default), int8 = currency ID] - Convert or not in to given currency; 'r_is_place', 'r_is_tag', 'r_is_category' [Include all = 0 (default), Include only selected = 1, All except selected = 2] - Exclude or include 'r_place', 'r_tag' or 'r_category' respectively; 'r_place', 'r_tag', 'r_category' [Array] - Array of numeric values for place ID, tag ID or category ID respectively; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> <input message="typens:getRecordList"/> <output message="typens:getRecordListResponse"/> </operation> <operation name="getRightAccess"> <documentation> Get user right access for multi user mode; Returns 0 - full access, 1 - limited access; For limited access it is neccessary to use getBalance method to display user balance in the application; In this case local transactions must simple increment balance, but not compute that as sum of all transactions; </documentation> <input message="typens:getRightAccess"/> <output message="typens:getRightAccessResponse"/> </operation> <operation name="getServerSubs"> <documentation> Internal method; Don't use it; </documentation> <input message="typens:getServerSubs"/> <output message="typens:getServerSubsResponse"/> </operation> <operation name="getSourceList"> <documentation> Retrievs income source list (array of arrays): [id] => Internal source ID; [parent_id] => For tree structure; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 2 - income source; [name] => Source name given by user; [is_hidden] => is income hidden in user interface; [sort] => User sort of source tree; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> <input message="typens:getSourceList"/> <output message="typens:getSourceListResponse"/> </operation> <operation name="getSubscriptionStatus"> <documentation> Get Premium subscription status; returns 1 - Premium active, 0 - otherwise; </documentation> <input message="typens:getSubscriptionStatus"/> <output message="typens:getSubscriptionStatusResponse"/> </operation> <operation name="getTagList"> <documentation> Retrievs tag list (array of arrays): [id] => Internal tag ID; [family_id] => User family ID (for multiuser mode); [name] => Tag name given by user; [is_hidden] => is tag hidden in user interface; [is_family] => is tag visible for all family user, or user only; [sort] => User sort of tag list; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> <input message="typens:getTagList"/> <output message="typens:getTagListResponse"/> </operation> <operation name="getUserIdByLogin"> <documentation> Get internal user ID by login; For multi user mode, this value contained in 'purse_of_nuid' field of the current user; </documentation> <input message="typens:getUserIdByLogin"/> <output message="typens:getUserIdByLoginResponse"/> </operation> <operation name="setAccumList"> <documentation> Insert or update accum list; [list] => array of arrays: 'server_id' or 'client_id' [int8] - server or client ID of the record# If client ID is present - try to insert new record, and return server2client correspondence in the result array# If server_id is present - try to update existing record, see getAccumList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent 'update' and 'delete' calls; </documentation> <input message="typens:setAccumList"/> <output message="typens:setAccumListResponse"/> </operation> <operation name="setCategoryList"> <documentation> Insert or update waste category list; [list] => array of arrays: 'server_id' or 'client_id' [int8] - server or client ID of the record# If client ID is present - try to insert new record, and return server2client correspondence in the result array# If server_id is present - try to update existing record, see getCategoryList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent 'update' and 'delete' calls; </documentation> <input message="typens:setCategoryList"/> <output message="typens:setCategoryListResponse"/> </operation> <operation name="setCurrencyList"> <documentation> Insert or update currency list; [list] => array of arrays: 'server_id' or 'client_id' [int8] - server or client ID of the record# If client ID is present - try to insert new record, and return server2client correspondence in the result array# If server_id is present - try to update existing record, see getCurrencyList description for other detail; Returns the array of server IDs, successfully changed; If 'is_default' flag set to another currency, then previos updated too and sent in return array; The client MUST save server IDs corresponded to client IDs, for subsequent 'update' and 'delete' calls; </documentation> <input message="typens:setCurrencyList"/> <output message="typens:setCurrencyListResponse"/> </operation> <operation name="setPaymentTransaction"> <documentation> Approve payment from Apple; [transactionReceipt] - is a signed ricept string returned from apple while purchasing, this shoud be base64 decoded; [amount] - the sum amount of the purchase, in USD; Return expire date of the subscription, see getExpireDate for the description of the return values; </documentation> <input message="typens:setPaymentTransaction"/> <output message="typens:setPaymentTransactionResponse"/> </operation> <operation name="setPlaceList"> <documentation> Insert or update place list; [list] => array of arrays: 'server_id' or 'client_id' [int8] - server or client ID of the record# If client ID is present - try to insert new record, and return server2client correspondence in the result array# If server_id is present - try to update existing record, see getPlaceList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent 'update' and 'delete' calls; </documentation> <input message="typens:setPlaceList"/> <output message="typens:setPlaceListResponse"/> </operation> <operation name="setRecordList"> <documentation> Insert or update record list; [list] => array (indexes must be 0,1,2...N) of arrays: 'server_id' or 'client_id' [int8] - server or client ID of the record# If client ID is present - try to insert new record, and return server2client correspondence in the result array# If server_id is present - try to update existing record; 'server_move_id' or 'client_move_id' [int8] - for "move" operations only, to identify second part of move# The value must point to first part 'server_id' or 'client_id' respectively; 'server_change_id' or 'client_change_id' [int8] - for "currency change" operations only, to identify second part of change# The value must point to first part 'server_id' or 'client_id' respectively; 'place_id' [int8] - place ID, of which the record; 'budget_object_id' [int8] - object ID of which the record: category ID for waste, source ID for incomes, place ID for moves and currency changes; 'sum' [int8] - absolute value of sum (hundredths); 'operation_date' [YYYY-MM-DD HH:mm:SS] - transaction date; 'comment' [UTF8 text] - the comment of the record, 2048 chars max length; 'currency_id' [int8] - currency ID of the record; 'is_duty' [true|false] - not used; 'operation_type' [income = 2, waste = 3 (default), move = 4, change = 5] - transaction type; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent 'update' and 'delete' calls; </documentation> <input message="typens:setRecordList"/> <output message="typens:setRecordListResponse"/> </operation> <operation name="setSourceList"> <documentation> Insert or update income source list; [list] => array of arrays: 'server_id' or 'client_id' [int8] - server or client ID of the record# If client ID is present - try to insert new record, and return server2client correspondence in the result array# If server_id is present - try to update existing record, see getSourceList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent 'update' and 'delete' calls; </documentation> <input message="typens:setSourceList"/> <output message="typens:setSourceListResponse"/> </operation> <operation name="setTagList"> <documentation> Insert or update tag list; [list] => array of arrays: 'server_id' or 'client_id' [int8] - server or client ID of the record# If client ID is present - try to insert new record, and return server2client correspondence in the result array# If server_id is present - try to update existing record, see getTagList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent 'update' and 'delete' calls; </documentation> <input message="typens:setTagList"/> <output message="typens:setTagListResponse"/> </operation> <operation name="userRegister"> <documentation> Reqister new user; Return user password on successfully register; If an error accur return -1 (such email already exist), -2 (register not allowed), -3 (email incorrect), -4 (other error); [lang] - 'en' or 'ru'; </documentation> <input message="typens:userRegister"/> <output message="typens:userRegisterResponse"/> </operation> </portType> <binding name="SoapBinding" type="typens:SoapPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="deleteAll"> <soap:operation soapAction="urn:SoapAction"/> <input> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="deleteObject"> <soap:operation soapAction="urn:SoapAction"/> <input> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="getAccessStatus"> <soap:operation soapAction="urn:SoapAction"/> <input> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="getAccumList"> <soap:operation soapAction="urn:SoapAction"/> <input> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="getBalance"> <soap:operation soapAction="urn:SoapAction"/> <input> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="getCategoryList"> <soap:operation soapAction="urn:SoapAction"/> <input> <soap:body namespace="urn:ddengi" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:ddengi" use="encoded" encoding |
|||
99
Serginio1
09.07.13
✎
13:38
|
ОпределениеТ=Новый WSОпределения("d:\Загрузки\dd.wsdl");
WSСервис=ОпределениеТ.Сервисы[0]; прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя); Фабрика=Прокси.ФабрикаXDTO; |
|||
100
vicof
09.07.13
✎
13:39
|
(100)
|
|||
101
Bliz
09.07.13
✎
14:12
|
Ухх я думал через внешнее хранилище скинешь=)
Вообщем различия были только в описании импорта. Все заработало, спасибо. |
|||
102
Serginio1
09.07.13
✎
14:19
|
А я тебе импорт скидывал там вместо shemaLocation нужно просто Location прописать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |