Имя: Пароль:
1C
 
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) Ну или так. Сут ьв целом понятно.

Но все-равно какое-то извращение получается.