AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 16.05.2014, 10:42   #1  
userax2009 ist offline
userax2009
Участник
 
24 / 10 (1) +
Registriert seit: 16.05.2014
Выбранное поле
Подскажите пожалуйста. Нахожусь на форме, выбираю какое-то поле в гриде. Как определить, на каком поле находится мой курсор, то есть какую ячейку я выбрал на форме ? Axapta 2009
Alt 16.05.2014, 10:48   #2  
abv2703 ist offline
abv2703
Участник
 
93 / 22 (1) +++
Registriert seit: 05.12.2003
Ort: Санкт-Петербург, улица Бухарестсткая
Правая кнопка мыши, пункт меню: настройка.
Это интересует?
Alt 16.05.2014, 10:58   #3  
userax2009 ist offline
userax2009
Участник
 
24 / 10 (1) +
Registriert seit: 16.05.2014
Нет. Есть форма А с кнопкой, по нажатию которой открывается форма Б с данными для поля на форме А. Подумал, для того, чтобы корректно отображать данные в форме Б, необходимо определить на каком поле в данный момент находиться курсор. Соответственно вопрос, как определить где в данный момент мой курсор ?
Alt 16.05.2014, 11:01   #4  
pitersky ist offline
pitersky
северный Будда
Benutzerbild von pitersky
Ex AND Project
Соотечественники
 
1.517 / 435 (18) +++++++
Registriert seit: 26.09.2007
Ort: Солнечная система
А можно поподробнее задачу описать?
Из вашего текста совершенно непонятно, зачем надо подхватывать именно активное поле, а не активную строку
__________________
С уважением,
Вячеслав
Alt 16.05.2014, 11:02   #5  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.449 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Нужно знать конкретное поле с точностью до столбца или строки будет достаточно?
Alt 16.05.2014, 11:02   #6  
userax2009 ist offline
userax2009
Участник
 
24 / 10 (1) +
Registriert seit: 16.05.2014
форма Б, которая открывается по кнопке, должна показывать историю изменения для выбранного поля на форме А
Alt 16.05.2014, 14:16   #8  
michel1971 ist offline
michel1971
Участник
 
79 / 80 (3) ++++
Registriert seit: 14.01.2011
Zitat:
Zitat von userax2009 Beitrag anzeigen
форма Б, которая открывается по кнопке, должна показывать историю изменения для выбранного поля на форме А
по кнопке не получится, так как при нажатии на кнопку на гриде уже никакой объект не выбран. В общем случае свойства вызываеомго контрола можно получить вот так:
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]);
Что быльше делать, я так понимаю, ясно
Alt 16.05.2014, 18:54   #9  
pitersky ist offline
pitersky
северный Будда
Benutzerbild von pitersky
Ex AND Project
Соотечественники
 
1.517 / 435 (18) +++++++
Registriert seit: 26.09.2007
Ort: Солнечная система
Zitat:
Zitat von userax2009 Beitrag anzeigen
форма Б, которая открывается по кнопке, должна показывать историю изменения для выбранного поля на форме А
На мой взгляд, вы не ту проблему решаете.
Такого рода кунштюки обычно нужны для разборок типа "кто накосячил". Если в каком-то поле кто-то регулярно косячит с данными, то это говорит о наличии трёх возможных проблем:
1) кривое разграничение прав доступа (не те люди имеют разрешение на правку)
2) ошибка программирования (не сделаны нужные проверки для ввода данных в поле)
3) ошибочная реализация бизнес-процессов (данные вводят не те, кто должен это делать)

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

