20.12.2002, 11:48 | #1 |
----------------
|
Осторожно! Грабли!
Пару раз наступив, хочу предостеречь коллег.
Стандартная схема: 1. Есть форма с гридом и есть кнопочка, вызывающая какую-то обработку текущей строки 2. При нажатии кнопочки запускается процесс, где в классе (форме) обработки выполняется строка myTable = args().record(); 3. В процессе выводится некий диалог с пользователем. 4. Делается окончательная обработка с использованием курсора myTable Все работает замечательно... но в один "прекрасный" день пользователь на шаге 3 за какой-то надобностью полез обратно в форму с гридом и перешел на другую запись. В результате на шаге 4 мы используем уже другую(!!!) запись из myTable. Поймать эту ошибку сложно, так как возникает редко, а последствия могут быть очень разнообразны. Решение: На шаге 2 использовать строку myTable.data(args.record()); |
|
08.01.2003, 19:35 | #2 |
Участник
|
а может ето не грабли а фича
|
|
11.09.2003, 11:02 | #3 |
----------------
|
Продолжение (грабли 2)
Есть формочка с табличкой MyTable
Есть кнопка на форме с таким методом: PHP код:
PHP код:
|
|
11.09.2003, 11:30 | #4 |
Участник
|
Re: Продолжение (грабли 2)
Цитата:
Изначально опубликовано Wamr
...НО статус меняется!!! В базу данных изменения не пошли. Если нажать F5, то это будет видно. Решение? Следовать рекомендациям Best Practice и не программировать в формах |
|
11.09.2003, 11:58 | #5 |
----------------
|
почти верно
Цитата:
В базу данных изменения не пошли. Если нажать F5, то это будет видно
Большинство пользователей поступает именно так. Цитата:
Следовать рекомендациям Best Practice и не программировать в формах
(Кстати, форма создана господами внедренцами) P.S. Для себя я еще раз убедился, что нужно избегать прямого использования курсора, взятого из DS формы. |
|
11.09.2003, 12:29 | #6 |
Участник
|
Re: почти верно
Цитата:
Изначально опубликовано Wamr
А вот если перейти на другую запись, то изменения (статус) радостно запишутся в БД. Большинство пользователей поступает именно так. Цитата:
Изначально опубликовано Wamr
А в каком месте были нарушены BPs и как можно еще меньше (1 строка) программировать в формах? Код действительно написан в соответствии с BP. |
|