Вход | Регистрация
 

1С веб-сервис с пустым множественным параметром

1С веб-сервис с пустым множественным параметром
Я
   mzelensky
 
13.05.19 - 12:44
Доброго всем!

Настраиваю XDTO схему для веб-сервиса. Имеется параметр "ChildrenList" тип данных равен "ChildrenLine" и описан в этой же схеме XDTO. Настройки для параметра "ChildrenList" следующие:

Мин. значение = 0
Макс значение = -1
Возможно пустое значение = Истина

Т.е. в этот параметр передается список данных. При этом список может быть заполненным, а может быть ПУСТЫМ + параметр "ChildrenList" может вообще ОТСУТСТВОВАТЬ.

Проблема в том, что я НЕ могу допиться того, чтобы параметр "ChildrenList" стал "Неопределено". Если указываю в обращении к веб-сервису параметр "ChildrenList", то система требует его заполнить и тогда я имею заполненный список (либо пустой). А если я вообще НЕ указываю параметр "ChildrenList", то в веб-сервис все-равно приходит "ChildrenList" с типом "СписокXDTO"
 
 
   mzelensky
 
1 - 13.05.19 - 12:45
(0) + Для единичного поля со свойствами:

Мин. значение = 0 
Макс значение = 1 
Возможно пустое значение = Истина

все отрабатывает НОРМАЛЬНО

А вот проблема именно со множественным типом
   mzelensky
 
2 - 13.05.19 - 12:47
   mzelensky
 
3 - 13.05.19 - 12:47
   mzelensky
 
4 - 13.05.19 - 12:52
Наковырял вот нечто похожее в инете:

http://1centerprise8.blogspot.com/2015/02/nilwebservice.html

Но там тип примитивный, а у меня собственный. Да и хотелось бы обойтись без правок xml-ки
   mzelensky
 
5 - 13.05.19 - 13:49
ап
   Fragster
 
6 - 13.05.19 - 13:55
ОбъектXDTO.Свойство = Неопределено и ОбъектXDTO.Установить("Свойство", Неопределено), я так понимаю, не пробовал?
   mzelensky
 
7 - 13.05.19 - 14:28
(6) Если ты говоришь за сторону, которая отправляет данные, то нет не пробовал, т.к. это делает САЙТ, а не платформа 1С. А следовательно типа "Неопределено" там нет.

Но если попробовать передать "Null" то будет ошибка.

Равно как и если сделать так "<upd:ChildrenList></upd:ChildrenList>"
   Fragster
 
8 - 13.05.19 - 14:50
(7) если это делает сайт, то его и нужно править. Что-то типа: <upd:ChildrenList xsi:nil="true"/>. а на принимающей стороне все правильно у тебя работает.
   Fragster
 
9 - 13.05.19 - 14:53
ни или какое там у тебя пространство имен для http://www.w3.org/2001/XMLSchema-instance
   Fragster
 
10 - 13.05.19 - 14:53
ну
   mzelensky
 
11 - 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"/>

?
   Fragster
 
12 - 13.05.19 - 15:00
вместо массива пихнуть NULL
   mzelensky
 
13 - 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 строкой данных (с одним элементом), значение в элементе было "НеопределенО"
   Fragster
 
14 - 13.05.19 - 15:05
ну примерно так и должно быть :)
   Fragster
 
15 - 13.05.19 - 15:06
а чем пустой список не устраивает?
   mzelensky
 
16 - 13.05.19 - 15:08
(15) По логике задачи не устраивает.

Мне нужно отработать 3 состояния:
1) Списка нет вообще, т.е. = "Неопределено" - значи параметр вообще не передавали. Ничего не делаем.
2) Список есть ,но он ПУСТОЙ - значит нужно очистить имеющиеся данные
3) Список есть и в нем есть значения - обработать эти значения

А в результате я не могу отделить событие "1" от события "2". Т.к. не могу добиться, чтобы параметр "ChildrenList" принимал значение "Неопределено"...как это работает с аналогичным одиничным параметром
   mzelensky
 
17 - 13.05.19 - 15:11
Пока в голову приходит только ввести еще один единичный параметр, что-то вроде "ОбработатьChildrenList". И передавать туда "Истина"\"ложь".
Если событие "1", то будет "ложь"
Если события "2" или "3", то будет "истина"
   Fragster
 
18 - 13.05.19 - 15:15
делай
<list> <- минимальное количество = 0 максимальное = 1. ну или 1 и 1, но возможно пустое.
<element/>  <- минимальное количество = 0 максимальное = -1
</list>

тогда если нет list (для варианта с возможно пустое - если там непоределено) - это список вообще не отправлен, а далее список из свойств element
   mzelensky
 
19 - 13.05.19 - 15:25
(18) Ну или так. Сут ьв целом понятно.

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.