|
Отличие ЗаполнитьЗначенияСвойств() от явного мапинга. Проблема с Веб-сервисом. | ☑ | ||
---|---|---|---|---|
0
Strogg
30.03.22
✎
13:40
|
Всем привет.
Пилю интеграцию со сторонней системой через soap. Обмен происходит плоскими таблицами. Для этого создал вебсервис и xdto пакет, который описывает мою таблицу значений. Сам сервис работает, вопросов нет, проверяю его через SoapUI все четко. На стороне приемника wsdl распарсен и все поля видны. Проблема в том, что если я заполняю свой XDTO через ЗаполнитьЗначенияСвойств(СтрокаXDTOПакета, СтрокаТЗ) - ЗНАЧЕНИЯ полей не передаются - остаются пустыми на стороне приемника. Если же делаю явный мапинг по типу СтрокаXDTOПакета.Поле1 = СтрокаТЗ.Поле1 и т.д. то в системе-приемнике все ок. Перед заполнением пакета пробовал типизировать свою ТЗ - результата ноль. Может кто подскажет, если кто сталкивался с подобным багом, или фичей? Да, все строки пакета - обычные string... только примитивные типы... И в таблице значений, соответственно, тоже только строки. |
|||
1
acht
30.03.22
✎
13:55
|
Показывай структуру и код
|
|||
2
p-soft
30.03.22
✎
14:01
|
(0) скажу банальность: не стоит усложнять то что усложнять не стоит. чем проще структура данных, тем быстрее идет ее обработка и тем проще понять где ошибка.
|
|||
3
Strogg
30.03.22
✎
14:10
|
вот структура из СоапУИ
https://ibb.co/XfPfyD8 а вот что видится в системе-приемнике: https://ibb.co/FKrVsNn .... код самый элементарный: ТаблицаЗначенийТип = ФабрикаXDTO.Тип("http://gapclientscrm.ru", "ValueTable"); СтрокаТЗТип = ФабрикаXDTO.Тип("http://gapclientscrm.ru", "TableString"); ВыхТаблица = ФабрикаXDTO.Создать(ТаблицаЗначенийТип); Для каждого стр из ТзДляВыгрузки Цикл СтрокаТЗ = ФабрикаXDTO.Создать(СтрокаТЗТип); ЗаполнитьЗначенияСвойств(СтрокаТЗ, стр); ВыхТаблица.Composition.Добавить(СтрокаТЗ); КонецЦикла; Возврат ВыхТаблица; Вот здесь, ЗаполнитьЗначениясвойств не работает, а поименное присвоение - работает... |
|||
4
hhhh
30.03.22
✎
14:20
|
(3) ну сделайте поименное. Оно ведь быстрее работает, чем ЗаполнитьЗначенияСвойств.
|
|||
5
Strogg
30.03.22
✎
14:23
|
(4) да понятно, что если не получится - то придется делать. Хотелось бы разобраться с багом.
|
|||
6
Вафель
30.03.22
✎
14:27
|
у меня в веб сервисе такая конструкция вполне работает
|
|||
7
Вафель
30.03.22
✎
14:28
|
типы может не совпадают
|
|||
8
Strogg
30.03.22
✎
14:30
|
(7) типы в пакете везде стринг, в ТЗ явно типы задавал.
(6) это CI DS, там возможно всё, как мне рассказал администратор... причем в soapUI все изумительно смотрится... |
|||
9
Сергиус
30.03.22
✎
14:48
|
(8)В пакете может быть необычный стринг..
|
|||
10
Вафель
30.03.22
✎
14:48
|
вот пример
|
|||
11
PuhUfa
30.03.22
✎
14:48
|
А в твоей ТЗ значения этих самых полей все же Строка или Ссылки? И чем, например поле City отличается от других? Она, судя по картинкам, передается и при использовании ЗаполнитьЗначенияСвойств.
|
|||
12
Вафель
30.03.22
✎
14:50
|
У тебя фабрика по схеме задается или встроенную используешь?
|
|||
13
Strogg
30.03.22
✎
14:52
|
(11) везде строки. Я же писал анее, что типизировал ТЗ перед заполнением свойств пакета из нее.
(9) (12) стринг обычный. из w3.org, или как там ее.... а вот тз моя. |
|||
14
Вафель
30.03.22
✎
14:54
|
по отладчику сам объект(СтрокаТЗ) заполняется?
|
|||
15
Strogg
30.03.22
✎
14:56
|
(14) да. В первом скрине (https://ibb.co/XfPfyD8) все видно четко
|
|||
16
acht
30.03.22
✎
15:23
|
(15) wsdl или xsd показывай. У тебя на скриншоте нет ни ValueTable ни TableString а есть Composition.
|
|||
17
serverstar
30.03.22
✎
15:47
|
ну если SoapUI ничего не показывает...
|
|||
18
timurhv
30.03.22
✎
17:06
|
(0) Пишу руками, можно написать свою процедуру по заполнению, которая будет обходить все реквизиты 2-ого параметра и вставлять значения в 1-ый.
ЗаполнитьЗначенияСвойств - плохая конструкция: в xsd-схеме может у поля указано nillable="true" и висеть регулярка на проверку значения. Пустая строка по регулярке выпадет в ошибку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |