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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.11.2006, 16:54   #1  
Eland is offline
Eland
Участник
 
31 / 12 (1) ++
Регистрация: 10.07.2006
Адрес: Москва
? QueryRun - управление полями наборов критериев
Есть на динамической формочке (RunBaseBatch) кнопочка "Выбор" (SysQueryRun).
При нажатии на эту самую кнопочку открывается окошечко "Запрос" во вкладочке "Условия" есть выбор из подключаемых таблиц и полей для проставления критериев в запросе.

Надо сделать так, чтобы в этом самом гриде (том, что во вкладочке "Условия") ограничить выбор поля "Таблица" и "Поле" только одним значением. Т.е. чтобы можно было выбрать только одно значение, при этом поле "Критерий" трогать не надо.
Т.е. кликаем на лукап поля "Таблица" и в лукапе только указанная мной табличка, нажимаем на лукап поля "Поле" и в ней выпадает только указанное мной поле.

Проблема в том, что я не могу получить доступ к этим самым полям.

Возможно ли вообще получить доступ к управлению этими полями ?

А если да, то как ?
Старый 20.11.2006, 17:20   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Eland Посмотреть сообщение
Надо сделать так, чтобы в этом самом гриде (том, что во вкладочке "Условия") ограничить выбор поля "Таблица" и "Поле" только одним значением. Т.е. чтобы можно было выбрать только одно значение, при этом поле "Критерий" трогать не надо.
У критерия есть свойство (Hidden, Locked, Open) - используйте Locked.
Тогда пользователь не сможет убрать заданный программистом range.

Цитата:
Сообщение от Eland Посмотреть сообщение
Т.е. кликаем на лукап поля "Таблица" и в лукапе только указанная мной табличка, нажимаем на лукап поля "Поле" и в ней выпадает только указанное мной поле.
Не знаю как запретить добавление других полей и других таблиц.
Может кто другой подскажет.

А точно надо?
Сделать так, чтобы пользователь не убирал критерий - это я понимаю.
А зачем запрещать добавление критериев?
__________________
полезное на axForum, github, vk, coub.
Старый 20.11.2006, 17:30   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Быстрый поиск дал следующие результаты:

1. разберитесь с классом SysQueryForm и формой SysQueryForm
2. метод класса SysQueryForm.dataSourceEdit является самым перспективным.
В частности очень заманчивым выглядит условие

X++:
        if (clientSysQueryEdit.query().userUpdate() &&
            this.allowAddRange()            == QueryAllowAdd::AllFields &&
            queryBuildDataSource.allowAdd() == QueryAllowAdd::AllFields)
У датасорса Query и Report свойство allowAdd() вынесено в настройки (его можно настроить мышкой)
У датасорса Формы это свойство доступно только из кода.
__________________
полезное на axForum, github, vk, coub.
Старый 20.11.2006, 17:30   #4  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Eland Посмотреть сообщение
...Надо сделать так, чтобы в этом самом гриде (том, что во вкладочке "Условия") ограничить выбор поля "Таблица" и "Поле" только одним значением. Т.е. чтобы можно было выбрать только одно значение, при этом поле "Критерий" трогать не надо...
А зачем именно "в этом самом гриде (том, что во вкладочке "Условия")"?
Думаю, что в вашем случае будет проще кнопочку "выбор" спрятать, а в методе "dialog" добавить необходимый(ые) dialogfield(s) и перед запуском процесса програмно модифицировать query.

Последний раз редактировалось vallys; 20.11.2006 в 17:36.
Старый 20.11.2006, 18:01   #5  
Eland is offline
Eland
Участник
 
31 / 12 (1) ++
Регистрация: 10.07.2006
Адрес: Москва
Смысл этого хитрого действа таков:
Надо выбрать диапазон складов, с которым надо что-нибудь сделать, ну например грохнуть их. А в лукапе выбрать несколько складов одновременно будет несколько проблематично, ну хотя бы потому, что длинна поля будет обусловлена EDTшкой и через запятую вписать их много не получится. А если добавлять всё это безобразие через стандартную форму SysQueryForm, то можно будет собрать целый набор складов. В общем, с моей точки зрения этот приём наимение трудоёмкий, удобный и к тому же эта стандартная формочка хорошо знакома пользователю.

