Вопрос по генерации отчетов с большим объемом данных.
Добавлено: 09 мар 2011, 17:03
Добрый день!
Серьезно присматриваемся к вашему продукту,
все нравится, но есть несколько беспокоящих вопросов:
Преамбула: мне нужно ограничить пользователя с выбором таблиц и колонок(из соображений секьюрити) - это я сделал
следующим образом:
при создании отчета начитываю только "разрешенные" данные:
1я проблема:
При просмотре отчета, на SQL сторону отсылается запрос указанный в при ините датасоурса - "SELECT * FROM Table", а ПОТОМ
к результату применяется фильтр, если я его задал. Если таблица будет действительно большой, то это может привести
к проблемам.
1й вопрос - как мне изменить код, что бы на SQL сторону отсылался готовый SQL запрос, с фильтрами(через WHERE)
2я проблема:
Если я разрешаю редактировать дикшенари или датасоурс, то при редактировании, на поиске колонок(например) видимо для уточнения данных,
опять же посылаеться SQL запрос из датасоурса - для нас это неприемлемо.
2й вопрос - как этого избежать?
3й вопрос связан с попытками решить первые два:
Я вижу что при создании датасоурса, я могу не указывать SQL запрос, в таком случае я могу дизайнерить отчет, доп. запрос не посылаеться.
Соответственно нужно перехватить GetPreviewDataSet(к примеру), и начитать e.PreviewDataSet с нужными мне данными в кастомном DataSet,
но как мне узнать какой запрос сдизайнерил пользователь? Метод получает два параметра и в StiWebDesigner.StiPreviewDataSetEventArgs я не нешал ничего похожего.
Пож. если у вас есть советы по решению проблемы, отличные от хода моих мыслей - дайте знать.
Так же очень важно знать ответы на впоросы 1 - 2.
Спасибо!
Серьезно присматриваемся к вашему продукту,
все нравится, но есть несколько беспокоящих вопросов:
Преамбула: мне нужно ограничить пользователя с выбором таблиц и колонок(из соображений секьюрити) - это я сделал
следующим образом:
Код: Выделить всё
StiWebDesignerOptions.ModifyDictionary = False
StiWebDesignerOptions.ModifyDataSources = False
StiWebDesignerOptions.ModifyConnections = False
StiWebDesignerOptions.ModifyVariables = False
StiWebDesignerOptions.ModifyTemplate = False
Код: Выделить всё
Dim report As New StiReport()
report.Dictionary.Databases.Add(New StiSqlDatabase("Database001", ConnectionString))
Dim stiSqlSource As New StiSqlSource("Database001", "Database", "Database001", "SELECT * FROM Table", True)
stiSqlSource.Columns.Add("Column1", GetType(Integer))
stiSqlSource.Columns.Add("Column2", GetType(String))
report.DataSources.Add(stiSqlSource)
WebDesigner1.Design(report)
При просмотре отчета, на SQL сторону отсылается запрос указанный в при ините датасоурса - "SELECT * FROM Table", а ПОТОМ
к результату применяется фильтр, если я его задал. Если таблица будет действительно большой, то это может привести
к проблемам.
1й вопрос - как мне изменить код, что бы на SQL сторону отсылался готовый SQL запрос, с фильтрами(через WHERE)
2я проблема:
Если я разрешаю редактировать дикшенари или датасоурс, то при редактировании, на поиске колонок(например) видимо для уточнения данных,
опять же посылаеться SQL запрос из датасоурса - для нас это неприемлемо.
2й вопрос - как этого избежать?
3й вопрос связан с попытками решить первые два:
Я вижу что при создании датасоурса, я могу не указывать SQL запрос, в таком случае я могу дизайнерить отчет, доп. запрос не посылаеться.
Соответственно нужно перехватить GetPreviewDataSet(к примеру), и начитать e.PreviewDataSet с нужными мне данными в кастомном DataSet,
но как мне узнать какой запрос сдизайнерил пользователь? Метод получает два параметра и в StiWebDesigner.StiPreviewDataSetEventArgs я не нешал ничего похожего.
Пож. если у вас есть советы по решению проблемы, отличные от хода моих мыслей - дайте знать.
Так же очень важно знать ответы на впоросы 1 - 2.
Спасибо!