|
Web service (веб сервис) тип возвращаемого значения | ☑ | ||
---|---|---|---|---|
0
Svirepy
19.10.11
✎
15:21
|
Народ, хэлп! Не могу разобраться: поднят веб сервис, его функция делает вот это:
Функция Products(ProdName,Article) Экспорт Запись = Новый ЗаписьXML; Запись.УстановитьСтроку(); Стр=""; Если СтрДлина(Article) > 0 Тогда Отбор= Новый Структура("Артикул"); Отбор.Артикул = Article; Выборка=Справочники.Номенклатура.Выбрать(,,Отбор,); ИначеЕсли СтрДлина(ProdName) > 0 Тогда Отбор= Новый Структура("Наименование"); Отбор.Наименование = ProdName; Выборка=Справочники.Номенклатура.Выбрать(,,Отбор,); Иначе Выборка=Справочники.Номенклатура.Выбрать(); КонецЕсли; Запись.ЗаписатьНачалоЭлемента("Product"); Пока Выборка.Следующий() Цикл Запись.ЗаписатьНачалоЭлемента("Article"); Запись.ЗаписатьТекст(""+Выборка.Артикул); Запись.ЗаписатьКонецЭлемента(); Запись.ЗаписатьНачалоЭлемента("ProdName"); Запись.ЗаписатьТекст(""+Выборка.Наименование); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; Запись.ЗаписатьКонецЭлемента(); //Запись = Запись.Закрыть(); Возврат Запись; КонецФункции Как видите, пытаюсь вернуть запись XML, но всё портит тип возвращаемого значения функции - строка. Какой тип возвращаемого значения соответствует XML? |
|||
1
Serginio1
19.10.11
✎
15:37
|
Да уж. Вообще то есть такое поняти XDTO пакеты,Типы Объектов, ФабрикаXDTO. Копай в этом направлении
|
|||
2
Svirepy
19.10.11
✎
15:40
|
Неужто придется создавать свой пакет только для того, чтобы передать кусок XMLя не в виде текста? УЖАС!!
|
|||
3
Serginio1
19.10.11
✎
15:48
|
А ты как думал. Но для C# например это будет сгенерен класс, с котрорым удобно работать.
Для этого и существует XML схемы (.xsd). Так же и из 1С Прокси.ФабрикаXDTO использует это описание. Многие кстати предпочитают передавать XML через строку, но это та неудобно пользователям |
|||
4
Svirepy
19.10.11
✎
15:55
|
В принципе, он и в строке ничего так, тока выглядит примерно вот так:
<Article>3546516</Article> :) вот гадство... А ничего по-хитрому не удастся сделать? Без создания XDTO пакетов, попроще-то? У меня с пакетами непонятки на принимающей стороне - пространство имен не видно, что ли... Не умею я с пакетами общаться, одним словом. |
|||
5
DmitrO
19.10.11
✎
16:02
|
Возврат Запись.Закрыть();
ну а так-то чем не понравилось? будет именно то, что ты хочешь. |
|||
6
Svirepy
19.10.11
✎
16:06
|
Именно потому, что угловые скобки преобразуются в кракозябры...
|
|||
7
Svirepy
19.10.11
✎
16:12
|
Может это быть проблемой PHP? Вряд ли, наверное, потому что весь остальной результат запроса приходит в прекрасно отображаемых угловых скобках...
|
|||
8
DmitrO
19.10.11
✎
16:49
|
По идее, клиент веб-сервиса должен сделать обратное преобразование.
Символы < > и т.п. в составе строки, через XML в чистом виде передать ведь невозможно, т.к. для формата XML это служебные символы. Также как и для html например. |
|||
9
Svirepy
19.10.11
✎
17:00
|
У меня текстовая строка выглядит вот так:
<Product> <Article/> <ProdName> Cu (2.5..50) 1комплект-3шт OZXT1 д ляOT45...125</ProdName> <Article>TRV00850</Article> <ProdName>1 КАБЕЛЬ RJ45/RJ45 (ВИЛ. ЧАСТЬ) L = 5 М</ProdName> <Article>TRV00803</Article> <ProdName>10 КАБЕЛЕЙ RJ45/RJ45 (ВИЛ. ЧАСТЬ) L=0.3М</ProdName> <Article>TRV00806</Article> <ProdName>10 КАБЕЛЕЙ RJ45/RJ45 (ВИЛ. ЧАСТЬ) L=0.6М</ProdName> </Product> Тип возвращаемого значения функции - строка. Даже если я передаю не вот эту строку, а сам объект ЗаписьXML, результат в обоих случаях выглядит вот так: <Product&dt; <Article/&dt; <ProdName&dt; Cu (2.5..50) 1комплект-3шт OZXT1 д ляOT45...125</ProdName&dt; <Article&dt;TRV00850</Article&dt; <ProdName&dt;1 КАБЕЛЬ RJ45/RJ45 (ВИЛ. ЧАСТЬ) L = 5 М</ProdName&dt; <Article&dt;TRV00803</Article&dt; <ProdName&dt;10 КАБЕЛЕЙ RJ45/RJ45 (ВИЛ. ЧАСТЬ) L=0.3М</ProdName&dt; <Article&dt;TRV00806</Article&dt; <ProdName&dt;10 КАБЕЛЕЙ RJ45/RJ45 (ВИЛ. ЧАСТЬ) L=0.6М</ProdName&dt; </Product&dt; Даже если я просто собираю строку из текстовых блоков, окракозябривается текст обязательно. Можно ли обойтись БЕЗ создания пакета XDTO? Меня просто вымораживает эта ситуация... |
|||
10
Serginio1
19.10.11
✎
17:03
|
Результат где? Какой результат возвращает при обращение в Вэб сервису из 1С?
|
|||
11
Serginio1
19.10.11
✎
17:04
|
Всегда тест нужно начинать из 1С, можно выловить большую часть ошибок в удобочитаемом виде.
|
|||
12
Scooter
19.10.11
✎
17:04
|
(3)мне тож интересна тема
а можешь плиз привести пример |
|||
13
Serginio1
19.10.11
✎
17:09
|
(12) Через Пакеты XDTO ты описываешь свои данные. Данные могут быть как структурой так и массивом или списком структур или примитивных типов.
Для того что бы создать массив нужно указать минимальное количество 0, максимальное количество размер массива, для списка это -1. Ну и выдумать свое пространство имен. Все достаточно просто. |
|||
14
Svirepy
19.10.11
✎
17:10
|
Результат с кракозябрами возвращается из 1С в обработчик PHP. В самой 1С (во внешнем отчете) все со скобками, как и должно быть.
|
|||
15
Serginio1
19.10.11
✎
17:14
|
Значит PHP не обрабатывает экранирующие символы.
|
|||
16
Asmody
19.10.11
✎
17:17
|
(9) правильно всё оно передаёт. только надо вспомнить, что у SOAP внутре XML, и твою строку с XML он приводит с безопасному виду. А в php есть вот такое http://ru.php.net/manual/en/function.html-entity-decode.php должно помочь
|
|||
17
Serginio1
19.10.11
✎
17:20
|
||||
18
Scooter
19.10.11
✎
17:21
|
(13)а ну всё понял
(14)смотри(13) |
|||
19
Svirepy
19.10.11
✎
17:22
|
Спасибо, буду разбираться.
|
|||
20
Serginio1
19.10.11
✎
17:35
|
||||
21
Serginio1
19.10.11
✎
17:42
|
||||
22
Scooter
19.10.11
✎
17:45
|
(20)(21)спс
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |