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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.05.2006, 16:46   #1  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Как программно отменить сохранение записи
Если перекрыть метод ValidateWrite, то если пользователь ввел что-то не то, то выдается ошибка, но выйти из этой ситуции можно двумя способами:
1. Ввести правильное значение и сохранить запись
2. Нажать Esc и не сохранять запись.

Как в случае ошибки программно отменить сохранение записи (аналогично нажатию Esc и кнопки "Нет")
Старый 24.05.2006, 17:05   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
По Esc не отменяется сохранение, его просто не происходит.
__________________
Андрей.
Старый 24.05.2006, 17:10   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Dron AKA andy
По Esc не отменяется сохранение, его просто не происходит.
Я не совсем верно выразился, но мне и нужно чтобы запись не сохранялась.
Получается так: я создаю запись, ввожу неверные данные, ValidateWrite выдает ошибку и после этого, чтобы не сохранять запись нужно нажимать Esc и "Нет". Хотелось бы чтобы это происходило автоматически - ввел неверные данные - запись не создается.
Старый 24.05.2006, 17:15   #4  
Волчара is offline
Волчара
Участник
 
210 / 29 (1) +++
Регистрация: 08.02.2003
Адрес: Москва
Цитата:
Сообщение от Lucky13
Как в случае ошибки программно отменить сохранение записи (аналогично нажатию Esc и кнопки "Нет")
Я бы предложил вариант вернуть в курсор (в таблицу) значения которые были там до начала редактирования записи:
Код:
aaa.data(aaa.orig());
где aaa - имя курсора

Кажется так... ?
__________________
Благодарю за поддержку ИЦ Кариатиду и Koder Logic
Старый 24.05.2006, 17:19   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Если нужно именно не создавать запись, то на validateWrite() сделайте
Код:
...
if (!this.cursor().recId)
    this.delete();
...
Но это как-то жестоко...
__________________
Андрей.
Старый 24.05.2006, 17:27   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Если сделать
Код:
...
if (!this.cursor().recId)
    this.cursor().delete();
...
то работатет, но действительно как-то жестоко. Интересно было бы узнать, что происходит при нажатии Esc? Это бы точно помогло
Старый 24.05.2006, 17:38   #7  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
По ESC система всего лишь просекает, что в форме были изменения, и спрашивает, вызвать ли метод FormDatasource.write().
Т.е. результат будет тот же, что и по моему примеру - запись не создастся (в моем случае - удалится из кэша Datasource).
__________________
Андрей.
Старый 24.05.2006, 18:37   #8  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Регистрация: 26.02.2004
Адрес: Санкт-Петербург
а почему не написать так? (если нужно именно программно)
Код:
if(this.validateWrite())
{
    this.write();
}
Старый 24.05.2006, 18:52   #9  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от savel
а почему не написать так? (если нужно именно программно)
Код:
if(this.validateWrite())
{
    this.write();
}
Тогда запись останется, а нужно чтобы в случае ошибки запись не сохранялась вообще (как будто бы ее и не создавали)
Старый 24.05.2006, 19:11   #10  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Регистрация: 26.02.2004
Адрес: Санкт-Петербург
Цитата:
Сообщение от Lucky13
Тогда запись останется
а почему Вы считаете, что запись останется?
если её ещё не было, то первый же validateWrite() её не пустит. Если уже была, и в настоящий момент её хотят не корректно про update'ить validateWrite() опять же это не даст.
Старый 24.05.2006, 19:53   #11  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от savel
а почему Вы считаете, что запись останется?
если её ещё не было, то первый же validateWrite() её не пустит. Если уже была, и в настоящий момент её хотят не корректно про update'ить validateWrite() опять же это не даст.
Да Вы правы, ValidateWrite не дает уйти с некорректной записи и соответственно сохранить ее в таблице, в этом вся и проблема. Чтобы ее не сохранять нужно нажать Esc и кнопку "Нет", а хочется чтобы было так: произошла ошибка и запись должна исчезнуть из кэша датасорса без дополнительных вмешательств пользователя.
Старый 24.05.2006, 20:05   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Lucky13
Да Вы правы, ValidateWrite не дает уйти с некорректной записи и соответственно сохранить ее в таблице, в этом вся и проблема.
Нажимайте Ctrl+Q. Это выход без проверки и без записи.
__________________
полезное на axForum, github, vk, coub.
Старый 25.05.2006, 09:07   #13  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от mazzy
Нажимайте Ctrl+Q. Это выход без проверки и без записи.
Повторяю: запись должна исчезнуть из кэша датасорса без дополнительных вмешательств пользователя
Старый 25.05.2006, 10:08   #14  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Посмотрите, как сделано создание заказа. (Форма SalesCreateOrder) Там подобная задача решается перекрытием walidatewrite и write датасорса.

C Уважением,
Георгий
Старый 25.05.2006, 10:10   #15  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
А чем вам мой-то способ не понравился? Вроде делает что требуется...
__________________
Андрей.
Старый 25.05.2006, 10:18   #16  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Регистрация: 26.02.2004
Адрес: Санкт-Петербург
Цитата:
Сообщение от Lucky13
Повторяю: ... без дополнительных вмешательств пользователя
а может всё же не горячится? Как это без дополнительных действий пользователя?! Если пользователь ввел не корректную запись - ведь ему нужно сообщить об ошибке, и в чём эта ошибка состоит. По крайней мере у Вас должно появится окно инфолога. И всё равно придётся пользователю давить педальку. Будет ведь совсем не красиво если без предупреждения исчезнет введённая строка.
Вы не достаточно дали информации, чтоб посоветовать что-либо более конкретное. Если правильность введения записи может ограничится правильность введения в одно поле - может тогда перекрыть validateField() ? И пользователь просто не сойдёт с поля пока правильно его не заполнит. Да и если validateWrite() тупо будет возвращить false и Вы не быдите генерить сообщение об ошибке новая запись так и останется не введённой, и Вы с неё не сможите сойти.
Повторюсь, удалять запись без реакции пользователя будет просто не корректно по отношению к пользователю (опять же не знаю постановки задачи).
Старый 25.05.2006, 10:26   #17  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от Dron AKA andy
А чем вам мой-то способ не понравился? Вроде делает что требуется...
Спасибо, Андрей. Сделал именно так, все работает, пользователи давольны, просто думал может кто-нибудь что-то еще посоветует.
Теги
validate, validatewrite, write

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Открытие формы с деталями активной записи в гриде sweeper DAX: Программирование 4 19.09.2008 15:55
Проблемы при использовании шаблона записи Tarrash DAX: Программирование 9 21.08.2007 12:21
ALEG: Доступны записи тренингов по Microsoft Dynamics NAV Blog bot DAX Blogs 0 21.03.2007 15:00
Программно записи в InventTable djoker DAX: Программирование 8 02.12.2004 16:59
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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