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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2012, 08:29   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Почему нет doValidateField() и doValidateWrite()?
Хотел на таблице сделать:

X++:
public boolean validateField(FieldId _fieldIdToCheck)
{
    return TransportJournalTableData::newTable(this).validateField(_fieldIdToCheck);
}
И... обломался
Старый 30.03.2012, 08:53   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Почему нет doValidateField() и doValidateWrite()?
Что такое doValidateField() и doValidateWrite(), чем они должны отличаться от ValidateField() и ValidateWrite()?

Цитата:
Сообщение от Eldar9x Посмотреть сообщение
И... обломался
А по конкретнее, что случилось?
Получили рекурсию?

Если проблема в этом, то можно сделать так:
X++:
public boolean validateField(FieldId _fieldIdToCheck, boolean _superOnly = false)
{
    boolean ret = super(fieldIdToCheck);

    if (!_superOnly)
    {
        ret = ret && TransportJournalTableData::newTable(this).validateField
        (
            _fieldIdToCheck, 
            true  // ... ну вы поняли
        );  
    }

    return ret;
}

Последний раз редактировалось S.Kuskov; 30.03.2012 в 09:06.
Старый 30.03.2012, 09:10   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Что такое doValidateField() и doValidateWrite(), чем они должны отличаться от ValidateField() и ValidateWrite()?
ValidateField на базовой таблице Common должен вызывать ее final метод doValidateField(). doValidateField должен проводить базовые проверки, как то Mandatory поля, релейшены на поле итд (сейчас этим занимается сам метод common.validateVield() ). Таким образом, перекрывая ValidateField() мы получаем цепочку вызовов:
ValidateField() -> super() -> doValidateField()
Последние два в том случае, если мы в перекрытом методе ValidateField() не забыли вызвать super().
Старый 30.03.2012, 09:14   #4  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А по конкретнее, что случилось?
Получили рекурсию?

Если проблема в этом, то можно сделать так:
X++:
public boolean validateField(FieldId _fieldIdToCheck, boolean _superOnly = false)
{
    boolean ret = super(fieldIdToCheck);

    if (!_superOnly)
    {
        ret = ret && TransportJournalTableData::newTable(this).validateField
        (
            _fieldIdToCheck, 
            true  // ... ну вы поняли
        );  
    }

    return ret;
}
Это обходной маневр. Сигнатуры базового и перекрытого методов validateField совпадать не будут. Тем не менее компилятор такое допускает, и будет считать, что мы таки перекрыли базовый метод, что, вообще говоря, не совсем правильно.
Старый 30.03.2012, 09:21   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Это обходной маневр. Сигнатуры базового и перекрытого методов validateField совпадать не будут. Тем не менее компилятор такое допускает, и будет считать, что мы таки перекрыли базовый метод, что, вообще говоря, не совсем правильно.
В X++ такой приём вполне допустим.

P.S.: "Вам шашечки или ехать?"
Старый 30.03.2012, 11:36   #6  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
А че такое doValidate?
типа на уровне SQL сервера штоле и ядра аксапты?
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 30.03.2012, 11:52   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Murlin Посмотреть сообщение
А че такое doValidate?
типа на уровне SQL сервера штоле и ядра аксапты?
Ну это так автор ветки обозвал гипотетический метод, который представляет из себя неперекрытый validate. Т.е. если бы такой метод существовал, то даже при перекрытом (содержащим дополнительные проверки) методе validate была бы возможность вызвать тот не перекрытый оригинальный метод (вызвать super() не вызывая всего остального).
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
doValidateField должен проводить базовые проверки, как то Mandatory поля, релейшены на поле итд
Старый 30.03.2012, 12:43   #8  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Ну это так автор ветки обозвал гипотетический метод, который представляет из себя неперекрытый validate. Т.е. если бы такой метод существовал, то даже при перекрытом (содержащим дополнительные проверки) методе validate была бы возможность вызвать тот не перекрытый оригинальный метод (вызвать super() не вызывая всего остального).
Вот вот. Да даже хотя бы по аналогии с doInsert() doUpdate() итд могли бы уж создать их... doValidateDelete(), кстати, имеется.
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 31.03.2012, 20:19   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
А в чем глубокий смысл вызывать ядреную проверку поля/записи без вызова бизнес-логики, специально дописанной в приложении для проверки записи/поля. По-моему, тут есть какое-то недопонимание на уровне постановки задачи.

Последний раз редактировалось gl00mie; 31.03.2012 в 20:21.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Почему display/edit методы не поддерживают переход к основной таблице S.Kuskov DAX: Программирование 34 26.04.2012 19:24
Массовое создание СФ. Почему берет номера из списка удаленных СФ? mazzy DAX: Функционал 6 21.03.2011 22:35
Неправильная мгновенная себестоимость = 0, почему? sns DAX: Функционал 8 10.11.2010 17:43
В обработке вход НДС нет Сторно предоплат Arahnid DAX: Программирование 2 07.04.2008 10:45
Нет календаря при вводе отпуска nicko DAX: Функционал 2 14.11.2005 08:15
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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