16.08.2004, 20:42 | #1 |
Участник
|
Динамическое создание методов.
Здравствуйте.
Существует следующая проблема. Необходимо выводить на экран в отчете только те поля таблички, которые были выбраны в диалоге. Причем если я добавляю Control с указанием DateField, то отображаются пустые строки, а если я создаю Control с использованием Display-метода, то все отображается правильно. Так как в таблице много полей не хотелось бы создавать большое количество display-методов. Есть ли возможность создать display-методы динамически при анализе данных, полученных от диалога. Заранее благодарен за ответ, Ратмир. |
|
16.08.2004, 22:47 | #2 |
Модератор
|
Не легче ли перекрыть fetch()? Сейчас под рукой нет примера, приду на работу, постараюсь выслать.
С Уважением, Георгий |
|
17.08.2004, 09:27 | #3 |
Участник
|
fetch у меня перекрыт, но толку от этого мало.
|
|
17.08.2004, 10:41 | #4 |
Участник
|
У полей отчета есть свойство Visible. Т.е. лепишь в отчет вообще все поля, которые только могут понадобиться (с привязкой к DateField), а в зависимости от настроек пользователя меняшь их свойство Visible(true) - это можно сделать в методе Fetch.
|
|
17.08.2004, 11:01 | #5 |
Участник
|
Привязка к DateField не работает; когда я помещаю в отчет StringEdit InventDim.InventLocationId он выводит пустую строку, а когда я вывожу Display-метод
display inventLocationId() { return InventDim.InventLocationId; } все отрабатывает прекрасно. Но не хотелось бы для каждого поля каждой из использующихся в отчете таблиц создавать дисплэй-метод. Хотелось бы, чтобы в момент инициализации отчета динамически создавались все необходимые методы. Реально ли это? |
|
17.08.2004, 11:07 | #6 |
Модератор
|
в executeSection() Body Report'a я перекрываю метод и вытаскиваю все необходимые мне поля:
PHP код:
Георгий |
|
17.08.2004, 11:13 | #7 |
Участник
|
Ещё раз повторяю, что если я использую addControl(tableIdentificator,fieldId);
то на экране отображается пустая строка. Поэтому необходимо использовать display-метод. X++: for (j=1;j<=query.dataSourceCount();j++) { for (i=1;i<=query.dataSourceNo(j).sortFieldCount();i++) { rsc = rs.addControl(query.dataSourceNo(j).table(),query.dataSourceNo(j).sortField(i)); } } X++: for (j=1;j<=query.dataSourceCount();j++) { for (i=1;i<=query.dataSourceNo(j).sortFieldCount();i++) { rs.addDisplayControl(strfmt('field_%1_%2',query.dataSourceNo(j).table(),query.dataSourceNo(j).sortField(i))); } } типа field_%1_%2 не хочется. поэтому хотелось бы вставить в init отчета динамическое формирование всех этих методов. С уважением, Ратмир. |
|
17.08.2004, 11:18 | #8 |
Moderator
|
Если очень хочется воспользоваться динамическими методами - воспользуйтесь поиском. Данная проблема уже обсуждалась и решение было найдено.
Другое дело, стоит ли использовать такое решение или пересмотреть постановку задачи..... |
|
17.08.2004, 11:25 | #9 |
Участник
|
К сожалению, поиск по ключевым словам "динамические методы", "создание методов" и т.д. ничего полезного не выдает.
|
|
17.08.2004, 11:29 | #10 |
Пенсионер
|
Ну например так я добавлял метод в Класс, хотя можно в любой узел AOT добавлять что хочешь...
PHP код:
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
17.08.2004, 11:33 | #11 |
Модератор
|
Цитата:
Изначально опубликовано Ratmir
Ещё раз повторяю, что если я использую addControl(tableIdentificator,fieldId);то на экране отображается пустая строка. С Уважением, Георгий |
|
17.08.2004, 11:44 | #12 |
Участник
|
Цитата:
Изначально опубликовано George Nordic
А! А у отчета какой DataSource? |
|
17.08.2004, 12:38 | #13 |
Moderator
|
Цитата:
К сожалению, поиск по ключевым словам "динамические методы", "создание методов" и т.д. ничего полезного не выдает.
|
|
17.08.2004, 12:57 | #14 |
Участник
|
To blokva,Андре
Спасибо, очень помогли!!! |
|
17.08.2004, 13:25 | #15 |
Модератор
|
Хм... интересно, сколько у Вас будет подобного рода методов, автоматически созданных, через несколько месяцев, не говоря уже о годах...
Хотя, конечно, универсальный отчет - вещь хорошая |
|
17.08.2004, 16:51 | #16 |
Пенсионер
|
Цитата:
Изначально опубликовано George Nordic
Хм... интересно, сколько у Вас будет подобного рода методов, автоматически созданных, через несколько месяцев, не говоря уже о годах... Хотя нет методов будет 2 - один будет изменять содержание другого в зависимости от ситуёвины...
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
17.08.2004, 17:17 | #17 |
Модератор
|
Т.е. пользователь выбирает 25 полей для вывода на экран (бывают и такие), потом 1 метод генерит 25 display -методов, которые выполняются по каждой строчке... потом - удалить их... Что ж - это, конечно, выход. Но, по сути, я полностью согласен с macklakov'вым по данному вопросу (в указанной Андре ветке)
to blokva - спасибо, интересный код.. Может и пригодиться когда Кто ж этих юзеров знает.... С Уважением, Георгий. |
|
17.08.2004, 17:36 | #18 |
Пенсионер
|
2Георгий
Я тоже согласен, что поднятую проблемму надо решать совершенно по-другому ибо генерация методов и их компиляция занимает достаточно времени. С другой стороны я тоже согласен что Цитата:
Кто ж этих юзеров знает....
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
17.08.2004, 17:44 | #19 |
Участник
|
Разъяснения:
Цитата:
генерация методов и их компиляция занимает достаточно времени.
Так как пишется ряд отчетов (около 10), то создание порядка 500 методов могло сильно разрушить мою психику, так что написанный генератор методов мне очень сильно поможет. |
|
18.08.2004, 09:13 | #20 |
Участник
|
Я чего-то глубоко не понимаю в постановке задачи. Каким боком здесь вообще нужны динамические методы? В смысле создающиеся в каждом отдельном отчете.
1) Что мешает создать 1 (один) display метод возвращающий символьную строку и в качестве параметра передать в этот display-метод id таблицы и id поля (ну, или создать массив нужных id)? Для конвертации в строку любого типа данных можно использовать StrFmt(). Если принципиально важно возвращать числа, то создаешь 2 dispaly-метода - один для строк, другой для чисел. 2) Кроме того, еще раз напомню, у объектов отчета есть свойство Visible. Если его установить в false, то объект не просто не будет печататься в отчете, но и все остальные объекты сдвинуться, чтобы заполнить освободившееся место. Т.е. формируешь в отчете вообще ВСЕ поля всех таблиц источников, а при инициализации просто определеяешь visible для нужных полей. 3) Если пользователь такой непредсказуемый, то пусть сам и делает отчет! Какие проблемы-то. В Axapta все есть для этой цели |
|