Показать сообщение отдельно
Старый 24.06.2015, 14:40   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,877 / 3127 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от AndyD Посмотреть сообщение
Я думаю, что research() устанавливает какой-то внутренний флаг объекта FormDataSource и после этого вызывает executeQuery(). Так что никаких раздвоений методов не требуется
А вы не знаетет что это может быть за флаг ?

Проблема в том, что независимо от того, что мы дернули в коде - executeQuery или research - все равно в итоге ядро вызовет executeQuery. Но при этом вызов super() в методе executequery поведет себя по разному - в случае когда цепочка вызовов началась с executeQuery - создаст новый SysQueryRun на основе _ds.Query(), а в случае когда все началось с research - просто использует уже существующий _ds.QueryRun()

Непонятно как код написанный на датасорсе внутри executeQuery сможет понять - пришел вызов из research() или нет. Можно в принципе анализировать стек вызовов и это будет работать, но это какой-то хакерский способ. Должно быть более "правильное" решение.