Цитата:
Сообщение от
AndyD
Я думаю, что research() устанавливает какой-то внутренний флаг объекта FormDataSource и после этого вызывает executeQuery(). Так что никаких раздвоений методов не требуется
А вы не знаетет что это может быть за флаг ?
Проблема в том, что независимо от того, что мы дернули в коде - executeQuery или research - все равно в итоге ядро вызовет executeQuery. Но при этом вызов super() в методе executequery поведет себя по разному - в случае когда цепочка вызовов началась с executeQuery - создаст новый SysQueryRun на основе _ds.Query(), а в случае когда все началось с research - просто использует уже существующий _ds.QueryRun()
Непонятно как код написанный на датасорсе внутри executeQuery сможет понять - пришел вызов из research() или нет. Можно в принципе анализировать стек вызовов и это будет работать, но это какой-то хакерский способ. Должно быть более "правильное" решение.