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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.05.2008, 16:32   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Обработка jumpRef в Dialog
Создается Dialog, на котором динамически создаются контролы.
Нужно, чтобы у контрола в контекстном меню был пункт "Перейти к форме основной таблицы".
Динамически перегрузил метод jumpRef() создав в классе метод:
X++:
public void dfDistrId_jumpRef()
{
    FormStringControl  control = dialog.formRunClient().controlCallingMethod();
    Args args = New Args("AclDistrTable");
    FormRun FR;
    ;

    args.lookupField(fieldNum(AclDistrTable, DistrId));
    args.lookupValue(control.valueStr());

    FR = new FormRun(args);
    
    control.jumpRef();
    
    FR.init();
    FR.run();
    FR.wait();
}
Пункт не появился... Прописал EDT в dialogPostRun():
X++:
public void dialogPostRun(dialogRunbase _dialog)
{
    FormStringControl scDistrId;
    ;
    super(_dialog);

    _dialog.formRunClient().controlMethodOverload(true);
    _dialog.formRunClient().controlMethodOverloadObject(this);
        
    scDistrId = dialog.formRunClient().control(dialog.formRunClient().design().controlName("dfDistrId").id());
    
    scDistrId.extendedDataType(extendedTypeNum( AclDistrId) );
    scDistrId.autoDeclaration(true);
}
тоже не помогло.
Что можно еще сделать, или есть обходной способ создать пункт в контекстном меню?
Старый 08.05.2008, 16:38   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
откуда имя dfDistrId?
Старый 08.05.2008, 16:40   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
задается в момент создания далога в методе Dialog:
X++:
protected Object dialog()
{
    ;
    dialog = Dialog::newFormnameRunbase('', this);
    dialog.caption(this.caption());

    dialog = super(dialog);

    dialog.addGroup("@SYS32327");
    dfDistrId       = dialog.addFieldValue(typeId(AclDistrId),  this.parmDistrId(),     "@ACL3",        '', 'dfDistrId');

    return dialog;
}
Старый 08.05.2008, 16:48   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
это имя переменной в классе, а имя контрола будет типа fld_1
Старый 08.05.2008, 16:54   #5  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
точнее Fld1_1, но все равно это сути не меняет, пункт не появился
Старый 08.05.2008, 16:57   #6  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
то есть
X++:
...
    dfDistrId       = dialog.addFieldValue(typeId(AclDistrId),  this.parmDistrId(),     "@ACL3");
    info(dfDistrId.name());
...
Дает Fld1_1.
Но в доработке Kashperuk класса dialogfield я могу его задать жестко.
Старый 08.05.2008, 17:09   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
при этом scDistrId.extendedDataType(extendedTypeNum( /*другой EDT*/) );
меняет выпадающий список связанной таблицы. То есть свойство extendedDataType для контрола устанавливается
Старый 08.05.2008, 17:12   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А в просто форме оно появляется (если контрол не привязанный к данным?)
Старый 08.05.2008, 17:17   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
А в просто форме оно появляется (если контрол не привязанный к данным?)
если создавать форму в AOT, а потом Dialog строить по ней, то там этот пункт, появляется, если прописать EDT, и дополнительно перегрузить метод этого контрола jumpRef. Последнее условие в данном случае вроде как обеспечивается динамической перегрузкой метода в классе dfDistrId_jumpRef(), но вот почему-то не срабатывает...
Старый 08.05.2008, 17:22   #10  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Попробовал в классе DialogField добавить метод по примеру mandatory:
X++:
//DEV_DialogExtensions_IKash Mandatory property on DialogField IKASH -->
void mandatory(boolean mandatory = buildControl.mandatory())
{
    // If properties exists then we are on server
    if (properties)
    {
        Dialog::setProp(properties, #PropertyMandatory, mandatory);
    }
    else
        this.fieldControl().mandatory(mandatory);
}
X++:
void extendedDataType(ExtendedTypeId _edt)
{
    FormStringControl fsc;
    // If properties exists then we are on server
    if (properties)
    {
        Dialog::setProp(properties, #PropertyExtendeddatatype, _edt);
    }
    else
    {
        fsc = this.fieldControl();        // проваливаемся при этом сюда
        fsc.extendedDataType(_edt);
    }
}
И вызывать его в dialog:
X++:
protected Object dialog()
{
    ;
    dialog = Dialog::newFormnameRunbase('', this);
    dialog.caption(this.caption());
    dialog = super(dialog);
    dialog.addGroup("@SYS32327");
    dfDistrId       = dialog.addFieldValue(typeId(AclDistrId),  this.parmDistrId(),     "@ACL3",        '', 'dfDistrId');
dfDistrId.extendedDataType( extendedTypeNum(AclDistrId) );
}
Результат тот же - св-во EDT у контрола прописывается, но пункта нет... Метод toolTip тоже не удалось перегрузить.

Последний раз редактировалось Eldar9x; 08.05.2008 в 17:47.
Старый 08.05.2008, 17:51   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Здесь проблема не в EDT, а как раз в том, что должен быть перекрыть метод jumpRef, но форма, видимо, не смотрит на существующие методы класса, который управляет событиями этой формы
Старый 08.05.2008, 17:59   #12  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
То есть таким образом не получится. А возможно как-нибудь программно добавить в меню пункт? Может быть использовать showContextMenu(int _menuHandle), и с помощью menuHandle выкрутиться?
Старый 08.05.2008, 18:04   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Угу. Точно.
Я здесь предлагал использовать эмуляцию с помощью метода context()
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 08.05.2008 в 18:08. Причина: Неправильная ссылка
За это сообщение автора поблагодарили: IvanS (1), Eldar9x (1).
Старый 12.05.2008, 13:24   #14  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Да, спасибо, способ работает отлично. Правда, не совсем понял, зачем перекрывать контекст?
И с showContextMenu отлично все добавляется. Остались только два вопроса, как сделать стиль у меню стандартный и каким образом убрать стандартный пункты (Настройка, например)?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обработка modified в Dialog Eldar9x DAX: Программирование 4 07.05.2008 13:28
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

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

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

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