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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.12.2002, 11:48   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
! Осторожно! Грабли!
Пару раз наступив, хочу предостеречь коллег.

Стандартная схема:
1. Есть форма с гридом и есть кнопочка, вызывающая какую-то обработку текущей строки
2. При нажатии кнопочки запускается процесс, где в классе (форме) обработки выполняется строка
myTable = args().record();
3. В процессе выводится некий диалог с пользователем.
4. Делается окончательная обработка с использованием курсора myTable

Все работает замечательно... но в один "прекрасный" день пользователь на шаге 3 за какой-то надобностью полез обратно в форму с гридом и перешел на другую запись.
В результате на шаге 4 мы используем уже другую(!!!) запись из myTable.

Поймать эту ошибку сложно, так как возникает редко, а последствия могут быть очень разнообразны.

Решение:
На шаге 2 использовать строку
myTable.data(args.record());
Старый 08.01.2003, 19:35   #2  
andrey_k is offline
andrey_k
Участник
 
11 / 10 (1) +
Регистрация: 14.08.2002
Адрес: moscow
а может ето не грабли а фича
Старый 11.09.2003, 11:02   #3  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Продолжение (грабли 2)
Есть формочка с табличкой MyTable
Есть кнопка на форме с таким методом:
PHP код:
void clicked()
{;
    
super();
    
MyTable.changeStatus();

На табличке есть метод:
PHP код:
void changeStatus()
{
    
ttsbegin;

    
this.Status MyStatus::Save;

    ...  
// (1) куча всяких изменений в других таблицах

    
throw error("Делаем ошибку!");

    ... 
// (2) еще изменения в this
    
    
this.update();
   
    
ttscommit;

В результате получается, что изменения (1) откатываются, изменения (2) не выполняются, НО статус меняется!!!
Старый 11.09.2003, 11:30   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Продолжение (грабли 2)
Цитата:
Изначально опубликовано Wamr
...НО статус меняется!!!
Статус меняется ТОЛЬКО в контроле на форме.
В базу данных изменения не пошли. Если нажать F5, то это будет видно.

Решение? Следовать рекомендациям Best Practice и не программировать в формах
Старый 11.09.2003, 11:58   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
почти верно
Цитата:
В базу данных изменения не пошли. Если нажать F5, то это будет видно
А вот если перейти на другую запись, то изменения (статус) радостно запишутся в БД.
Большинство пользователей поступает именно так.

Цитата:
Следовать рекомендациям Best Practice и не программировать в формах
А в каком месте были нарушены BPs и как можно еще меньше (1 строка) программировать в формах?
(Кстати, форма создана господами внедренцами)

P.S. Для себя я еще раз убедился, что нужно избегать прямого использования курсора, взятого из DS формы.
Старый 11.09.2003, 12:29   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: почти верно
Цитата:
Изначально опубликовано Wamr
А вот если перейти на другую запись, то изменения (статус) радостно запишутся в БД. Большинство пользователей поступает именно так.
Хм... надо подумать. Здесь что-то не так.

Цитата:
Изначально опубликовано Wamr
А в каком месте были нарушены BPs и как можно еще меньше (1 строка) программировать в формах?
Виноват, чушь спорол. Не поглядел внимательно.
Код действительно написан в соответствии с BP.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Осторожно insert_recordset MikeR DAX: Программирование 11 28.04.2009 17:27
Осторожно. RecordSortedList учитывает регистр символов Logger DAX: Программирование 9 23.01.2009 15:39
Очередные грабли while select CasperSKY DAX: Программирование 14 23.03.2008 12:30
Грабли с наследником и edit-методом Wamr DAX: Программирование 5 02.02.2006 18:16
Осторожно! SP4 для W2K и Axapta 2.5 KiselevSA DAX: Администрирование 8 01.12.2003 19:14

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

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

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