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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.05.2014, 10:42   #1  
userax2009 is offline
userax2009
Участник
 
24 / 10 (1) +
Регистрация: 16.05.2014
Выбранное поле
Подскажите пожалуйста. Нахожусь на форме, выбираю какое-то поле в гриде. Как определить, на каком поле находится мой курсор, то есть какую ячейку я выбрал на форме ? Axapta 2009
Старый 16.05.2014, 10:48   #2  
abv2703 is offline
abv2703
Участник
 
92 / 22 (1) +++
Регистрация: 05.12.2003
Адрес: Санкт-Петербург, улица Бухарестсткая
Правая кнопка мыши, пункт меню: настройка.
Это интересует?
Старый 16.05.2014, 10:58   #3  
userax2009 is offline
userax2009
Участник
 
24 / 10 (1) +
Регистрация: 16.05.2014
Нет. Есть форма А с кнопкой, по нажатию которой открывается форма Б с данными для поля на форме А. Подумал, для того, чтобы корректно отображать данные в форме Б, необходимо определить на каком поле в данный момент находиться курсор. Соответственно вопрос, как определить где в данный момент мой курсор ?
Старый 16.05.2014, 11:01   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
А можно поподробнее задачу описать?
Из вашего текста совершенно непонятно, зачем надо подхватывать именно активное поле, а не активную строку
__________________
С уважением,
Вячеслав
Старый 16.05.2014, 11:02   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Нужно знать конкретное поле с точностью до столбца или строки будет достаточно?
Старый 16.05.2014, 11:02   #6  
userax2009 is offline
userax2009
Участник
 
24 / 10 (1) +
Регистрация: 16.05.2014
форма Б, которая открывается по кнопке, должна показывать историю изменения для выбранного поля на форме А
Старый 16.05.2014, 14:16   #8  
michel1971 is offline
michel1971
Участник
 
76 / 63 (3) ++++
Регистрация: 14.01.2011
Цитата:
Сообщение от userax2009 Посмотреть сообщение
форма Б, которая открывается по кнопке, должна показывать историю изменения для выбранного поля на форме А
по кнопке не получится, так как при нажатии на кнопку на гриде уже никакой объект не выбран. В общем случае свойства вызываеомго контрола можно получить вот так:
X++:
client static container getCallerControlProperty(Args args, container   _propertyCon)
{
    container           res;
    Object              callerControl;
    FormRun             caller;
    SysDictClass        dictClass;
    ContainerEnumerator ce;
    IdentifierName      methodName;
    #Properties
    ;

    if (args && args.caller())
    {
        if (SysDictClass::isEqualOrSuperclass(args.caller().handle(), classnum(FormRun)))
        {
            caller = args.caller();
            callerControl = caller.selectedControl();

            dictClass = new SysDictClass(classidget(callerControl));

            ce = new ContainerEnumerator(_propertyCon);

            while (ce.moveNext())
            {
                methodName = ce.current();

                if (dictClass.hasObjectMethod(methodName))
                    res += dictClass.callObject(methodName, callerControl);
                else
                    res += "";
            }


        }
    }

    return res;
}
В вашем случае на той форме откуда вызываете перекройте task и при определенном его значении вызывайте свою форму.
на вызываемой форме вызовите следующий код:
X++:
c = getCallerControlProperty(element.args(), [#PropertyDatasource, #PropertyDataField]);
Что быльше делать, я так понимаю, ясно
Старый 16.05.2014, 18:54   #9  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от userax2009 Посмотреть сообщение
форма Б, которая открывается по кнопке, должна показывать историю изменения для выбранного поля на форме А
На мой взгляд, вы не ту проблему решаете.
Такого рода кунштюки обычно нужны для разборок типа "кто накосячил". Если в каком-то поле кто-то регулярно косячит с данными, то это говорит о наличии трёх возможных проблем:
1) кривое разграничение прав доступа (не те люди имеют разрешение на правку)
2) ошибка программирования (не сделаны нужные проверки для ввода данных в поле)
3) ошибочная реализация бизнес-процессов (данные вводят не те, кто должен это делать)

вот с этим и надо разобраться в первую очередь.
__________________
С уважением,
Вячеслав
Старый 16.05.2014, 21:53   #10  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Коллега слегка неверно разъяснил задачу. Попробую подправить.
Задание состоит в чём:
Есть таблица логирования, куда заносятся данные, какое действие с каким полем какой таблицы было сделано. Таблица имеет вид:
Код таблицы \ Код поля \ Действия \ Время ...

Необходимо открывать форму с датасорсом в виде этой таблицы логирования на любой таблице путём вызова её через контекстное меню. То есть, как я вижу задачу: в init формы ловить args.record() с датасорса, который пришёл и отсеивать ненужные запросом.
Старый 19.05.2014, 09:07   #11  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
Форма SysDatabaseLog Вам в помощь. Хотя из смысла задача не понимаю, чем стандартный журнал базы данных Вас не устроил?
__________________
Айрат Вильданов.
skype: vildanov.a
Старый 19.05.2014, 11:30   #12  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Цитата:
Сообщение от userax2009 Посмотреть сообщение
Нет. Есть форма А с кнопкой, по нажатию которой открывается форма Б с данными для поля на форме А. Подумал, для того, чтобы корректно отображать данные в форме Б, необходимо определить на каком поле в данный момент находиться курсор. Соответственно вопрос, как определить где в данный момент мой курсор ?
Может быть так?
X++:
public void gotFocus()
{
    ;
    super();
    curFieldId = this.fieldBinding().fieldId();
}
Как говорил Ходжа Насреддин про свое надежное средство от тараканов: ловишь таракана и этим средством ему по морде... Это я к тому, что метод gotFocus придется перекрыть в каждом поле грида.
Старый 29.05.2014, 17:54   #13  
userax2009 is offline
userax2009
Участник
 
24 / 10 (1) +
Регистрация: 16.05.2014
:)
В общем, получилось сделать вот что:
узнал код таблицы и код записи
if ((element.args()) && (element.args().record()))
{
refTableId = element.args().record().tableId;
refRecId = element.args().record().RecId;
...
}
затем в методе Init моего датасоурса задаю критерии для открываемой(вызываемой) формы
if (refRecId)
{ this.query().dataSourceTable(tablenum(SysDataBaseLog2_ZTR)).addRange(fieldnum(SysDataBaseLog2_ZTR, Table)).value(queryValue(refTableId)); this.query().dataSourceTable(tablenum(SysDataBaseLog2_ZTR)).addRange(fieldnum(SysDataBaseLog2_ZTR, LogRecId)).value(queryValue(refRecId)); this.query().dataSourceTable(tablenum(SysDataBaseLog2_ZTR)).addRange(fieldnum(SysDataBaseLog2_ZTR, Field)).value(queryValue(fieldId));
}
Вот, теперь осталось узнать, как считать код поля, на котором находится мой курсор. Есть идеи как это сделать ?
Старый 29.05.2014, 18:35   #14  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Цитата:
Сообщение от userax2009 Посмотреть сообщение
затем в методе Init.....
.....
.....осталось узнать, как считать код поля, на котором находится мой курсор.
В каком методе ? Если в методе Init, то ни как, курсор еще ни где не находится. Чуть выше я рассказал, как узнать в методе gotFocus поля грида. Может быть в методе active датасорса ?
Старый 29.05.2014, 19:10   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Мартынов Дмитрий Посмотреть сообщение
Может быть так?
Как говорил Ходжа Насреддин про свое надежное средство от тараканов: ловишь таракана и этим средством ему по морде... Это я к тому, что метод gotFocus придется перекрыть в каждом поле грида.
Ну почему же ?
Можно запихнуть анализатор сюда :
\Classes\SysSetupFormRun\selectControl

и запоминать какой контрол активировался и.т.п.
А если только для одной формы интересно, то аналогичный метод для конкретной формы.

Последний раз редактировалось Logger; 29.05.2014 в 19:13.
За это сообщение автора поблагодарили: Мартынов Дмитрий (1), Pustik (2), gl00mie (3).
Старый 29.05.2014, 20:14   #16  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от Logger Посмотреть сообщение
Ну почему же ?
Можно запихнуть анализатор сюда :
\Classes\SysSetupFormRun\selectControl

и запоминать какой контрол активировался и.т.п.
А если только для одной формы интересно, то аналогичный метод для конкретной формы.
думаю не покатит. Человека интересует момент, когда открывается вторая форма, и там он хочет видеть на каком же поле находился курсор, находящийся на первой форме. Метод SelectControl уже позади. Если я не ошибаюсь, то интуиция мне подсказывает, что это сделать вполне реально, надо просто поэкспериментировать. Завтра будет такая возможность.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 29.05.2014, 20:20   #17  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Цитата:
Сообщение от Logger Посмотреть сообщение
и запоминать какой контрол активировался и.т.п.
Вот это не заметил, пропустил , Sorry. Тоже вариант. останется только это реализовать.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 29.05.2014, 21:27   #18  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
selectControl ...... метод для конкретной формы.
Хорошая мысль. Как то так получается:

X++:
public boolean selectControl(FormControl _control)
{
    boolean ret;
    ;
    ret = super(_control);
    
    if (ret && _control.parentControl().name() == "Grid2")
    {
        curFieldId = _control.fieldBinding().fieldId();
    }
    else
    {
        curFieldId = 0;
    }
    return ret;
}
А дальше можно юзать curFieldId где угодно. Хоть в active хоть в canClose...
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 30.05.2014, 08:30   #19  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Проверка на parent - интересное решение. А для решения задачи в общем случае на уровне SysSetupFormRun можно предложить хранить не только самый последний контрол, а последовательный список активных контролов (хранить можно в виде стека - если выбранный контрол уже присутствует в списке, то удалять его из середины списка и добавлять на вершину). Таким образом в любой момент можно будет по такому списку найти последний контрол с нужным парентом.
Старый 30.05.2014, 10:02   #20  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Идея проверять на parent правда интересна.

Однако методов
X++:
_control.parentControl()
X++:
_control.fieldBinding()
для FormControl я в 2009й не нахожу.

Может это решение применимо для 2012й?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поле в гриде не из датасорса Katuxa DAX: Программирование 9 01.03.2013 16:24
Закрыто поле на таблице kaw DAX: Программирование 2 15.03.2012 10:55
Пробелы теряются в текстовом поле erudit DAX: Программирование 20 07.04.2011 17:47
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Поле "Оплатить до" в строке общего журнала longson DAX: Функционал 7 29.03.2008 14:38

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:26.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.