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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2002, 07:27   #1  
Алексей Контев is offline
Алексей Контев
Участник
 
118 / 31 (2) +++
Регистрация: 28.12.2001
Адрес: Барнаул
Проблемы в dialog
Имеется контрол в диалоге типа Dimension, надо по какому-то условию делать эти контролы недоступны.
метод:
PHP код:
dfdim                dialog.addFieldvalue(TypeId(Dimension), Dim);
dfdim.enabled(false); 
приводит к тому, что недоступными становятся только 1-й и последний компоненты аналитики, а промежуточные не изменяются. Так происходит для всех свойств контрола (visible, showlabel и т.д.)
Есть у кого-нибудь какие мысли?
Старый 19.12.2002, 16:11   #2  
kalex is offline
kalex
Участник
 
132 / 20 (1) +++
Регистрация: 18.05.2002
Адрес: Москва
Может попробовать поработать с dialog.formRun() ? Вытащить соответствующий formControl и сделать с ним всё, что нужно...
Старый 20.12.2002, 15:58   #3  
kalex is offline
kalex
Участник
 
132 / 20 (1) +++
Регистрация: 18.05.2002
Адрес: Москва
А именно, можно сделать так:
Dialog dialog = new Dialog();
DialogField dfdim;
FormRun form;
FormDesign design;
FormControl control;
;
dfdim = dialog.addField(TypeId(Dimension));
dialog.doInit();

form = dialog.formRun();
design = form.design();

control = design.controlName('Fld1_6'); // 1 - номер поля 6 - индекс
control.enabled(false);

dialog.run();

Интересно, а можно добавить в диалог тоько одну аналитику? Чтобы узнать ID индексного поля есть fieldId2Ext. Для EDT я такой функции не нашел :-(
Старый 20.12.2002, 17:46   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Связанная проблема
А как узнать размер массива, если EDT определен таким образом. Я сделал свой EDT с несколькими Array Elements. Метод arraySize класса DictType всегда возвращает единицу. Кто-нибудь сталкивался?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 20.12.2002, 18:24   #5  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Размер массива в ЕДТ dimof()
Старый 20.12.2002, 18:28   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Да.
DimOf
Старый 23.12.2002, 12:03   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Супер.
Спасибо
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 16.01.2003, 16:43   #8  
Vladislav Yushakov is offline
Vladislav Yushakov
Участник
 
47 / 10 (1) +
Регистрация: 10.01.2003
Привет Алексей!

Dimension вставлять в группу. И изменять значение для группы.
Это вариант решения проблемы.

А вот почему - я не знаю.
Старый 11.10.2007, 16:32   #9  
akvi is offline
akvi
Участник
 
119 / 12 (1) ++
Регистрация: 31.03.2003
Адрес: Москва
Цитата:
Сообщение от kalex Посмотреть сообщение
Интересно, а можно добавить в диалог тоько одну аналитику?
Может, всё-таки, кто-нибудь знает как это сделать?
Старый 11.10.2007, 17:37   #10  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Ну не знаю...

Одно из решений: допиливание классов DialogField и Dialog
Идея: при добавлении поля в диалоге указывать индекс поля (то бишь аналитику)

В классе Dialog метод addField()
X++:
DialogField addField(
    int         type,
    FieldLabel  label   = '',
    FieldHelp   help    = '',
    ArrayIdx    idx     = 0 //modified for ArrayFields
    )
{
    DialogField DialogField;

    fields += 1;
    DialogField = new DialogField(this,type,fields);
    this.addCtrlDialogField(dialogField.name());

//    dialogField.init(this); //standard
    dialogField.init(this, idx);//modified for ArrayFields

    if (label)
        dialogField.label(label);
    if (help)
        dialogField.helpText(help);

    this.addDialogClass(dialogField);

    return dialogField;
}
В классе DialogField метод init()
X++:
//void init(Dialog  dialog)//standard
void init(Dialog  dialog, ArrayIdx idx=0)//Modified for ArrayFields
{
....
    //Added for ArrayFields -->
    if((idx)&&(idx<=arraysize))
    {
        f = idx;
        arraysize = idx;
    }
    //Added for ArrayFields <--
    while (f <= arraysize)
    {
....
}
Ну и сам вызов теперь
X++:
d.addField(TypeId(Dimension), '', '', 1);
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 11.10.2007, 17:46   #11  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
Сообщение от akvi Посмотреть сообщение
Может, всё-таки, кто-нибудь знает как это сделать?
Создаете свой EDT, наследуете его от SysDim. В нем создаете relation на таблицу Dimensionsс двумя значениями:
EDT_Name == Dimensions.Num
<номер аналитики> == Dimensions.DimensionCode

Например, для выбора Отдела создаете EDT MyDimensionDepartment с realtion:
MyDimensionDepartment == Dimensions.Num
0 == Dimensions.DimensionCode

Потом просто используете этот EDT при создании диалога:
X++:
dialogField = dialog.addField(TypeId(MyDimensionDepartment));
За это сообщение автора поблагодарили: Gustav (5).
Старый 12.10.2007, 12:38   #12  
akvi is offline
akvi
Участник
 
119 / 12 (1) ++
Регистрация: 31.03.2003
Адрес: Москва
Цитата:
Сообщение от Peter Savintsev Посмотреть сообщение
Например, для выбора Отдела создаете EDT MyDimensionDepartment с realtion:
MyDimensionDepartment == Dimensions.Num
0 == Dimensions.DimensionCode
Для Отдела всё так, потому что эта аналитика первая в массиве. А как быть, если первую выводить в диалог вообще не нужно, а требуется, например, вторая (и третья)?
Частично проблема решается созданием ArrayElements с нужными relations. НО в начале списка всегда будет первая аналитика (Отдел), какое значение Dimensions.DimensionCode ни задавай для самого EDT - такое ощущение, что значение всегда = 0.
Старый 12.10.2007, 14:37   #13  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Если все делаете правильно (как советовал Peter Savintsev), то нормально создается и работает EDT для любой аналитики.

MyDimensionPurpose == Dimensions.Num
2 == Dimensions.DimensionCode

Единственное, я не наследовал от SysDim.
__________________
Андрей.
За это сообщение автора поблагодарили: Qaz Qwerty (1).
Старый 12.10.2007, 14:46   #14  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Сорри, ошибся. Действительно, надо наследовать не от SysDim, а от SysGroup. Для SysDim используется своя lookup-форма, которая не очень корректно работает в данном случае.
За это сообщение автора поблагодарили: Qaz Qwerty (1).
Старый 12.10.2007, 16:54   #15  
akvi is offline
akvi
Участник
 
119 / 12 (1) ++
Регистрация: 31.03.2003
Адрес: Москва
Спасибо!!! Всё получилось
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: 3 Dialog extensions Blog bot DAX Blogs 4 28.09.2007 18:56
DynamicsTech: How to modify the behavior of dialog boxes to enable forms to appear in full-screen mode in Microsoft Dynamics AX Blog bot DAX Blogs 0 13.04.2007 12:10
Fred Shen: Dialog screen events Blog bot DAX Blogs 0 28.10.2006 16:40
Mandatory field в Dialog axaLearner DAX: Программирование 4 02.11.2004 09:50
Проблемы фильтрации из dialog ArturK DAX: Программирование 1 19.05.2004 13:43
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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