Информация

 

В следствие того, что для панелей индикаторов (дашбордов) и отчетов используется одинаковый унифицированный формат шаблона MRT, методы для загрузки шаблона и работы с данными, то в тексте документации будет использоваться слово «отчет».

 

 

 

Компонент HTML5 Viewer позволяет использовать кэш сервера для хранения построенного отчета. Если кэширование не используется, то при каждом запросе страницы необходимо загружать отчет, подключать данные и строить его заново. Если использовать кэширование, то при следующем обновлении страницы, ранее построенный отчет будет загружен из кэша.

 

При использовании кэширования стоит учитывать, что каждый сохраненный отчет в кэше занимает память сервера и при большом количестве запросов к ним это может стать критичным фактором. Поэтому необходимо выбирать из двух вариантов – или маленькие потребности к памяти, но большие к производительности, или небольшие потребности к производительности, но большие к памяти.

 

Управлять кэшированием можно при помощи следующих приведенных ниже свойств.

 

Свойство CacheMode

 

Данное свойство вьювера включает кэширование и устанавливает его тип. Может принимать одно из значений, указанных в перечислении StiServerCacheMode:

 

strel11 None – кэширование отключено, каждое действие вьювера требует загрузки отчета и, если это шаблон, последующее его построение;

strel11 ObjectCache – для кэширования используется кэш сервера, в котором сохраняется объект отчета (значение по умолчанию);

strel11 StringCache - для кэширования используется кэш сервера, в котором сохраняется отчет в виде упакованной строки;

strel11 ObjectSession - для кэширования используется текущая сессия, в которой сохраняется объект отчета;

strel11 StringSession - для кэширования используется текущая сессия, в которой сохраняется отчет в виде упакованной строки.

 

 

Свойство CacheItemPriority

 

Данное свойство устанавливает приоритет хранимого в кэше сервера отчета, влияет на автоматическую очистку памяти сервера в случае ее нехватки. Чем меньше приоритет, тем больше шанс удаления информации из памяти.

 

 

Свойство CacheTimeout

 

Данное свойство указывает величину времени в минутах, в течение которого необходимо сохранять отчет в кэше сервера. Если при использовании кэширования требуемый отчет не найден в кэше (т.е. истекло время хранения объекта), то он будет запрошен заново при помощи специального действия GetReport с последующим подключением данных отчета и его построением.

 

 

Компонент HTML5 Viewer предоставляет возможность определить собственные методы работы с кэшированием отчета. Для этого предназначен специальный класс StiCacheHelper, который содержит методы получения отчета из кэша и сохранения отчета в кэш. Необходимо создать новый класс, унаследованный от StiCacheHelper, и перегрузить указанные выше методы, которые соответственно имеют названия GetReport и SaveReport.

 

HomeController.cs

...

public class ViewerController : Controller

{

public class StiMyCacheHelper : StiCacheHelper

{

public override StiReport GetReport(string guid)

{

string path = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/"), "CacheFiles", guid);

if (System.IO.File.Exists(path))

{

StiReport report = new StiReport();

string packedReport = System.IO.File.ReadAllText(path);

if (guid.EndsWith("template")) report.LoadPackedReportFromString(packedReport);

else report.LoadPackedDocumentFromString(packedReport);

 

return report;

}

return null;

 

//return base.GetReport(guid);

}

 

public override void SaveReport(StiReport report, string guid)

{

string packedReport = guid.EndsWith("template") ? report.SavePackedReportToString() : report.SavePackedDocumentToString();

string path = System.IO.Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/"), "CacheFiles", guid);

System.IO.File.WriteAllText(path, packedReport);

 

//base.SaveReport(report, guid);

}

}

 

static ViewerController()

{

StiMvcViewer.CacheHelper = new StiMyCacheHelper();

}

}

...

 

 

Для инициализации работы с кэшированием отчета при помощи созданного класса, достаточно задать его в качестве значения статического свойства StiMvcViewer.CacheHelper в конструкторе контроллера.

 

Информация

 

При отключенном кэшировании отчета (свойство вьювера CacheMode имеет значение None), указанный класс задействован не будет.