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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.10.2007, 15:04   #1  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Знает ли FormDataObject о том, чьих он кровей ? :)
Есть DataSource на форме, есть у него некие поля, одно из которых расширенного типа, массив а-ля Dimension. Можно ли как-то выяснить в методах FormDataObject'а , а какому полю таблицы он принадлежит ? или на крайний случай индекс в массиве расширенного типа ?

Последний раз редактировалось TasmanianDevil; 02.10.2007 в 15:09.
Старый 03.10.2007, 11:41   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Есть DataSource на форме, есть у него некие поля, одно из которых расширенного типа, массив а-ля Dimension. Можно ли как-то выяснить в методах FormDataObject'а , а какому полю таблицы он принадлежит ? или на крайний случай индекс в массиве расширенного типа ?
Сам по себе FormDataObject, судя по его методам и свойствам, конечно же, такой информацией не располагает. Однако, как мы знаем, у исходного объекта FormDataSource есть свойство table, возвращающее tableId таблицы, а сам FormDataObject возвращается из FormDataSource.object() после указания objectId, который равен либо fieldId соотв. поля, либо fieldId2Ext(fieldId, arrayIndex) для отдельного значения массива. Т.о. получить данные о поле таблицы можно imho лишь по исходному объекту FormDataSource - с помощью DictTable.
Старый 03.10.2007, 12:29   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Ну перебрать все поля источника данных с получением соответсвующего FormDataObject'а можно, а но к сожалению вряд ли нужно ...
Дело в том, что задача-то конкретно и стояла, чтобы в момент исполнения переопределенного toolTip() на FormDataObject'е получить информацию о поле таблицы источника данных, относящегося к этому FormDataObject с минимальным кол-вом итераций. Пока топорно решаю Map'ом (как оказалось , у FormDataObject и нормального уникального идентификатора этого объекта в рамках источника данных просто так не найдешь, юзаю результат метода xml() в этом качестве), заполняющимся в момент инициализации источника данных. Но это - не выход, по большому счету

Наверное проще вообще не трогать форму с ее источником данных, а сделать все на уровне самой таблицы и отлавливать там уже здоровенным switch'ем нужные поля...
Старый 03.10.2007, 12:53   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
задача-то конкретно и стояла, чтобы в момент исполнения переопределенного toolTip() на FormDataObject'е получить информацию о поле таблицы источника данных, относящегося к этому FormDataObject с минимальным кол-вом итераций. Наверное проще вообще не трогать форму с ее источником данных, а сделать все на уровне самой таблицы и отлавливать там уже здоровенным switch'ем нужные поля...
Я так понимаю, вы хотели написать некий "универсальный" обработчик toolTip() для FormDataSource?.. В любом случае переопределение на исходной таблице метода toolTipField(), в котором информация о поле есть, представляется куда менее трудоемким, нежели переопределение на каждом из (нужных) полей DataSource'а методов toolTip(), в которых информации о поле таблицы нет, - особенно с учетом переборов полей DS, или заполнением Map'а по всем полям, или иными танцами с бубном... И, собственно, почему switch должен получиться здоровенным? Неужели так много полей, по которым требуется выводить "нестандартный" tooltip?
Старый 03.10.2007, 13:50   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Я чё-то так и не понял, что надо.
Почему бы в tooltip-e.
Не использовать this.name(). Получаете имя контрола его вызвавшего.
Индекс обрезанием n-го количества символов получете.
Старый 03.10.2007, 14:46   #6  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
gl00mie, именно так, универсальный toolTip у определенного поля в таблице.
Именно так и поступил, на toolTipField(код поля) у таблицы остановился.
Результат формируется в зависимости от значения toolTip'ствующего поля (A) и еще одного (B) в таблице. Оба поля имеют EDT-массив одинаковой размерности и toolTip() = f(A[i],B[i]).

Но с этой реализацией возник следующий вопрос - а есть ли возможность по коду поля в toolTipField() однозначно определить принадлежность к множеству кодов полей-элементов EDT-массива и индекс внутри этого массива без лишних итераций перебора значений этих кодов полей в поле-массиве ? Пока склоняюсь к варианту "нет" ...

miklenew, дык рад бы, но нету метода name() у экземпляра FormDataObject .
Старый 03.10.2007, 16:30   #7  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
miklenew, дык рад бы, но нету метода name() у экземпляра FormDataObject .
Наверное я опять доконца не понял.
Что делаю создаю новую таблицу.
Кидаю на нею поле dimension.
Создаю форму кидаю на неё таблицу.
На design кидаю поля dimension с индексами.
Перекрываю на таблице tooltipField.
X++:
public str toolTipField(fieldId _fieldId)
{
    DictField dictField;
    str ret;
    ret = super(_fieldId);
    dictField = new dictField(tablenum(table4), _fieldId);
    info(dictField.name());
    return ret;
}
Всё ок.
Старый 04.10.2007, 06:21   #8  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
miklenew, DictField и FormDataObject - звери разные
В приведенном Вами примере - toolTip на самой таблице и есть параметр , идентифицирующий поле . При выполнении метода toolTip на поле источника данных формы (именно на объекте типа FormDataObject у FormDataSource) - информации о поле нет никакой ни в параметрах, ни в самом объекте FormDataObject
X++:
FormDataObject.toolTip
Run on: Called
Syntax
public str toolTip()
В этом и заключалась проблема
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axapta WinAPI::SewWindow... кто знает как? UNRW DAX: Программирование 2 26.09.2008 15:28
Кто знает можно как нибудь открыть доступ к полю на форме если DataSource закрыт для AlexT1 DAX: Программирование 9 03.11.2005 00:18
М.б. кто знает - насколько успешно счас работает Аксапта в Техносиле? БББ DAX: Функционал 9 03.09.2004 17:07
простенький вопросик для тех кто знает Valia DAX: Программирование 5 04.09.2003 12:07
Кто знает, что можно исправлять в Ах на USR слое без модуля "разработка"? sergey_alekseev DAX: Функционал 2 03.09.2003 11:44

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

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

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