|
Как закинуть XML в XDTO? | ☑ | ||
---|---|---|---|---|
0
vicof
18.05.15
✎
13:49
|
Парам = СериализаторXDTO.ЗаписатьXDTO(ТекстХМЛ);
Прокси.process(Парам); ТекстХМл - это ХМЛ в виде текстовой строки. При обращении к веб-сервису на сервер уходит пакет в виде: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <request xmlns="http://www.cft.ru/schemas/cit_type" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SYSTEM> <BP_ID Value="SLV_AHR_IU"/> <CIT_Version Value="1.0"/> <ERR Value=""/> <FORMAT Value="XML"/> <INTERFACE_RET Value=""/> <MAIN_ID Value=""/> <MSG_ID Value="1"/> <SYNC Value="N"/> <SYS_ID Value="SLV_1C"/> <TAR_ID Value="IBSO_DISTR"/> <Version Value="002"/> </SYSTEM> <DATA> <ReqAhrIU> <BEGIN_> <ahr> <BEGIN_> <guid Value="123-123-123-123"/> <dateOp Value="2015-05-12"/> <code Value="1"/> <amt Value="1000.01"/> <typeOp Value="SLV_PAY"/> <servOp Value="SLV_SERV1"/> </BEGIN_> </ahr> </BEGIN_> </ReqAhrIU> </DATA></request></soap:Body> </soap:Envelope> Как сделать так, чтобы 1С-ка не экранировала символы угловых скобок при отправке? |
|||
1
DmitrO
18.05.15
✎
13:54
|
надо сделать так, чтобы тип параметра был не string, а anyType
|
|||
2
Fragster
гуру
18.05.15
✎
13:55
|
(1) но и тогда не уйдет
|
|||
3
Fragster
гуру
18.05.15
✎
13:55
|
(0) что конкретно нужно?
|
|||
4
Fragster
гуру
18.05.15
✎
13:56
|
правильнее всего импортировать схему XSD в конфигурацию, создать объектXDTO нужного типа, заполнить его свойства и передавать его
|
|||
5
vicof
18.05.15
✎
13:56
|
(1) Тип паараметра как раз anyType
|
|||
6
Fragster
гуру
18.05.15
✎
13:57
|
можно не импортировать, но тогда некрасиво с .Добавить надо извращаться
|
|||
7
vicof
18.05.15
✎
13:57
|
(3) Нужно передать XML методу веб-сервиса, чтобы он его могу распарсить.
|
|||
8
Fragster
гуру
18.05.15
✎
13:58
|
есть один способ, добавить в XML пространство имен сервиса, прочитать его в объект XDTO, а его уже передать. но это - извращение.
|
|||
9
vicof
18.05.15
✎
13:58
|
*он его мог распарсить
|
|||
10
Fragster
гуру
18.05.15
✎
13:58
|
(7) откуда этот XML взялся?
|
|||
11
vicof
18.05.15
✎
13:58
|
(10) Прислали разработчики веб-сервиса
|
|||
12
Fragster
гуру
18.05.15
✎
13:59
|
(11) теперь пусть XSD пришлют. или WSDL.
|
|||
13
DmitrO
18.05.15
✎
14:00
|
(5)тогда попросту передавай объект XDTO а не строку
|
|||
14
DmitrO
18.05.15
✎
14:02
|
anyType, он на то и anyType, что может быть любым типом, как простым так и комплексным.
|
|||
15
vicof
18.05.15
✎
14:03
|
(12)(13) Не, вы не поняли. WSDL есть - описывает веб-сервис. Параметры, методы и т.п.
Я вызываю метод этого веб-сервиса, и передаю туда параметр типа anyType, преобразовывая его к строке в виде ХМЛ. В результате (0). Определение = Новый WSОпределения("\\localhost\Share\ProviderTA2.wsdl"); Прокси = Новый WSПрокси(Определение, "http://www.xxx.ru", "ProviderTA", "ProviderTASOAPBindingType"); Парам = СериализаторXDTO.ЗаписатьXDTO(ЗаписьХМЛ); Прокси.process(Парам); |
|||
16
vicof
18.05.15
✎
14:04
|
Но все, что сожержится в Парам, экранируется, чтобы получился корректный ХМЛ
|
|||
17
vicof
18.05.15
✎
14:05
|
(13) Парам = СериализаторXDTO.ЗаписатьXDTO(ЗаписьХМЛ);
как раз и формирует объектХДТО |
|||
18
Fragster
гуру
18.05.15
✎
14:06
|
вместо того, чтобы юзать ЗаписьXML, юзай Объект = ФабрикаXDTO.Создать(Фабрика.Тип(ПространстовИмен,ИмяТипа));
Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Объект.Свойство = ... Прокси.Процесс(Объект) |
|||
19
Serginio1
18.05.15
✎
14:07
|
18+ Прокси. добавить
Объект = Прокси.ФабрикаXDTO.Создать(Прокси.Фабрика.Тип(ПространстовИмен,ИмяТипа)); |
|||
20
Fragster
гуру
18.05.15
✎
14:08
|
(17) не совсем так.
|
|||
21
DmitrO
18.05.15
✎
14:08
|
(17)начнем с того, что ЗаписатьXML по документации вроде как ничего не возвращает )
|
|||
22
vicof
18.05.15
✎
14:08
|
(18)(19) Щас попробую
|
|||
23
vicof
18.05.15
✎
14:10
|
(21) Сорри, это я уже тут пробовал отлаживать, Там не ЗаписьXML, там текстовая строка
|
|||
24
Serginio1
18.05.15
✎
14:12
|
Тебе все нужно делать через методы Прокси.ФабрикаXDTO
|
|||
25
Serginio1
18.05.15
✎
14:13
|
(23) Не проходит так строка
anyType в XDTO |
|||
26
vicof
18.05.15
✎
14:14
|
(20)(24)
Объект = Прокси.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "anyType")); Отлично, создался объект XDTO. Без свойств, поскольку это anyType. Как теперь я туда теперь произвольный XML запихну? |
|||
27
vicof
18.05.15
✎
14:17
|
Чтобы он встроился между
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">; <soap:Header/> <soap:Body> <request xmlns="http://www.cft.ru/schemas/cit_type"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ВОТ СЮДА ВОТ </request></soap:Body> </soap:Envelope> и воспринялся как часть запроса, отправляемого на сервер |
|||
28
Fragster
гуру
18.05.15
✎
14:18
|
скинь на http://pastebin.com/ WSDL
|
|||
29
DmitrO
18.05.15
✎
14:19
|
(26)ну по идее тебе изначально надо строить объект XDTO а не строку, или у тебя иначально есть откуда-то строка и ты ее не строишь?
|
|||
30
Serginio1
18.05.15
✎
14:20
|
(26) Зачем тебе anyType? Создавай уже по известному типу. Либо как я уже тебе писал v8: Тип AnyType в Веб-сервисах и массив
Только создавай свой объект через Прокси.ФабрикаXDTO |
|||
31
DmitrO
18.05.15
✎
14:22
|
(30)у него может и типа-то в схеме такого нет
|
|||
32
vicof
18.05.15
✎
14:23
|
(31) ты понял :) Нету типа, просто левый ХМЛ, нужный сторонней системе.
(28) http://pastebin.com/ZVa8FKQw |
|||
33
Serginio1
18.05.15
✎
14:24
|
(31) Тогда 2 решения
Прокси.ФабрикаXDTO.ПрочитатьXML(<ЧтениеXML>, <Тип>) либо формировать через anyType как в v8: Тип AnyType в Веб-сервисах и массив |
|||
34
Fragster
гуру
18.05.15
✎
14:25
|
и правда нету типов, передавай что как хочешь
|
|||
35
Fragster
гуру
18.05.15
✎
14:28
|
тогда так:
|
|||
36
Fragster
гуру
18.05.15
✎
14:28
|
ОбъектXDTO (XDTODataObject)
Добавить (Add) Вариант синтаксиса: Установка значения нового произвольного свойства Синтаксис: Добавить(<Форма>, <URIПространстваИмен>, <ЛокальноеИмя>, <ЭлементДанных>) Параметры: <Форма> (обязательный) Тип: ФормаXML. Форма XML представления произвольного свойства. Может принимать значения Элемент или Атрибут. <URIПространстваИмен> (обязательный) Тип: Строка. URI пространства имен XML представления произвольного свойства. <ЛокальноеИмя> (обязательный) Тип: Строка. Локальное имя произвольного свойства. <ЭлементДанных> (обязательный) Тип: ЗначениеXDTO; ОбъектXDTO. Элемент данных XDTO (значение или объект), являющийся значением произвольного свойства. Описание варианта метода: Имя свойства будет создано автоматически, на основе локального имени XML представления свойства. В случае, если произвольное свойство с полученным именем уже существует и если предыдущая установка значения произвольного свойства выполнялась для данного произвольного свойства, либо другого свойства в случае наличия последовательности, свойство становится списковым с неограниченной верхней границей. В противном случае будет инициировано исключение. Тип создаваемого свойства всегда устанавливается anyType пространства имен схемы XML. |
|||
37
vicof
18.05.15
✎
14:31
|
(33) (36) Так нельзя - появляется новый тэг, в котором будет нужный ХМЛ. Этого тэга быть не должно.
|
|||
38
vicof
18.05.15
✎
14:39
|
+(37) Поэтому и сделал через СериализаторXDTO.ЗаписатьXDTO(ТекстСМоимХМЛ);
но в таком виде экранируются угловые скобки. |
|||
39
Fragster
гуру
18.05.15
✎
14:40
|
(37) выкинь нафиг тот текст XML, которые есть у тебя
|
|||
40
vicof
18.05.15
✎
14:43
|
(39) Отлично, а что взамен?
|
|||
41
Serginio1
18.05.15
✎
14:43
|
(37) Фрмируй свой объект с нужными тебе тегами
Еще раз ЧтениеХМЛ= новый ЧтениеXML; ЧтениеХМЛ.ОткрытьФайл(ИмяФайла);//УстановитьСтроку возврат Прокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ); XDTO атрибуты и свойства |
|||
42
Fragster
гуру
18.05.15
✎
14:43
|
(39)+ либо преобразуй его в объектXDTO
|
|||
43
Serginio1
18.05.15
✎
14:44
|
ЧтениеХМЛ= новый ЧтениеXML;
ЧтениеХМЛ.УстановитьСтроку(твояСтрока); Парам=Прокси.ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ); |
|||
44
Fragster
гуру
18.05.15
✎
14:44
|
я предлагаю вместо формирования XML формировать объект
|
|||
45
vicof
18.05.15
✎
14:50
|
(43) Супер, сработало :) Ставлю 100 лайков, благодарю. Если хочешь, можем пива сходить попить за мой счет.
|
|||
46
Fragster
гуру
18.05.15
✎
14:55
|
а смысл где-то в коде формировать XML, а потом преобразовывать его в объект XDTO? Лично мне такое пришлось делать только когда у меня реально на входе был XML. Подозреваю, что у автора не тот случай.
|
|||
47
Serginio1
18.05.15
✎
14:58
|
(45) Спасибо. Не пью. На здоровье.
|
|||
48
vicof
18.05.15
✎
15:03
|
(46) У автора такой случай. Возможно, такой уклад изменится, но пока так.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |