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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2011, 00:15   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от stalker25 Посмотреть сообщение
Добрый день, есть такая проблема:

Есть:
---------------------------------
Table1.field1(Enum:NoYesId)
---------------------------------
Forma1
DataSource
Table1
InitValue():

X++:
Table1.Field1 = NoYes::Yes;
Table1_ds.object(fieldNum(Table1, Field1)).modified();
----------------------------------
Form1
DataSource
Table1
Fields
Field1
Methods
modified():

X++:
NoYes noYes = this.getValue();
------------------------------------

открываем форму, инициализируем значение field1, выполняется modified(), на getValue(), axapta падает, а вот getValue(1) работает ... не подскажете почему?
1. Для выполнения каких либо действий по изменению какого либо поля, лучше перекрывать метод modifiedField() на самой таблице, а не на поле формы. В этом случае использование бизнес логики расширяет свои горизонты на всю систему, и её можно использовать откуда угодно. + Все что вы напишите на форме будет вызываться на клиенте, что скажется на производительности.
2. В initValue() таблицы Вы уже проинициализировали поле Field1 значением, поэтому в методе modified() на поле датасорса формы можно это поле и использовать. Т.е. можно написать вот такой код (и мне кажется это более нагляным вариантом):
X++:
NoYes  noYes = Table1.Field1;
В таком варианте точно аксапта не "упадет"
3. Метод getValue() возвращает значение поля, в котором он (метод) вызывается. У этого поля есть параметр _rowIndex (тип Integer по умолчанию = 0), который указывает системе номер строки датасорса формы, из которой вернуть значение поля. В случае нулевое значение этого параметра, возвращается значение этого поля из последней строки датасорса. Если строк в датасорсе на форме нет, то этот метод ничего не возвращает, более того аксапта просто валится (это воспроизводится только для полей с типом Enum, для поля с типом String не воспроизвелось). Так как в вашем случае строка ещё не создана, то этот метод Вам использовать не надо. Для того, что бы определить какое значение проставлено в поле Field1 воспользуйтесь способом из второго пункта.

P.S. старайтесь как можно меньше программировать на форме, только в крайних случаях. В данном вашем случае, лучше воспользуйтесь моим советом из первого пункта.
P.S1. А лучше опишите задачу, возможно, она решается как то более просто (уж больно странно в методе initValue() проинициализировать поле, потом вызвать его метод modified() и в этом методе получать его же значение...).
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 14.12.2011 в 00:19.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Finding the X++ call stack that caused a crash Blog bot DAX Blogs 2 14.01.2020 13:20
emeadaxsupport: What to do if you have a crash Blog bot DAX Blogs 0 15.06.2011 18:11
emeadaxsupport: Finding the AX user that caused an AOS crash Blog bot DAX Blogs 0 11.04.2011 00:12
maheshtej: Performance on server degrades after an AOS crash Blog bot DAX Blogs 0 28.01.2011 23:14
Вопросы по OLAP в DAX2009 oleg_e DAX: Функционал 9 10.12.2008 02:02

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

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

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