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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2004, 13:51   #1  
Lora is offline
Lora
Участник
 
9 / 10 (1) +
Регистрация: 16.07.2002
Адрес: Kiev
Как добавить в addRange условие по "или" на контейнерные поля?
Добрый день!
Необходимо определить следующее ограничение по "или" на поля типа Dimension:
this.query().dataSourceTable(tablenum(PurchTable)).addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value(strfmt('((%2.%4 == "%1") || (%2.%3 == "%1"))',
"10-000",
this.query().dataSourceTable(tablenum(PurchTable)).name(),
"ExecuterDimension[1]",
"Dimension[1]",
));
Sql запрос на сколько я вижу корректный, но проблема в следующем - Система пишет, что не хватает правой круглой скобки и ничего соответсвенно не фильтрует.
Попробовала тот же синтаксис определения ограничения только на простых полях:
this.query().dataSourceTable(tablenum(PurchTable)).addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value(strfmt('((%2.%4 == "%1") || (%2.%3 == "%1"))',
"10-000",
this.query().dataSourceTable(tablenum(PurchTable)).name(),
"OrderAccount",
"InvoiceAccount",
));
В данном случае все отрабатывает корректно и без всяких предупреждений...Похоже что проблема именно с контейнерными полями, может в данном случае нужно по другому как то представлять в запросе эти поля?
Кто нибудь сталкивался с подобной проблемой и методом ее решения?
Спасибо
__________________
Старый 23.03.2004, 13:55   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
кавычку внутри range надо экранировать.
Т.е. писать не
strfmt('((%2.%4 == "%1") || (%2.%3 == "%1"))',
а
strfmt('((%2.%4 == \"%1\") || (%2.%3 == \"%1\"))',

Смотрите SysQuery::value()
Старый 23.03.2004, 14:09   #3  
Lora is offline
Lora
Участник
 
9 / 10 (1) +
Регистрация: 16.07.2002
Адрес: Kiev
Lightbulb
Цитата:
кавычку внутри range надо экранировать.
Нет, спасибо, но это не решает проблему.. я пробовала экранировать, но дело не в этом, тем более что я передаю значение не с помощью sysquery::value.
Пыталась энкранировать скобки в dimension\[1\] , но тоже рез-та нет.
Тем более как я уже писала тот же синтаксис я проверила на обычных полях и ошибок нет скорее всего дело в чем другом ..
__________________
Старый 23.03.2004, 14:14   #4  
Fedr Kuzmich is offline
Fedr Kuzmich
Участник
 
19 / 10 (1) +
Регистрация: 29.02.2004
Адрес: Москва
А можно сделать совсем просто:

PHP код:
QueryBuildDataSource qbds;
;
qbds this.query().dataSourceTable(tablenum(PurchTable));
qbds.addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value("value1");
qbds.addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value("value2"); 
В таком случае будет отрабатывать условие value1 или value2
Старый 23.03.2004, 14:18   #5  
Fedr Kuzmich is offline
Fedr Kuzmich
Участник
 
19 / 10 (1) +
Регистрация: 29.02.2004
Адрес: Москва
Виноват. Невнимательно прочитал. У Вас или на разные поля стоит, тогда мой пример не подохдит.
Старый 23.03.2004, 14:24   #6  
Lora is offline
Lora
Участник
 
9 / 10 (1) +
Регистрация: 16.07.2002
Адрес: Kiev
Цитата:
У Вас или на разные поля стоит
да в том то и дело что на разных Причем оба поля контейнерные.
__________________
Старый 23.03.2004, 15:12   #7  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Вот так вроде можно:
this.query().dataSourceTable(tablenum(PurchTable)).addRange(fieldId2Ext(fieldNum(PurchTable,Dimension),1)).value(strfmt('((%4 == "%1") || (%3 == "%1"))',
"10-000",
this.query().dataSourceTable(tablenum(PurchTable)).name(),
"ExecuterDimension",
"Dimension"));

Но только для элементов с индексом [1]
Старый 23.03.2004, 15:20   #8  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Регистрация: 06.08.2002
Адрес: Украина
Добрый день.

Действительно, не хочет воспринимать квадратную скобку. Предлагаю попробовать так
('((\"%2.%4\" == "%1") || (\"%2.%3\" == "%1"))'
Старый 23.03.2004, 15:57   #9  
Lora is offline
Lora
Участник
 
9 / 10 (1) +
Регистрация: 16.07.2002
Адрес: Kiev
Цитата:
...Но только для элементов с индексом [1]
Сработал Ваш вариант, Wamr, спасибо.
Для моей задачи это решение подходит , но действительно как быть если проверять значение нужно элемента не первого индекса?

Цитата:
Действительно, не хочет воспринимать квадратную скобку. Предлагаю попробовать так ('((\"%2.%4\" == "%1") || (\"%2.%3\" == "%1"))'
Если поставить кавычки таким образом, то генерится странный sql, типа сравнение двух строк "PurchTable.Dimension[1]" с значение "10-100" или "PurchTable.ExecuterDimension[1]" с значение "10-100", ошибок нет, но к сожалению и фильтр не работает корректно.
Всем большое спасибо.
__________________
Старый 29.11.2004, 13:52   #10  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Кто-нибудь нашел решение данной проблемы?

У меня возникла необходимость в таком условии, но не обязательно по первой аналитике.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отчет "В наличии". Как добавить новое условие Range ATimTim DAX: Функционал 5 13.08.2005 13:26
Изыскания по поводу функциональности поля "Ссылка на лот" slava09 DAX: База знаний и проекты 4 11.03.2005 12:51
Как в range на одно и тоже контейнерное поле поставить условие: "исключ." && like Pustik DAX: Программирование 15 03.07.2004 11:54
Как в AddRange() добавить поле Dimension[2] Владимир Максимов DAX: Программирование 13 27.02.2004 11:27
Поля "Автор", "Автор модификации" xconsul DAX: Функционал 1 22.10.2003 09:44

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:41.