Добавление отчетов профессионального качества в приложение пользователя в Visual Studio


Кешированные ReportDocuments - часть 3


Если ключ совпадает с ключом кешированного отчета, то будет использоваться кешированная копия. Если не совпадает, то данные будут выбираться заново.

Если вы убрали из программы комментарии, то специальная функция BuildCompleteCacheKey сгенерирует уникальный ключ для конкретного отчета. Раскомментированная программа, которая во всем остальном оставлена без изменений, выполняется так же как программа с комментариями. Если этот ключ не модифицируется, то Crystal Reports неявно использует алгоритм BuildCompleteCacheKey для создания вашего ключа. Это подходит для многих случаев. Но что делать, если вам требуется модифицировать ключ? Предположим, вы узнали, что в какой-то момент времени ваши данные значительно изменились. Тогда вы могли бы приписать к ключу кеша свою строку, чтобы обеспечить его изменение в этот момент времени или после него. Приведем тривиальный пример: раскомментируйте программу в GetCustomizedCacheKey и вставьте перед оператором Return следующую строку:

key &= DatePart(DateInterval.Minute, Now())

Эта строка прозволяет генерировать новый ключ кеша в тот момент, когда текущее время изменяется на одну минуту. В событии Page_Load класса ViewReport.aspx укажите ccbMain для cvwMain.ReportSource, затем запустите приложение и обновите несколько раз страницу. При этом вы увидите изменение в Data Time, которые происходят, когда минутный отсчет фактического времени увеличивается на единицу. Подобным образом можно приписать к ключу кеша значения различных параметров и другие детали, связанные с данными, чтобы избежать обработки одних и тех же кешированных данных при прогонах отчета. Можно создать собственный ключ, не просто прибавляя кое-какие строки к ключу кеша по умолчанию, но написав его целиком с самого начала; но этот метод я не буду рекомендовать хотя бы потому, что это все равно, что изобретать колесо.

Конечно, эти изменения в классе строго типизированных отчетов весьма полезны, но они связаны с некоторым риском, поскольку при обновлении отчета Visual Studio .NET попытается переписать файл класса этого отчета и, если не принять соответствующих мер, то вы потеряете внесенные изменения.Чтобы этого избежать, вам следует создать собственный класс, реализующий IcachedReport с программой из класса CachedCustomersBasic. После этого вы сможете создать в ViewReport.aspx, а именно в событии Page_Load, экземпляр этого класса и указать на него в cvwMain.ReportSource. На Figure 12 показана программа для данного класса (включая программу, использующую объект ASP.NET Request для задания значения поля параметра отчета и для добавления этого значения в ключ кеша), а также программа (см. ниже), демонстрирующая код события Page_Load, который требуется для ее использования.

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Dim mcrMain As New cMSDNCachedReport()
McrMain.ASPRequest = Request
CvwMain.ReportSource = mcrMain
End Sub




Начало  Назад  Вперед



Книжный магазин