Необходимо открывать форму с датасорсом в виде этой таблицы логирования на любой таблице путём вызова её через контекстное меню. То есть, как я вижу задачу: в init формы ловить args.record() с датасорса, который пришёл и отсеивать ненужные запросом.
Alt 19.05.2014, 09:07   #11  
AraraT® ist offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Registriert seit: 13.01.2006
Ort: Республика Татарстан, г. Казань
Форма SysDatabaseLog Вам в помощь. Хотя из смысла задача не понимаю, чем стандартный журнал базы данных Вас не устроил?
__________________
Айрат Вильданов.
skype: vildanov.a
Alt 19.05.2014, 11:30   #12  
Мартынов Дмитрий ist offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Registriert seit: 02.02.2004
Ort: г. Москва
Zitat:
Zitat von userax2009 Beitrag anzeigen
Нет. Есть форма А с кнопкой, по нажатию которой открывается форма Б с данными для поля на форме А. Подумал, для того, чтобы корректно отображать данные в форме Б, необходимо определить на каком поле в данный момент находиться курсор. Соответственно вопрос, как определить где в данный момент мой курсор ?
Может быть так?
X++:
public void gotFocus()
{
    ;
    super();
    curFieldId = this.fieldBinding().fieldId();
}
Как говорил Ходжа Насреддин про свое надежное средство от тараканов: ловишь таракана и этим средством ему по морде... Это я к тому, что метод gotFocus придется перекрыть в каждом поле грида.
Alt 29.05.2014, 17:54   #13  
userax2009 ist offline
userax2009
Участник
 
24 / 10 (1) +
Registriert seit: 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));
}
Вот, теперь осталось узнать, как считать код поля, на котором находится мой курсор. Есть идеи как это сделать ?
Alt 29.05.2014, 18:35   #14  
Мартынов Дмитрий ist offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Registriert seit: 02.02.2004
Ort: г. Москва
Zitat:
Zitat von userax2009 Beitrag anzeigen
затем в методе Init.....
.....
.....осталось узнать, как считать код поля, на котором находится мой курсор.
В каком методе ? Если в методе Init, то ни как, курсор еще ни где не находится. Чуть выше я рассказал, как узнать в методе gotFocus поля грида. Может быть в методе active датасорса ?
Alt 29.05.2014, 19:10   #15  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.995 / 3293 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Zitat:
Zitat von Мартынов Дмитрий Beitrag anzeigen
Может быть так?
Как говорил Ходжа Насреддин про свое надежное средство от тараканов: ловишь таракана и этим средством ему по морде... Это я к тому, что метод gotFocus придется перекрыть в каждом поле грида.
Ну почему же ?
Можно запихнуть анализатор сюда :
\Classes\SysSetupFormRun\selectControl

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

Geändert von Logger (29.05.2014 um 19:13 Uhr)
This post has been rated by: Мартынов Дмитрий (1), Pustik (2), gl00mie (3).
Alt 29.05.2014, 20:14   #16  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
Zitat:
Zitat von Logger Beitrag anzeigen
Ну почему же ?
Можно запихнуть анализатор сюда :
\Classes\SysSetupFormRun\selectControl

и запоминать какой контрол активировался и.т.п.
А если только для одной формы интересно, то аналогичный метод для конкретной формы.
думаю не покатит. Человека интересует момент, когда открывается вторая форма, и там он хочет видеть на каком же поле находился курсор, находящийся на первой форме. Метод SelectControl уже позади. Если я не ошибаюсь, то интуиция мне подсказывает, что это сделать вполне реально, надо просто поэкспериментировать. Завтра будет такая возможность.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Alt 29.05.2014, 20:20   #17  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
Zitat:
Zitat von Logger Beitrag anzeigen
и запоминать какой контрол активировался и.т.п.
Вот это не заметил, пропустил , Sorry. Тоже вариант. останется только это реализовать.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Alt 29.05.2014, 21:27   #18  
Мартынов Дмитрий ist offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Registriert seit: 02.02.2004
Ort: г. Москва
Zitat:
Zitat von Logger Beitrag anzeigen
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...
This post has been rated by: S.Kuskov (1).
Alt 30.05.2014, 08:30   #19  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.449 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Проверка на parent - интересное решение. А для решения задачи в общем случае на уровне SysSetupFormRun можно предложить хранить не только самый последний контрол, а последовательный список активных контролов (хранить можно в виде стека - если выбранный контрол уже присутствует в списке, то удалять его из середины списка и добавлять на вершину). Таким образом в любой момент можно будет по такому списку найти последний контрол с нужным парентом.
Alt 30.05.2014, 10:02   #20  
Cardagant ist offline
Cardagant
Участник
 
317 / 54 (2) ++++
Registriert seit: 11.10.2011
Идея проверять на parent правда интересна.

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

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Поле в гриде не из датасорса 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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 06:21 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.