Итак, чтобы загнуть этот инструмент под свои корыстные цели, мне надо ограничить выбор пользователя только по одному полю, ну а критериев пусть вставляет сколько его душенька пожелает. А так же надо это сделать, чтобы не дать пользователю напартачить.
Старый 20.11.2006, 18:09   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Eland Посмотреть сообщение
Надо выбрать диапазон складов, с которым надо что-нибудь сделать, ну например грохнуть их. А в лукапе выбрать несколько складов одновременно будет несколько проблематично, ну хотя бы потому, что длинна поля будет обусловлена EDTшкой и через запятую вписать их много не получится. А если добавлять всё это безобразие через стандартную форму SysQueryForm, то можно будет собрать целый набор складов. В общем, с моей точки зрения этот приём наимение трудоёмкий, удобный и к тому же эта стандартная формочка хорошо знакома пользователю.
А... готов согласиться.

Стоит порыться в методах класса
SysQueryForm.buildAllFields
SysQueryForm.fieldInsertRange
SysQueryForm::findFields

Причем подозреваю, что, скорее всего, в последнем методе
__________________
полезное на axForum, github, vk, coub.
Старый 20.11.2006, 18:27   #7  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Eland Посмотреть сообщение
Смысл этого хитрого действа таков:
Надо выбрать диапазон складов, с которым надо что-нибудь сделать, ну например грохнуть их. А в лукапе выбрать несколько складов одновременно будет несколько проблематично, ну хотя бы потому, что длинна поля будет обусловлена EDTшкой и через запятую вписать их много не получится. А если добавлять всё это безобразие через стандартную форму SysQueryForm, то можно будет собрать целый набор складов. В общем, с моей точки зрения этот приём наимение трудоёмкий, удобный и к тому же эта стандартная формочка хорошо знакома пользователю.

Итак, чтобы загнуть этот инструмент под свои корыстные цели, мне надо ограничить выбор пользователя только по одному полю, ну а критериев пусть вставляет сколько его душенька пожелает. А так же надо это сделать, чтобы не дать пользователю напартачить.
Тогда Вам поможет метод allowAdd(QueryAllowAdd::NoFields) датасоурса квери. Причем необходимо вызвать метод для всех датасоурсов, для которых "нельзя" добавлять критерии/подчиненные таблицы.

Вообщем, Mazzy как всегда прав

Последний раз редактировалось vallys; 20.11.2006 в 18:45.
Старый 20.11.2006, 18:34   #8  
axaLearner is offline
axaLearner
Участник
 
88 / 17 (1) ++
Регистрация: 24.06.2004
Адрес: God knows
Eland
Что касается выбора полей, то посмотрите в классе SysQueryForm метод performLookupField (есть аналогичный и для таблиц, если вы захотите выбор таблиц на запросе ограничить) - именно этот метод срабатывает, когда вы вызываете lookup с доступными полями. Так же вам необходимо обратить внимание на метод validateField, чтобы сказать пользователю, что он не прав если он попытается ввести название поля не из lookup, а ручками.
За это сообщение автора поблагодарили: mazzy (5).
Старый 20.11.2006, 19:40   #9  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Я в свое время пошел по пути наименьшего сопротивления:
1. Сделал EDT InventLocationIdRange, унаследовав от Range
2. Сделал на этом EDT Relation = InventLocation.InventLocationId
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
Простой QueryRun не работает miklenew DAX: Программирование 13 20.01.2009 14:17
OZKA's DAX Journal: Join между временной и постоянной таблицей через QueryRun. Blog bot DAX Blogs 12 14.01.2009 17:34
Range from QueryRun George Nordic DAX: Программирование 6 02.06.2004 14:21
Проблема: подстановка значений по дефолту в диалог QueryRun cyrus DAX: Программирование 4 21.03.2003 09:39

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

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

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