|
ОбъектXDTO, тип anyType, Текст | ☑ | ||
---|---|---|---|---|
0
AlexSTAL
11.03.19
✎
12:00
|
В прошлом году создавал тему, ответа не получил... нашёл обходной путь в конкретной задаче, забросил поиск решения.
Производитель обновил свой продукт, потребовалось всё же найти решение... Один из аргументов вызываемого WS-сервисом метода имеет тип "anyType", хотя по факту должно быть число. Разработчики прислали образец параметров XML-запроса: <arg1 xsi:nil="true"/> <arg2 xsi:type="xsd:int">0</arg2> из него видно, что для arg2 добавляется атрибут "xsi:type" со значением "xsd:int", а само значение записывается в #text В 1С создаю атрибут: Объект1 = СервТехЭксперт.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "anyType")); ЗначениеАтрибута = СервТехЭксперт.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"), "xsd:integer"); Объект1.Добавить(ФормаXML.Атрибут, "http://www.w3.org/2001/XMLSchema", "xsi:type", ЗначениеАтрибута); и пытаюсь добавить в Последовательность #Текст: ТекПоследовательность = Объект1.Последовательность(); ТекПоследовательность.Добавить("777720109"); Выдаёт ошибку "Недостаточно фактических параметров", хотя в справке сказано: ПоследовательностьXDTO (XDTOSequence) Добавить (Add) Вариант синтаксиса: Добавить текст Синтаксис: Добавить(<Текст>) Параметры: <Текст> (обязательный) Тип: Строка. Текст, добавляемый в последовательность. На ИТС прочитал, что Появление элементов последовательности, представляющих фрагменты текста, допустимо только для объектов типов, у которых значение свойства Смешанный равно Истина. Посмотрел - Истина Пошёл другим путём. Перед добавлением текста к последовательности записал в XML-файл ОбъектXDTO, добавил туда #text, загрузил обратно из XML-файла - работает! Бинго! Но как добавить текст без такого извращения с записью/модификацией/чтением XML-файла? |
|||
1
Cyberhawk
11.03.19
✎
12:02
|
Привыкай к извращениям
|
|||
2
AlexSTAL
11.03.19
✎
12:04
|
(1) Ну если это работает через загрузку, то и напрямую должно же!
На одном из форумов нашёл, что Последовательность() появляется только после ЗаписиXML (без конкретики)... Испробовал множество вариантов, не взлетает |
|||
3
Cyberhawk
11.03.19
✎
12:23
|
(2) Не должно. Вот тебе, например, пример, когда информация теряется при таких манипуляциях "туда-сюда" в объектной модели 1С: XSD: Аннотация, документация [дубль 2]
|
|||
4
Fragster
гуру
11.03.19
✎
12:38
|
проще всего сделать свой wsdl
|
|||
5
Fragster
гуру
11.03.19
✎
12:39
|
и вместо any type пихнуть туда int и nullable
|
|||
6
AlexSTAL
11.03.19
✎
13:15
|
(4) Может быть, но это то же как-то не правильно... Да и как туда добавить атрибут "xsi:type" со значением "xsd:int" не понимаю, потому что при выполнении запроса с просто числом происходит ошибка сервиса
|
|||
7
AlexSTAL
11.03.19
✎
13:17
|
В общем до выяснения сделал вот так вот:
Поток = Новый ПотокВПамяти(); Запись = Новый ЗаписьXML; Запись.ОткрытьПоток(Поток); Запись.ЗаписатьОбъявлениеXML(); Запись.ЗаписатьНачалоЭлемента("anyType"); Запись.ЗаписатьАтрибут("xmlns", "http://www.w3.org/2001/XMLSchema"); Запись.ЗаписатьАтрибут("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); Запись.ЗаписатьТекст("777720109"); Запись.ЗаписатьКонецЭлемента(); Запись.Закрыть(); Поток.Перейти(0, ПозицияВПотоке.Начало); Чтение = Новый ЧтениеXML; Чтение.ОткрытьПоток(Поток); Объект1 = ФабрикаXDTO.ПрочитатьXML(Чтение); Чтение.Закрыть(); Поток.Закрыть(); ЗначениеАтрибута = СервWS.ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"), "xsd:integer"); Объект1.Добавить(ФормаXML.Атрибут, "http://www.w3.org/2001/XMLSchema", "xsi:type", ЗначениеАтрибута); |
|||
8
AlexSTAL
22.03.19
✎
12:06
|
Если кому интересно, то это ошибка платформы, исправлена в 8.3.14
В ранних платформах можно обойти: ТекПоследовательность.Добавить("777720109", Неопределено); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |