|
Передача таблицы значений из веб-сервиса | ☑ | ||
---|---|---|---|---|
0
toypaul
гуру
22.02.22
✎
12:11
|
ТаблицаОборотов - таблица значений. передаю ее в методе веб-сервиса вот так
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO); DataSet = Сериализатор.ЗаписатьXDTO(ТаблицаОборотов); DataSet - выходная переменная с типом ValueTable (http://v8.1c.ru/8.1/data/core) в результате вызова метода выдается ошибка типа "кривой XML" есть запасной вариант передавать просто как строку, но сначала хочется понять можно ли сделать красиво |
|||
1
toypaul
гуру
22.02.22
✎
12:12
|
Каких-то дополнительных пакетов XDTO делать не хочется
|
|||
2
Kassern
22.02.22
✎
12:17
|
(1) если дополнительный пакет лень создавать, то можно в виде массива попробовать выгрузить:
Массив=Новый Массив; Для каждого Колонка из ТаблицаЗначений цикл Массив.Добавить(ТаблицаЗначений.ВыгрузитьКолонку(Колонка)); КонецЦикла; |
|||
3
toypaul
гуру
22.02.22
✎
12:23
|
(2) если склоняться к извращениям, то я тогда выберу передачу ТЗ в виде строки
|
|||
4
Momus
22.02.22
✎
12:39
|
а нельзя просто тз сериализовать в объект XDTO, а затем его записать в XML? Что-то типа
ТЗВXDTO = СериализаторXDTO.ЗаписатьXDTO(ТЗ); ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ТЗВXDTO); ПараметрСервиса = ЗаписьXML.Закрыть(); В модуле вэб-сервиса десериализовать обратно в ТЗ |
|||
5
toypaul
гуру
22.02.22
✎
12:43
|
(4) наверное можно. но это более длинный изврат с передачей в строку :)
|
|||
6
Кац
22.02.22
✎
12:45
|
дык в конечном этоге любой объект сериализуется в текстовую строку :)
|
|||
7
FIXXXL
22.02.22
✎
12:59
|
(0) попробуй ТЗ обернуть в ХранилищеЗначения и потом сериализовать
|
|||
8
FIXXXL
22.02.22
✎
13:02
|
(7) + все ли типы значений в ТЗ сериализуются?
|
|||
9
hhhh
22.02.22
✎
13:10
|
(5) ну вот же из бсп, что-то вы ерундой страдаете.
Функция ЗначениеВСтрокуXML(Значение) Экспорт ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); Возврат ЗаписьXML.Закрыть(); КонецФункции |
|||
10
Garykom
гуру
22.02.22
✎
15:02
|
(0) Выкинь уже XML на свалку и юзай JSON
|
|||
11
BaZZiL
22.02.22
✎
15:42
|
Как структура данных для передачи таблица избыточна.
Каждую строку таблицы в структуру, структуры в массив, массив в JSON, профит. |
|||
12
Garykom
гуру
22.02.22
✎
15:45
|
(11) строки в массив, поля строки в структуру
обычно порядок колонок не важен, в отличие от порядка строк в ТЗ |
|||
13
ДедМорроз
23.02.22
✎
11:28
|
Таблица значений - это тип,который придуман только в 1с - поэтому,его можно преобразовать в массив структур(объектов)или в двумерный массив,тогда механизмы web-сервиса чмогут впм помочь.
Когда вы возвращаете сериализованную строку,то,во-первых,нужно помнить,что стандартная сериализация использует метаданные базы,и на другой базе такое значение может не прочитаться. Можете сделать свою сериализацию,которая исключает попадание не полностью оформленных объектов. ЗначениеВСтрокуВнутр использовать для обмена между базами крайне не рекомендуется. |
|||
14
hhhh
23.02.22
✎
11:31
|
(13) ну да, в тз должны быть поля только примитивных типов: строка, число, дата, булево.
|
|||
15
ДедМорроз
23.02.22
✎
11:35
|
(14)можно описать и влрженные тщ,если их описывать как массив.
Смысл web-сервиса в удаленном выполнении процедуры,когда одно приложение через описание wsdl получает у себя имитацию функции для передачи параметров и получения результата,а другое приложение,в котором эта функция находится,получает механизм ее вызова без необходимости реализовывать прикладной уровень. Но типы значений параметров достаточно ограничены,так как должны пониматься любыми приложениями. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |