|  22.10.2012, 16:01 | #1 | 
| Участник | Ax2012 Изменение сегмента account dimension"а 
			
			Есть некая задача, если совсем упрощенно: 1. Добавляем новую финансовую аналитику(dimension) в структуру с связью на некоторый справочник. 2. Имеем форму, на которой при вводе значения в поле из этой справочной таблицы нужно автоматически проставить значение сегмента в LedgerDimension равное введенному значению (То есть, речь идет об автоматическом segmented value entry, а сам функционал можно рассматривать, как некоторый журнал). В чем у меня возникли трудности. Если работать напрямую через DimStorage, созданный для LedgerDimension поля(findById), после внесения нового сегмента, сохранения DimStorage и обновления записи( X++: X.LedgerDimension = dimStorage.save(); Конечно, изначально я смотрел в сторону класса-контролера дайменшена 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 | 
| Участник | 
			
			UPD Мда, забавно, проверил последний и самый простой способ: после вызова setValue на LedgerDimensionController просто вызвать modified контрола(который segmented value entry для LedgerDimension) и всё заработало.. Решил оставить пост с ответом - вдруг кому-то поможет. 
				__________________ Axapta has seduced me deadly!   | 
|  | 
|  22.10.2012, 16:20 | #3 | 
| Участник | 
			
			А вы не смотрели книгу "Microsoft Dynamics AX 2012 Development Cookbook" (недавно на форуме была ссылка на нее)? Там есть главка про работу с аналитиками и пример заполнения из кода.
		 
				__________________ Ivanhoe as is.. | 
|  | 
|  22.10.2012, 16:28 | #4 | 
| Участник | 
			
			Нет, не смотрел ещё, но подозреваю, что там, как и интернетах автозаполнение из внешнего кода, вне контекста формы. В любом случае, хотя с вопросом и разобрался, спасибо за наводку! В целом, книга годная?
		 
				__________________ Axapta has seduced me deadly!   | 
|  | 
|  22.10.2012, 17:14 | #5 | 
| Участник | 
			
			Мне как не разработчику трудно судить. Спрошу у ребят.  Что мне ценно - там ставятся конкретные задачи и даются конкретные решения с объяснениями. Это, мне кажется, очень полезно. 
				__________________ Ivanhoe as is.. | 
|  | 
|  | 
| 
 |