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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.12.2009, 11:41   #1  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Формируемое поле на Grid
Вопрос, похоже, простой, но тем не менее. Одно из полей таблицы, показанное на
Grid является производным от нескольких полей в той же таблице.
1. В каком в методе лучше окончательно формировать это поле: leaveRecord() или write() этой формы или еще где то?
2. Как показать (обновить на Grid) это поле при уходе с этой записи ? В каком методе ?
Старый 25.12.2009, 11:51   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от pwp Посмотреть сообщение
Вопрос, похоже, простой, но тем не менее. Одно из полей таблицы, показанное на
Grid является производным от нескольких полей в той же таблице.
1. В каком в методе лучше окончательно формировать это поле: leaveRecord() или write() этой формы или еще где то?
2. Как показать (обновить на Grid) это поле при уходе с этой записи ? В каком методе ?
На таблице, в методе modifiedField - при изменении значений полей, от которых зависит значение - если вычисления не трудоемки по производительности;
или в методах insert+update.
На гриде поле обновится автоматом.
Старый 25.12.2009, 12:03   #3  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от DSPIC Посмотреть сообщение
На таблице, в методе modifiedField - при изменении значений полей, от которых зависит значение - если вычисления не трудоемки по производительности;
или в методах insert+update.
Ну в методе modifiedField не очень красиво , если таких полей > 1.
"или в методах insert+update." - на таблице или источнике данных ?

Цитата:
Сообщение от DSPIC Посмотреть сообщение
На гриде поле обновится автоматом.
Да вот не обновляется автоматом, нужен dataSource_DS.research() только вот куда его поставить ?
Старый 25.12.2009, 12:04   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Если производное поле создано только для отображения вспомогательной информации и хранить в БД его значение не нужно, то можно (даже нужно) заменить его на display метод
Старый 25.12.2009, 12:06   #5  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Если производное поле создано только для отображения вспомогательной информации и хранить в БД его значение не нужно, то можно (даже нужно) заменить его на display метод
Это тоже понятно, но оно нужно для дальнейшей работы (поисков, сортировок) в других формах.
Старый 25.12.2009, 12:07   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pwp Посмотреть сообщение
Ну в методе modifiedField не очень красиво , если таких полей > 1.
Это нормальная практика. Поищите по стандартным таблицам метод modifiedField. К тому же никто вам не мешает саму логику вычислений (если она грамоздка) вынести в соседний метод или скажем в специальный класс
Старый 25.12.2009, 12:13   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pwp Посмотреть сообщение
Одно из полей таблицы, показанное на Grid является производным от нескольких полей в той же таблице
Ещё вопрос. Является производным от нескольких полей в той же записи этой таблицы или от других записей?

Если вы хотите увидеть изменения произошедшие не в активной строке грида, то вам действительно необходимо принудительно сделать reread и refresh этой строке (по умолчанию перерисовывается только активная)
Старый 25.12.2009, 12:16   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pwp Посмотреть сообщение
нужен dataSource_DS.research() только вот куда его поставить ?
Событие после которого обновятся данные (вызовутся update или insert таблицы) в активной строке - это dataSource.write(). Т.е. делать research() нужно после super() этого метода.
За это сообщение автора поблагодарили: pwp (1).
Старый 25.12.2009, 12:20   #9  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от pwp Посмотреть сообщение
Ну в методе modifiedField не очень красиво , если таких полей > 1.
"или в методах insert+update." - на таблице или источнике данных ?

Да вот не обновляется автоматом, нужен dataSource_DS.research() только вот куда его поставить ?
Вроде обновляется, стандартный подход;

X++:
public void modifiedField(fieldId _fieldId)
{
    super(_fieldId);

    switch (_fieldId)
    {
        case fieldnum(Table2, ItemId1):
        case fieldnum(Table2, ItemId2):
            this.calcItemId();
            break;
    }
}
X++:
void calcItemId()
{
    ;
    this.ItemId = this.ItemId1 + this.ItemId2;
}
В любом случае, объект датасорса доступен и в таблице, если курсор привязан к форме:

X++:
if (this.isFormDataSource())
    {
        this.dataSource().refresh();
    }
Вложения
Тип файла: xpo Table_Table2.xpo (2.1 Кб, 445 просмотров)
Старый 25.12.2009, 12:27   #10  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Событие после которого обновятся данные (вызовутся update или insert таблицы) в активной строке - это dataSource.write(). Т.е. делать research() нужно после super() этого метода.
Ок, прекрасно. Спасибо.
Старый 25.12.2009, 13:18   #11  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от pwp Посмотреть сообщение
Ок, прекрасно. Спасибо.
Ax3SP6
Research() обновляет весь список и курсор может встать не в ту строку,
которую Вы редактировали (если строк больше одной и редактировали строку где-нибудь в середине).
В результате Вы начнете беспокоиться о методах позиционирования в гриде.

Следование совету DSPIC (перекрытие метода modifiedField на таблице), позволит избежать беспокойства.
Обновить на экране строчку методом refresh() можно прямо из modifiedField на таблице.

Последний раз редактировалось Кирилл; 25.12.2009 в 13:23.
Старый 25.12.2009, 14:20   #12  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от Кирилл Посмотреть сообщение
Ax3SP6
Research() обновляет весь список и курсор может встать не в ту строку,
......
Обновить на экране строчку методом refresh() можно прямо из modifiedField на таблице.
Цитата:
Сообщение от DSPIC
Вроде обновляется, стандартный подход;
public void modifiedField(fieldId _fieldId)................
void calcItemId()
.............
Полностью согласен, но проблема в том, что не все записи этой таблицы подвергаются такому преобразованию, а лишь те записи которые еще при уточнении по двум другим таблицам имеют спецпризнак. Причем не на всех формах с этой таблицей это нужно. Поэтому мне казалось, что ставить все эти методы на таблицу не совсем правильно, а лучше делать на форме, а может на источнике формы.Но в любом случае спасибо за ответы, была ценная информация для меня.
Старый 25.12.2009, 16:00   #13  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Посмотреите может, как это сделано на InventSum? Я не полностью прочитал тему, но вроде как Вам должно подойти - там как раз много полей, которые являются производными от других полей
За это сообщение автора поблагодарили: pwp (1).
Старый 25.12.2009, 20:31   #14  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Делал аналогичное, расчет жил в validateField на таблице, ничего обновлять не приходилось - значения расчитываемых полей менялось в grid'е при смене фокуса в полях таблицы.
DAX 3 SP3
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 26.12.2009, 09:00   #15  
pwp is offline
pwp
Участник
 
76 / 16 (1) ++
Регистрация: 08.07.2008
Адрес: Обнинск
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Делал аналогичное, расчет жил в validateField на таблице, ничего обновлять не приходилось - значения расчитываемых полей менялось в grid'е при смене фокуса в полях таблицы.
DAX 3 SP3
Ок, вот это похоже эффективней всего, спасибо всем, принявшим участие, эту тему можно пока прикрыть.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Filter-by-Grid Blog bot DAX Blogs 2 30.05.2012 13:39
Dynamics AX: DAX 4.0 Filter by Grid [Update] Blog bot DAX Blogs 0 27.04.2007 17:10
Поле в Grid типа Window Андре DAX: Программирование 13 18.12.2003 18:22
Объединить несколько полей таблицы в одном поле Grid-а на форме? storer DAX: Программирование 2 12.11.2003 14:08
Кнопка выбора даты в поле Grid Maxim Gorbunov DAX: База знаний и проекты 0 28.11.2001 14:03
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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