23.08.2005, 11:35 | #1 |
Участник
|
ошибка при обновлении smmQuotationLine
В форме "предложения" при изменении некоторых полей (датасорс smmQuotationTable) из метода modified вызывается обновление соответствующего поля в smmQuotationLine (методы типа SetLinePrognosisId и др.). В этих методах выполняется код вида:
ttsbegin; while select forupdate smmQuotationLine where smmQuotationLine.quotationId == this.quotationId { smmQuotationLine.<поле> = this.<поле>; smmQuotationLine.doUpdate(); } ttscommit; Ошибка возникает в случае, когда пользователь нажимает ESC и НЕ СОХРАНЯЕТ изменения в форме. При следующем открытии предложения выясняется, что значения полей записи в smmQuotationLine изменились (ясное дело, после .doUpdate()), а значения в smmQuotationTable остались старыми (произошёл "откат"). Вопрос: подскажите, как наиболее корректно обойти эту багу? Мысль: фактическое обновление данных в smmQuotationLine осуществлять только при вызове метода update() таблицы smmQuotationTable. В этом случае возникают попутные вопросы: а) как непосредственно из метода smmQuotationTable.update() узнать, какие поля были изменены и б) как в этом случае из метода modifiedField(_fieldId) обновить данные в нижней части формы, где smmQuotationLine, без физического изменения значений в smmQuotationLine (т.е. как-то изменить form.datasource...?) |
|
23.08.2005, 11:54 | #2 |
Участник
|
Возникла вторая мысль - очевидно, не совсем корректная, но действенная - это точно - при изменении значения в форме запретить "откат" принудив пользователя ответить утвердительно на вопрос о сохранении изменений (отключить кнопку "Нет" или обойти вопрос?) либо вообще запретить в этой форме выход по ESC (механизм, описанный в одной из соседних веток).
|
|
23.08.2005, 13:03 | #3 |
Участник
|
А еще можно воспользоваться стандартнум функционалом подтверждений.
Сервис\ Параметры\ (Вкладка - Подтверждение) В группу - при одновлении. Установите галочки в поля Главная Книга и Группы. Для начала. При попытке закрыть форму в которой были сделаны какие-либо изменения будет выдаваться диалоговое окно на предмет подтверждения сделанных модификаций |
|
23.08.2005, 13:38 | #4 |
Участник
|
To: Zan
Так ведь такое окно как раз выводится, проблема в том, что если пользователь отвечает "Нет", изменения в таблице smmQuotationTable не происходит, остаются старые значения, а в связанной таблице smmQuotationLine оказываются новые значения, т.к. doUpdate() происходит задолго до того, как пользователь жмёт ESC (см.первый пост). |
|
23.08.2005, 13:41 | #5 |
Участник
|
Ммда.
Ну, тогда только доработка напильником |
|
24.08.2005, 11:13 | #6 |
Участник
|
Можно в течение этой операции делать update и на головной таблице. Тогда целостность изменений будет сохранена.
|
|