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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2008, 18:25   #1  
petergunn is offline
petergunn
Участник
 
118 / 279 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
2 HorrR:
Для случая с 1 кнопкой на вскидку могу предложить на рассмотрение еще вариант как получить последний активный DS - правда решение красотой не отличается.
Суть примерно в следующем: на форме через element.selectedControl() можно получить контрол на котором находится фокус, далее проверить у этого контрола свойство DataSource. По полученному id() источника данных выбрать нужный DS на форме.

Первая проблема такого решения: в момент нажатия на кнопку метод element.selectedControl() вернет контрол нажатой кнопки, поэтому придется сохранять предыдущий выбранный элемент формы и анализировать его. Второе над чем придется подумать - как анализировать контролы на которых не был указан источник данных (unbounded элементы), что в этом случае считать активным DS? Возможно вылезет еще что-то.

P.S. Набросал примерный вариант реализации:
Вложения
Тип файла: zip DemoProdBOMTable.zip (12.9 Кб, 48 просмотров)

Последний раз редактировалось petergunn; 23.12.2008 в 18:52. Причина: Добавлен проект
Старый 24.12.2008, 06:47   #2  
petergunn is offline
petergunn
Участник
 
118 / 279 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
Цитата:
Сообщение от HorrR Посмотреть сообщение
Так что пока что весьма грустно получается. Прийдется развешивать GotFocus"ы по контроллам.
Немного модифицировал предложенный вчера вариант. Попробуйте такой сценарий:
Содаем на форме метод
X++:
//  --> get last active formDataSource
int getControlDataSourceId( FormControl _formControl = element.selectedControl() )
{
    Object          object = _formControl   ;
    SysDictClass    sysDictClass    ;
    int             dataSourceId    ;
    ;

    if( !_formControl )
        return 0 ;

    sysDictClass = new SysDictClass( classidget( object ) ) ;
    if( !sysDictClass.hasObjectMethod( identifierstr( DataSource ) ) )
        return 0 ;

    dataSourceId = object.dataSource() ;
    return dataSourceId ;
}
//  <-- get last active formDataSource
В classDeclaration заводим переменную для хранения id последнего источника данных:
X++:
public class FormRun extends ObjectRun
{
    ...
    //  --> get last active formDataSource
    int     lastDataSourceId        ;
    //  <-- get last active formDataSource
}
перекрываем на форме метод selectControl:
X++:
public boolean selectControl(FormControl _control)
{
    boolean ret ;
    //  --> get last active formDataSource
    int     dataSourceId = element.getControlDataSourceId( element.selectedControl() ) ;

    if( dataSourceId )
        lastDataSourceId = dataSourceId ;
    //  <-- get last active formDataSource

    ret = super(_control);
    return ret;
}
По клику на кнопке остается только проанализировать значение lastDataSourceId:
X++:
void clicked()
{
    ...
    //  --> get last active formDataSource
    switch( lastDataSourceId )
    {
        case <Table1>_ds.id() :
            // TODO: код для источника данных <Table1>_ds
            // info( <Table1>_ds.name() ) ;
            break ;
        case <Table2>_ds.id() :
            // TODO: код для источника данных <Table2>_ds
            // info( <Table2>_ds.name() ) ;
            break ;
        case <Table3>_ds.id() :
            // info( <Table3>_ds.name() ) ;
            break ;
        default:
            break ;
    }
    //  <-- get last active formDataSource
}
За это сообщение автора поблагодарили: Poleax (1), Sergey Petrov (1).
 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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