|   |   | 
| 
 | Отличие ЗаполнитьЗначенияСвойств() от явного мапинга. Проблема с Веб-сервисом. | ☑ | ||
|---|---|---|---|---|
| 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" и висеть регулярка на проверку значения. Пустая строка по регулярке выпадет в ошибку. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |