|
OData и коды маркировки | ☑ | ||
---|---|---|---|---|
0
BaZZiL
20.07.21
✎
12:52
|
Как найти код маркировки пользуясь интерфейсом OData?
Допустим, что (в БП 3.0) Справочник УпаковкиШтрихкодовТоваров доступен для OData. Формирую запрос типа: http://localhost/REST/odata/standard.odata/Catalog_ШтрихкодыУпаковокТоваров?$format=json& $select=Ref_Key,Номенклатура,ЗначениеШтрихкода &$filter=ЗначениеШтрихкода eq '(01)04660054763397(21)5kl+d.MajJbpx' получаю ответ вида: { "odata.metadata": "http://localhost/REST/odata/standard.odata/$metadata#Catalog_ШтрихкодыУпаковокТоваров", "value": [{ "Ref_Key": "31c35f38-b52b-11ea-811d-00155d91fb02", "ЗначениеШтрихкода": "(01)04660054763397(21)5kl+d.MajJbpx", "Номенклатура@navigationLinkUrl": "Catalog_ШтрихкодыУпаковокТоваров(guid'31c35f38-b52b-11ea-811d-00155d91fb02')/Номенклатура" }] } Но если попытаться указать значение штрихкода с "нехорошими символами", например, "(01)04660054763410(21)1;M&hMOQN_!eN" то все ломается: { "odata.error": { "code": "0", "message": { "lang": "ru", "value": "Параметр hMOQN_!eN' не поддерживается" } } } Забыть ОДату и ваять свой http сервис? |
|||
1
ДенисЧ
20.07.21
✎
12:55
|
||||
2
BaZZiL
20.07.21
✎
13:12
|
%26 вместо & прокатывает)
|
|||
3
BaZZiL
20.07.21
✎
13:36
|
Ссылка на инструкцию Честного знака об экранировании символов в кодах маркировки:
https://xn--80ajghhoc2aj1c8b.xn--p1ai/upload/iblock/d53/Рекомендуемыи%CC%86_алгоритм_экранирования_специальных_символов_в_коде_идентификации_ки.pdf |
|||
4
BaZZiL
20.07.21
✎
13:39
|
Может и в БСП есть функция ЭкранироватьСимволыВСтроке()?
|
|||
5
BaZZiL
21.07.21
✎
12:17
|
Код маркировки может содержать апострофы
$filter=ЗначениеШтрихкода eq '(01)04610063990116(21)Un+trgcG'GtRq' такой фильтр примет код '(01)04610063990116(21)Un+trgcG' отбросит последние 4 символа И что делать? |
|||
6
acht
21.07.21
✎
12:22
|
(5) > И что делать?
Ты сам-то по своей ссылке из (3) ходил, или так - похвастаться принес? |
|||
7
timurhv
21.07.21
✎
12:37
|
(4) Может подойдет:
КодироватьСтроку(<Строка>, <СпособКодированияСтроки>, <КодировкаСтроки>) РаскодироватьСтроку(<Строка>, <СпособКодированияСтроки>, <КодировкаСтроки>) Онлайн можно проверить, например http://www.michurin.net/online-tools/url-escape-online.html Регистры букв проверяются? А то марка может быть марка условно "аааА" и "ааАА". |
|||
8
timurhv
21.07.21
✎
12:46
|
(7) КодироватьСтроку("(01)04610063990116(21)Un+trgcG'GtRq", СпособКодированияСтроки.КодировкаURL)
Результат: %2801%2904610063990116%2821%29Un%2BtrgcG%27GtRq |
|||
9
BaZZiL
21.07.21
✎
12:47
|
Цитатко с ИТС:
17.2.1.5.2. $filter При получении данных можно фильтровать данные. Для этого предназначен специальный язык, который позволяет описывать условия, каким должны соответствовать данные, которые возвращает стандартный интерфейс OData. Описание отбора начинается с ключевого слова $filter, после которого следует собственно условие. eq /Catalog_Города?$filter=Description eq 'Главный' Это сработает /Catalog_Писатели?$filter=Фамилия eq 'О'Генри' а здесь сломается Каким экранированием отделить апостроф в коде маркировки (тексте условия) от апострофов в синтаксической конструкции фильтра? |
|||
10
ДенисЧ
21.07.21
✎
12:49
|
/Catalog_Писатели?$filter=Фамилия eq 'О\'Генри'
Пробовал? |
|||
11
acht
21.07.21
✎
12:54
|
||||
12
acht
21.07.21
✎
12:54
|
Example 3: valid OData URLs:
|
|||
13
BaZZiL
21.07.21
✎
13:10
|
(7) (11) Похоже, то что нужно
For example, one of these rules is that single quotes within string literals are represented as two consecutive single quotes. Мог бы и догадаться) |
|||
14
BaZZiL
21.07.21
✎
13:44
|
Всё равно что-то идёт не так
с кодом маркировки (01)04610063990116(21)Un%2BtrgcG%27GtRq получаю ответ: { "odata.error": { "code": "14", "message": { "lang": "ru", "value": "Ошибка при разборе опции запроса $filter" } } } а когда добавляю второй апостроф (01)04610063990116(21)Un%2BtrgcG%27%27GtRq, то в ответ пустота: { "odata.metadata": "http://localhost/REST/odata/standard.odata/$metadata#Catalog_ШтрихкодыУпаковокТоваров", "value": [] } |
|||
15
timurhv
21.07.21
✎
13:47
|
(14) так скобки тоже должны быть закодированы, разве нет?
|
|||
16
BaZZiL
21.07.21
✎
13:50
|
Да, с кодированными скобками тоже самое.
|
|||
17
timurhv
21.07.21
✎
13:52
|
(16) из (0) &$filter=ЗначениеШтрихкода eq '(01)04660054763397(21)5kl+d.MajJbpx'
'(01)04660054763397(21)5kl+d.MajJbpx' - вот это все должно быть закодировано, а не что внутри |
|||
18
timurhv
21.07.21
✎
13:53
|
(17) из (11)
Example 3: valid OData URLs: http://host/service/People(%27O%27%27Neil%27) Example 4: invalid OData URLs: http://host/service/People('O%27Neil') |
|||
19
BaZZiL
21.07.21
✎
14:03
|
||||
20
BaZZiL
21.07.21
✎
14:04
|
Движок форума тоже веселится от экранирования))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |