AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 05.09.2002, 09:41   #1  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 29 (1) +++
Join Date: 02.09.2002
? Как определить для какого контрола вызван DataMethod?
Здравствуйте,
Имеется следующая задача: в grid динамически добавляются контролы, данные для которых поставляются достаточно сложным запросом, описанным в DataMethod'е. Но для каждого контрола, метод должен иметь свои модификации, разные параметры запросов и т.д. Т.к. контролы добавляются динамически, то им можно передать только какой-то заранее определенный метод, поэтому хотелось бы внутри этого метода как-нибудь определить, для какого элемента он вызывается в данный момент, что бы выполнить соответсвующий запрос. Можно ли это как-нибудь сделать?

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

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

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

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

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

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


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

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

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

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



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

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

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


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

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

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


С уважением, программист группы компаний "Счастливый кроха".
Old 06.09.2002, 11:41   #10  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Join Date: 09.07.2002
Location: Parndorf, AT
Да не в гриде. На форме друг за другом (типа сэмулировать одну строку). Идеи от Mazzy напомнили мне еще два незапатентованных способа:
  • поскольку "динамически подцеплять методы" в версии 2.5 нельзя (мы ведь с вами говорим о том, чтобы проставлять свойство dataMethod, правда?) можно создать на форме штук 20 display-методов. Пожалуй, наиболее изящный способ.
  • использовать сторонний ActiveX-элемент. Передавать ему курсор или XML-документ.
Old 06.09.2002, 11:50   #11  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 29 (1) +++
Join Date: 02.09.2002
Quote:
Изначально опубликовано 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");

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

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

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

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
Как можно определить время окончания сводного планирования? 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:49.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.