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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.09.2002, 09:41   #1  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
? Как определить для какого контрола вызван DataMethod?
Здравствуйте,
Имеется следующая задача: в grid динамически добавляются контролы, данные для которых поставляются достаточно сложным запросом, описанным в DataMethod'е. Но для каждого контрола, метод должен иметь свои модификации, разные параметры запросов и т.д. Т.к. контролы добавляются динамически, то им можно передать только какой-то заранее определенный метод, поэтому хотелось бы внутри этого метода как-нибудь определить, для какого элемента он вызывается в данный момент, что бы выполнить соответсвующий запрос. Можно ли это как-нибудь сделать?

С уважением, программист группы компаний "Счастливый кроха".
Старый 05.09.2002, 13:23   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Господи!
Да что ж вы там делаете то, что вопросы у вас такие?
Расскажи, будь милосердным!
Старый 05.09.2002, 14:04   #3  
xroad is offline
xroad
Участник
 
10 / 16 (1) ++
Регистрация: 03.01.2002
Адрес: Москва
Почеу бы не сравнить hWnd текущего контрола и контрола с определённым именем (предварительно сделав его AutoDeclaration, но это не обязательно), т.е. нечто подобное:

display someDataMethod (....)
...
if (this.hWnd() == someControl.hWnd())
{ // Находимся в контроле someControl
...
Старый 05.09.2002, 14:57   #4  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
To xroad:
Autodeclaration имхо не пойдет, т.к. контрол вставляется динамически.

>>
display someDataMethod (....)
...
if (this.hWnd() == someControl.hWnd())
{ // Находимся в контроле someControl
...
>>
Так мне тоже кажется не получится, т.к дисплэй метод объявлен в источнике данных, поэтому this - будет относится к источнику или даже форме, и что вернется в hWnd я даже не могу предположить... Хотя я это еще не пробовал, поэтому со 100% уверенностью сказать не могу, но в любом случае спасибо за совет

С уважением, программист группы компаний "Счастливый кроха".
Старый 05.09.2002, 15:30   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Как определить для какого контрола вызван DataMethod?
Цитата:
Изначально опубликовано rumpleteazer
Т.к. контролы добавляются динамически, то им можно передать только какой-то заранее определенный метод
Раз уж ты передаешь "заранее определенный метод" контролу, то укажи там же заодно и его идентификатор. Пусть контрол вызывает заранее определенный метод, а в аргументах передает свой идентификатор.

Посмотри для примера как управляются днями месяца в табеле в расчете зарплаты.

И все же. Что ты такое ваяешь? Безумно интересно.
Старый 06.09.2002, 09:14   #6  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Re: Re: Как определить для какого контрола вызван DataMethod?
Цитата:
Изначально опубликовано mazzy


Раз уж ты передаешь "заранее определенный метод" контролу, то укажи там же заодно и его идентификатор. Пусть контрол вызывает заранее определенный метод, а в аргументах передает свой идентификатор.
Посмотри для примера как управляются днями месяца в табеле в расчете зарплаты.

И все же. Что ты такое ваяешь? Безумно интересно.
Спасибо. И маленький вопросик: а как это сделать? Ну неопытный я еще...
Как указать контролу что DataMethod надо вызывать с определенным аргументом?
(*задумчиво так*) Дни месяца в табеле зарплаты...А хоть куда это смотреть? ну название формочки, отчетика какого-нибудь...

А что ваяю..ну долго рассказывать, но в кратце это будет динамическая настройка колонок прайс-листов...вообщем выбираешь тип прайс-листа и прайс-лист показывается только с тему колонками, коотрые определены для данного типа. А колонок в описание типа можно напихать сколько угодно...Вот.

С уважением, программист группы компаний "Счастливый кроха".
Старый 06.09.2002, 11:16   #7  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Не хочется вас расстраивать, но сделать то, что вы хотите, невозможно.
Мы в Navision решали аналогичную задачу при разработке налогового учета.
Добавить динамические поля в grid не удастся.
Возможные решения:
  • использовать не grid, a list
  • вносить поля не в grid, a создать ряд полей друг за другом. Тогда потенциально можно определить порядок их обновления (для grid это нереально)
  • создавать поля с перекомпиляцией формы (как в табеле)
Старый 06.09.2002, 11:26   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
И вправду, план был замечательный — такой простой и ясный. Одно только плохо: Алиса не имела ни малейшего представления о том, как все это осуществить (С) Л.Кэррол. Алиса в стране чудес.



Что у тебя уже сделано (должно быть):
1. Ты диамически создаешь контрол (в этот момент ты знаешь его имя)
2. К этому контролу ты динамически прицепляешь метод
3. В этом методе у тебя написан вызов общего метода

Что нужно добавить:
4. На шаге 3 добавляй не просто вызов общего метода, а дополнительно передавай в качестве параметра название контрола. Ведь в момент создания ты знаешь его имя.

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


Про прайс-листы. Не думаю, что нужна динамическая настройка...
Наверное хватит статической. Создай например 10 колонок, а затем включай и выключай их (но не создавай!). А еще лучше сделать все статическим.

Пример динамического включения выключения в табелях. Форма RPayTblDayHourTrans. Метод формы redrawPayTblDayHourTrans.

Пример статического управления видимостью - формы бухгалтерских журналов. Все бухгалтерские журналы работают по одной и той же таблице. Но контролы показывают разные. В твоем случае, наверное, также есть группы клиентов, которым нужны прайсы определенного вида. Видов прайсов, скорее всего, немного. Штук 10-20. По-моему, ты гораздо быстрее создашь 20 почти одинаковых форм с разными статическими колонками, чем заниматься программированием динамического управления.
Старый 06.09.2002, 11:31   #9  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Мдя.....Очень жаль....
Создаваь ряд полей друг за другом пробовал в гриде...но, к сожалению, поля могут скрываться, может меняться порядок их расположения, так что на порядок следования полей полагаться нельзя.


С уважением, программист группы компаний "Счастливый кроха".
Старый 06.09.2002, 11:41   #10  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Да не в гриде. На форме друг за другом (типа сэмулировать одну строку). Идеи от Mazzy напомнили мне еще два незапатентованных способа:
  • поскольку "динамически подцеплять методы" в версии 2.5 нельзя (мы ведь с вами говорим о том, чтобы проставлять свойство dataMethod, правда?) можно создать на форме штук 20 display-методов. Пожалуй, наиболее изящный способ.
  • использовать сторонний ActiveX-элемент. Передавать ему курсор или XML-документ.
Старый 06.09.2002, 11:50   #11  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Цитата:
Изначально опубликовано mazzy
[i]
Что у тебя уже сделано (должно быть):
1. Ты диамически создаешь контрол (в этот момент ты знаешь его имя)
2. К этому контролу ты динамически прицепляешь метод
3. В этом методе у тебя написан вызов общего метода

Что нужно добавить:
4. На шаге 3 добавляй не просто вызов общего метода, а дополнительно передавай в качестве параметра название контрола. Ведь в момент создания ты знаешь его имя.

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

Наверное, это я такой тупой, но все-таки....
Поподробнее про шаг 3. На шаге 3 я у вновь созданного контрола устанавливаю свойство DataMethod, которому передаю строку с именем метода...Делается это примерно так:

str sControlName;
............

frc = InventItems.addControl(FormControlType::REAL,sControlName);


frc.label(tblPriceListSettings.HB_PriceGroup);
frc.dataSource("InventTable");
frc.dataMethod("HB_getPriceForCustomColumn");

И куда там засунуть параметр? Мы же передаем только имя метода, без всяких способов его вызова....

С уважением, программист группы компаний "Счастивый кроха".
Старый 06.09.2002, 12:26   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано rumpleteazer
На шаге 3 я у вновь созданного контрола устанавливаю свойство DataMethod
Ой! Об этом я не подумал.
Тогда я не знаю.
Старый 06.09.2002, 12:34   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Похоже, что действительно никак. Тем более, что Евгений говорит, что пробовал и не получилось.

Цитата:
Изначально опубликовано EVGL
использовать не grid, a list
list не очень хорошо. это ж прайс. а по list не работают стандартные фильтры и запросы.

EVGL, а можно в list делать фильтры страндартными средствами без программирования?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как можно определить время окончания сводного планирования? Hidden DAX: Функционал 4 29.09.2006 13:02
Можно ли в display методе узнать для какого FormControl'а этот метод вызван? Dudnik Anton DAX: Программирование 3 01.02.2006 12:22
Определить кто вызвал форму Хилари DAX: Программирование 1 22.04.2004 16:44
Как определить тип Exception DenisS DAX: Программирование 0 25.12.2003 16:53
Как отловить изменение контрола erudit DAX: Программирование 1 15.05.2003 16:56
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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