|
31.07.2008, 05:15 | #1 |
китайский стажер
|
Research, refresh, reread шпаргалка
Хочу поделиться радостью.
Была простая и смешная проблема - надо было сделать чтобы строка закупки блокировалась если отправлена на одобрение и разблокировалась после одобрения, и одобрение могло быть выполнено автоматически или вручную. Были страдания часа на два а может быть и три, как эту форму с закупками обновить так, чтобы курсор никуда не упрыгивал, строчки обновлялись и данные в строчках обновлялись тоже, ну и конечно чтобы блокировка-разблокировка строк все-таки работала. Плохо китайскому стажеру - не у кого спросить, пришлось тыкаться методом научного тыка, пока не нашлась статья вот здесь: http://www.mail-archive.com/axapta-k.../msg09550.html . Человек тоже поделился радостью понимания Вот коротенько перевод надеюсь близко к тексту: -- .refresh() не читает повторно данные из базы данных, а просто обновляет экран вместе со всем, что хранится в кешэ формы. .reread() считает повторно из базы данных только ТЕКУЩУЮ запись, поэтому не нужно использовать это для того, чтобы обновить данные формы если вы добавили или удалили записи. Это часто используется если вы изменили какие-нибудь значения в текущей записи с помощью метода, и отправляете эти значения в бащу данных используя метод update() на таблице вместо того, чтобы работать с источником данных формы. В этом случае метод reread() отобращит эти изменения на форме. .research() выполнит существующий запрос источника данных формы, обновляя информацию как о новых и удаленных записях, так и о существующих. Этот метод сохранит любые существующие фильтры и сортировки на форме. .executeQuery() - еще один полезный метод. Его следует использовать если вы изменили запрос в методе (с помощью программирования) и желаете обновить форму. Этот метод похож на .research() , однако он берет в расчет изменения в запросе. В общем случае, вам нужен только один из этих методов в разных обстоятельствах. ---- В общем у меня получился вот такой код для обновления: X++: void clicked() { ; super(); purchline::PLApprovalStatus(purchline); lines_ds.reread(); lines_ds.research(); } |
|
|
За это сообщение автора поблагодарили: macklakov (3), G.Menshikh (1), miklenew (2), dreamer (1), alex55 (1), jeky (1). |
31.07.2008, 09:24 | #2 |
Участник
|
Цитата:
research повторно выполняет запрос. executeQuery в отличие от research сносит пользовательский фильтр (который в queryRun.query). То есть если вы изменили query - вызывайте executeQuery, если вы изменили queryRun.query или просто хотите пречитать все записи, то надо вызывать research (после чего можно попытаться найти запись, которая была раньше актуальна - тут надо поискать findRecord по форуму и обсуждение с участием AndyD). Если надо просто обновить текущую запись, то .reread .refresh[ex] |
|
31.07.2008, 11:40 | #3 |
Участник
|
он, видимо, хотел написать Refresh Очепятался
|
|
31.07.2008, 12:21 | #4 |
Участник
|
а рефреш вроде тоже не нужен...
|
|
31.07.2008, 12:28 | #5 |
Участник
|
Не, вот refresh после reread как раз нужен.
Иначе мы не увидим изменений текущей записи на форме (они будут только в буфере/кэше) |
|
31.07.2008, 12:31 | #6 |
Участник
|
а... вместо ресерча а не рерида...
|
|
|
За это сообщение автора поблагодарили: Qaz Qwerty (1). |
01.08.2008, 21:43 | #7 |
китайский стажер
|
точно, refresh нужен, а reserch... Спасибо!
|
|
03.05.2024, 12:17 | #8 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (14). |
Теги |
executequery, formdatasource, refresh, research, полезное, программно |
|
|