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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.12.2012, 07:47   #1  
bodeaux is offline
bodeaux
Участник
Аватар для bodeaux
 
35 / 10 (1) +
Регистрация: 08.10.2012
Адрес: Екатеринбург
Имитация выбора значения поля на DS формы.
Можно ли программно заполнить поле на форме так, чтобы был исполнен метод modified ( для этого поля из ds ) ?

Например, на форме SalesTable в гриде, отображающем SalesLines_ds, создали новую запись и после выбора значения поля ItemId из выпадающего списка автоматически заполняются некоторые поля (если я не ошибаюсь, из-за работы метода DataSourses/ SalesLines / Fields / ItemId / modified ). Хочу получить аналогичный эффект при заполнении этого поля из кода. Посоветуйте, пожалуйста, как это сделать.
Старый 03.12.2012, 07:53   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
X++:
SalesLine_ds.object(fieldNum(SalesLine,  ItemId)).modified();

Последний раз редактировалось S.Kuskov; 03.12.2012 в 07:57.
За это сообщение автора поблагодарили: bodeaux (1).
Старый 03.12.2012, 07:56   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Принудительно вызвать соответствующий метод таблицы/датасорса с передачей потребных параметров.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 03.12.2012, 09:15   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от bodeaux Посмотреть сообщение
Можно ли программно заполнить поле на форме так, чтобы был исполнен метод modified ( для этого поля из ds ) ?
Сделать можно - вопрос в том, для чего.
Цитата:
Сообщение от bodeaux Посмотреть сообщение
Например, на форме SalesTable в гриде, отображающем SalesLines_ds... Хочу получить аналогичный эффект при заполнении этого поля из кода.
Следует разделять работу бизнес-логики и презентационной логики: первое - это, к примеру, заполнение связанных полей табличного буфера при изменении определенного поля, второе - это, к примеру, управление видимостью/доступностью контролов на форме в зависимости от заполненности или значения поля. То, что на форме SalesTable на изменение значения полей завязана куча бизнес-логики, - это жуткий антипаттерн разработки в Аксапте, и в своих формах и/или функционале так делать не стоит. Если из кода создается та же строка заказа (а менять в ней ItemId можно только при создании), то должно быть без разницы, происходит ли это на форме SalesTable, или любой другой форме, или вообще дело происходит в пакетном задании. Если у вас из формы строки заказа будут создаваться одним образом, а из неинтерактивного куска кода - другим, то система будет вести себя криво в случае всяких там импортов, сценариев интеграции и проч. В тех случаях, когда нужно заполнять поля таблицы из кода и дергать логику подтягивания значений связанных полей, надо либо дергать modifiedField() таблицы на изменении заполняемых вами полей, либо, предпочтительнее, использовать AxBC-класс для таблицы и заполнять поля через него.
За это сообщение автора поблагодарили: bodeaux (1).
Старый 03.12.2012, 09:56   #5  
bodeaux is offline
bodeaux
Участник
Аватар для bodeaux
 
35 / 10 (1) +
Регистрация: 08.10.2012
Адрес: Екатеринбург
Цитата:
Сообщение от gl00mie Посмотреть сообщение
это жуткий антипаттерн разработки в Аксапте,
Готов подписаться под каждым словом. Проблема в том, что мне запрещено изменять существующий код (даже с благими намерениями), поэтому приходится выбирать самый нелогичный путь действий
Старый 03.12.2012, 11:47   #6  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
В какой версии работаете? Не в 2012 случайно?
__________________
// no comments
Старый 04.12.2012, 09:30   #7  
bodeaux is offline
bodeaux
Участник
Аватар для bodeaux
 
35 / 10 (1) +
Регистрация: 08.10.2012
Адрес: Екатеринбург
Цитата:
Сообщение от dech Посмотреть сообщение
В какой версии работаете? Не в 2012 случайно?
В 3.0.
Старый 04.12.2012, 10:15   #8  
bodeaux is offline
bodeaux
Участник
Аватар для bodeaux
 
35 / 10 (1) +
Регистрация: 08.10.2012
Адрес: Екатеринбург
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
X++:
SalesLine_ds.object(fieldNum(SalesLine,  ItemId)).modified();
Оказывается так не работает - вызывается не modified(), а SalesLine.modifiedField().

Вот так работает:
X++:
FormDataObject     fieldItemId;

fieldItemId = SalesLine_ds.object(fieldNum(SalesLine,  ItemId));

fieldItemId.modified();
Спасибо.
Старый 04.12.2012, 10:41   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Точно, есть такое Вопрос по InventJournalTrans_ds.getNext()
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
изменение свойства mandatory у поля формы tolstjak DAX: Программирование 2 23.11.2010 13:35
Настройка DS вызываемой формы. pwp DAX: Программирование 15 02.03.2010 16:38
Обновление DS формы из дочерней формы breakpoint DAX: Программирование 3 24.12.2008 15:54
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00

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

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

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