|   |   | 
| 
 | 1С веб-сервис с пустым множественным параметром | ☑ | ||
|---|---|---|---|---|
| 0
    
        mzelensky 13.05.19✎ 12:44 | 
        Доброго всем!
 Настраиваю XDTO схему для веб-сервиса. Имеется параметр "ChildrenList" тип данных равен "ChildrenLine" и описан в этой же схеме XDTO. Настройки для параметра "ChildrenList" следующие: Мин. значение = 0 Макс значение = -1 Возможно пустое значение = Истина Т.е. в этот параметр передается список данных. При этом список может быть заполненным, а может быть ПУСТЫМ + параметр "ChildrenList" может вообще ОТСУТСТВОВАТЬ. Проблема в том, что я НЕ могу допиться того, чтобы параметр "ChildrenList" стал "Неопределено". Если указываю в обращении к веб-сервису параметр "ChildrenList", то система требует его заполнить и тогда я имею заполненный список (либо пустой). А если я вообще НЕ указываю параметр "ChildrenList", то в веб-сервис все-равно приходит "ChildrenList" с типом "СписокXDTO" | |||
| 1
    
        mzelensky 13.05.19✎ 12:45 | 
        (0) + Для единичного поля со свойствами:
 Мин. значение = 0 Макс значение = 1 Возможно пустое значение = Истина все отрабатывает НОРМАЛЬНО А вот проблема именно со множественным типом | |||
| 2
    
        mzelensky 13.05.19✎ 12:47 | ||||
| 3
    
        mzelensky 13.05.19✎ 12:47 | ||||
| 4
    
        mzelensky 13.05.19✎ 12:52 | 
        Наковырял вот нечто похожее в инете:
 http://1centerprise8.blogspot.com/2015/02/nilwebservice.html Но там тип примитивный, а у меня собственный. Да и хотелось бы обойтись без правок xml-ки | |||
| 5
    
        mzelensky 13.05.19✎ 13:49 | 
        ап     | |||
| 6
    
        Fragster гуру 13.05.19✎ 13:55 | 
        ОбъектXDTO.Свойство = Неопределено и ОбъектXDTO.Установить("Свойство", Неопределено), я так понимаю, не пробовал?     | |||
| 7
    
        mzelensky 13.05.19✎ 14:28 | 
        (6) Если ты говоришь за сторону, которая отправляет данные, то нет не пробовал, т.к. это делает САЙТ, а не платформа 1С. А следовательно типа "Неопределено" там нет.
 Но если попробовать передать "Null" то будет ошибка. Равно как и если сделать так "<upd:ChildrenList></upd:ChildrenList>" | |||
| 8
    
        Fragster гуру 13.05.19✎ 14:50 | 
        (7) если это делает сайт, то его и нужно править. Что-то типа: <upd:ChildrenList xsi:nil="true"/>. а на принимающей стороне все правильно у тебя работает.     | |||
| 9
    
        Fragster гуру 13.05.19✎ 14:53 | 
        ни или какое там у тебя пространство имен для http://www.w3.org/2001/XMLSchema-instance     | |||
| 10
    
        Fragster гуру 13.05.19✎ 14:53 | 
        ну     | |||
| 11
    
        mzelensky 13.05.19✎ 14:56 | 
        (9) НА сайте они вот так обращаются:
 ( [DiscountCard] => Array ( [Id] => 8899900000808 [ShopId] => BK ) [ChildrenList] => Array ( [0] => Array ( [Name] => Mike [DateOfBirth] => 2014-10-18 [Sex] => BOY ) ) ) Как в этом случае сделать: Что-то типа: <upd:ChildrenList xsi:nil="true"/> ? | |||
| 12
    
        Fragster гуру 13.05.19✎ 15:00 | 
        вместо массива пихнуть NULL     | |||
| 13
    
        mzelensky 13.05.19✎ 15:04 | 
        Сейчас через SoupUI попробовал вот так:
 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exc="ExchangeDataWithSite" xmlns:upd="UpdateDiscountCard"> <soapenv:Header/> <soapenv:Body> <exc:UpdateDiscountCard> <exc:DiscountCard> <upd:Id>8888000017870</upd:Id> <upd:ShopId>BK</upd:ShopId> <!--Zero or more repetitions:--> <upd:ChildrenList xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></upd:ChildrenList> </exc:DiscountCard> </exc:UpdateDiscountCard> </soapenv:Body> </soapenv:Envelope> т.е. добавил: <upd:ChildrenList xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></upd:ChildrenList> Запрос отработал, ошибки нет, НО все-равно не так, как нужно. В итоге на сторону 1С пришел параметр "ChildrenList" типом данных "СписокXDTO" с 1 строкой данных (с одним элементом), значение в элементе было "НеопределенО" | |||
| 14
    
        Fragster гуру 13.05.19✎ 15:05 | 
        ну примерно так и должно быть :)     | |||
| 15
    
        Fragster гуру 13.05.19✎ 15:06 | 
        а чем пустой список не устраивает?     | |||
| 16
    
        mzelensky 13.05.19✎ 15:08 | 
        (15) По логике задачи не устраивает.
 Мне нужно отработать 3 состояния: 1) Списка нет вообще, т.е. = "Неопределено" - значи параметр вообще не передавали. Ничего не делаем. 2) Список есть ,но он ПУСТОЙ - значит нужно очистить имеющиеся данные 3) Список есть и в нем есть значения - обработать эти значения А в результате я не могу отделить событие "1" от события "2". Т.к. не могу добиться, чтобы параметр "ChildrenList" принимал значение "Неопределено"...как это работает с аналогичным одиничным параметром | |||
| 17
    
        mzelensky 13.05.19✎ 15:11 | 
        Пока в голову приходит только ввести еще один единичный параметр, что-то вроде "ОбработатьChildrenList". И передавать туда "Истина"\"ложь".
 Если событие "1", то будет "ложь" Если события "2" или "3", то будет "истина" | |||
| 18
    
        Fragster гуру 13.05.19✎ 15:15 | 
        делай
 <list> <- минимальное количество = 0 максимальное = 1. ну или 1 и 1, но возможно пустое. <element/> <- минимальное количество = 0 максимальное = -1 </list> тогда если нет list (для варианта с возможно пустое - если там непоределено) - это список вообще не отправлен, а далее список из свойств element | |||
| 19
    
        mzelensky 13.05.19✎ 15:25 | 
        (18) Ну или так. Сут ьв целом понятно.
 Но все-равно какое-то извращение получается. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |