AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.12.2009, 15:16   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Like и slash в запросе.
Проблема: допустим есть таблица с полем ItemPath, содержащим путь к объекту в формате: \[layer]\[ObjectType]\[Object]

Допустим мне нужно отобрать из этой таблицы все объекты типа класс:

Написал пробную джобу:

X++:
#define.ClassesPath("\\%1\\Classes\\*")
static void selectClassesNodes(Args _args)
{
    ItemPathTable                                itemPathTable
    str                                                 classesPath;
    ;
    classesPath = strfmt(#ClassesPath, currentAOLayer());
    info(classesPath);
    while select itemPathTable where itemPathTable.ItemPath like classesPath
    {
        info(itemPathTable.ItemPath);
    }

}
В результате инфолог выводит правильную маску: \usr\Classes\*
Но записи не выбираются. Вот и дилема.
__________________
Axapta has seduced me deadly!
Старый 24.12.2009, 15:21   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от HorrR Посмотреть сообщение
#define.ClassesPath("\\%1\\Classes\\*")

В результате инфолог выводит правильную маску: \usr\Classes\*
Но записи не выбираются. Вот и дилема.
Символ \ является спецсимволом. http://axapta.mazzy.ru/lib/search/
Чтобы искать \, в строе поиска нужно указать \\
Поэтому должно быть так:

#define.ClassesPath("\\\\%1\\\\Classes\\\\*")
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: HorrR (1).
Старый 24.12.2009, 15:23   #3  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
То есть, like интерпретирует эту строку как регулярное выражение и нужно двойное экранирование?
__________________
Axapta has seduced me deadly!
Старый 24.12.2009, 15:24   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Для таких случаев есть специальная функция queryValue(). Она экранирует все зарезервированные спецсимволы.
За это сообщение автора поблагодарили: HorrR (1).
Старый 24.12.2009, 15:27   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от HorrR Посмотреть сообщение
То есть, like интерпретирует эту строку как регулярное выражение и нужно двойное экранирование?
Именно. Первое экранирование связано с синтаксисом задания строковых литерал в коде, а второе с синтаксисом фильтров самой аксапты
За это сообщение автора поблагодарили: mazzy (2).
Старый 24.12.2009, 17:01   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,159 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
А добавление символа @ перед строкой проблему не решает? Правда define уже использовать не получиться. Типа @"что-то\"
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Fred Shen: 'Not Like' in Dynamics AX Blog bot DAX Blogs 0 28.10.2006 16:40
Использование "like" при работе с классом "QueryBuildRange" poul DAX: Программирование 18 11.08.2006 12:20
как правильно использовать not like polygris DAX: Программирование 1 06.05.2006 16:59
like запрос с использованием query Vadik Shiryakoff DAX: Программирование 7 13.03.2006 12:05
Возможность использования Like в QueryBuildRange Koriolis DAX: Программирование 5 14.02.2005 17:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:47.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.