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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.10.2012, 16:01   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Ax2012 Изменение сегмента account dimension"а
Есть некая задача, если совсем упрощенно:
1. Добавляем новую финансовую аналитику(dimension) в структуру с связью на некоторый справочник.
2. Имеем форму, на которой при вводе значения в поле из этой справочной таблицы нужно автоматически проставить значение сегмента в LedgerDimension равное введенному значению (То есть, речь идет об автоматическом segmented value entry, а сам функционал можно рассматривать, как некоторый журнал).

В чем у меня возникли трудности.
Если работать напрямую через DimStorage, созданный для LedgerDimension поля(findById), после внесения нового сегмента, сохранения DimStorage и обновления записи(
X++:
X.LedgerDimension = dimStorage.save();
). Контрол по прежнему продолжает показывать старое значение в сегменте. Но, при этом при фокусировке на нем, когда отрабатывает loadSegments на контроллере дайменшена или на лукапе(loadAutoCompleteData) значение сегмента показывается правильное, обновленное. При этом, когда мы с контрола уходим - старое(неактуальное) значение возвращается и после открытия\закрытия формы мы по прежнему имеем старое значение, которое отображается до фокуса на контроле или лукапа структуры счета. На сколько я понимаю, дело в кэше. Но как дать контролу понять, что нужно его обновить я пока не понимаю.

Конечно, изначально я смотрел в сторону класса-контролера дайменшена DimensionDynamicAccountController, но как с его помощью изменить значение сегмента - не ясно, в основном, в интерфейсе он содержит только обработчики событий на контроле. А мне же нужно инициировать событие. При этом, на классе LedgerDimensionController, есть protected метод setValue, который на ура устанавливает значение другого сегмента, будучи вызваным из segmentValueChanged для одного сегмента(по цепочке: произошло segmentValueChanged событие на контроле -> segmentValueChanged на DimensionDynamicAccountController -> segmentValueChanged на LedgerDimensionController и вызываем setValue для нашего сегмента, если теперь такой атрибут поддерживается активной структурой аккаунта). Но если мы попробуем вызвать setValue из вне этого события, а напрямую с modified нашего филда(создав до этого интерфейсный public wrapper) - сегмент не обновится. Опять же, догадываюсь, что это потому что не произошло событие в контроле аккаунта и ядро не скомандовало обновить сегменты.

То есть, вопрос в первую очередь: есть ли какой-то стандартный способ без костылей это сделать, а если нет, то возможно ли вообще нормально решить эту задачу(то ли, работая напрямую с DimStorage и заставляя контрол сбросить и обновить сегменты, то ли работая с классами контроллерами и сигнализировать об изменении сегментов).
Ну и последнее, по поводу сигнализации об изменении сегмента - думал явно вызывать segmentValueChanged метод на контроле, но для этого нужно сначала сгенерить SegmentValueChangedEventArgs, класс закрытый, системный, методы final, сетеров нет, то есть, он рассчитан исключительно на инстанциацию из ядра.
__________________
Axapta has seduced me deadly!
Старый 22.10.2012, 16:13   #2  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
UPD
Мда, забавно, проверил последний и самый простой способ: после вызова setValue на LedgerDimensionController просто вызвать modified контрола(который segmented value entry для LedgerDimension) и всё заработало.. Решил оставить пост с ответом - вдруг кому-то поможет.
__________________
Axapta has seduced me deadly!
Старый 22.10.2012, 16:20   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А вы не смотрели книгу "Microsoft Dynamics AX 2012 Development Cookbook" (недавно на форуме была ссылка на нее)? Там есть главка про работу с аналитиками и пример заполнения из кода.
__________________
Ivanhoe as is..
Старый 22.10.2012, 16:28   #4  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А вы не смотрели книгу "Microsoft Dynamics AX 2012 Development Cookbook" (недавно на форуме была ссылка на нее)? Там есть главка про работу с аналитиками и пример заполнения из кода.
Нет, не смотрел ещё, но подозреваю, что там, как и интернетах автозаполнение из внешнего кода, вне контекста формы. В любом случае, хотя с вопросом и разобрался, спасибо за наводку! В целом, книга годная?
__________________
Axapta has seduced me deadly!
Старый 22.10.2012, 17:14   #5  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Мне как не разработчику трудно судить. Спрошу у ребят.
Что мне ценно - там ставятся конкретные задачи и даются конкретные решения с объяснениями. Это, мне кажется, очень полезно.
__________________
Ivanhoe as is..
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25
emeadaxsupport: Fixed Dimension Support in AX2012 Blog bot DAX Blogs 0 24.02.2012 23:13
emeadaxsupport: AX2012 purchasing posting types “Purchase Expenditure for product” and “Purchase expenditure, un-invoiced" Blog bot DAX Blogs 0 15.02.2012 07:13
dynamicsaxtraining: Item setup: Inventory dimension group Blog bot DAX Blogs 1 05.10.2010 15:35
Khue Trinh: Setting up a link between a financial dimension and the site inventory dimension Blog bot DAX Blogs 0 27.09.2010 13:05
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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