This example shows how to configure report caching. Here is three examples of caching report - Default, File, MS SQL.

First, you need to add the StiNetCoreViewer component to the view page. Also, you need to pass the StiNetCoreViewerOptions object to the constructor. The minimum required options are two actions - GetReport and ViewerEvent:
@using Stimulsoft.Report.Mvc;

...

@Html.StiNetCoreViewer(new StiNetCoreViewerOptions()
{
    Actions =
    {
        GetReport = "GetReport",
        ViewerEvent = "ViewerEvent"
    }
})

Let's start with Default caching. First, create StiDefaultCacheHelper class:
public class StiDefaultCacheHelper : StiCacheHelper
{
	public override StiReport GetReport(string guid)
	{
		return base.GetReport(guid);
	}

	public override void SaveReport(StiReport report, string guid)
	{
		base.SaveReport(report, guid);
	}

	public override void RemoveReport(string guid)
	{
		base.RemoveReport(guid);
	}
}

Then, create DefaultCacheController method:
public DefaultCacheController() {
	StiNetCoreViewer.CacheHelper = new StiDefaultCacheHelper();
}

Finally, create report loading method:
public IActionResult GetReport(int id = 1)
{
	var report = new StiReport();
	report.Load(StiNetCoreHelper.MapPath(this, "Reports/TwoSimpleLists.mrt"));
	return StiNetCoreViewer.GetReportResult(this, report);
}

Next, File caching. First, create StiFileCacheHelper class:
public class StiFileCacheHelper : StiCacheHelper
{
	public override StiReport GetReport(string guid)
	{
		var path = Path.Combine(HttpContext.Server.MapPath("CacheFiles"), guid);
		if (File.Exists(path))
		{
			var report = new StiReport();
			var packedReport = File.ReadAllText(path);
			if (guid.EndsWith(GUID_ReportTemplate)) report.LoadPackedReportFromString(packedReport);
			else report.LoadPackedDocumentFromString(packedReport);

			return report;
		}
		return null;
	}

	public override void SaveReport(StiReport report, string guid)
	{
		var packedReport = guid.EndsWith(GUID_ReportTemplate) ? report.SavePackedReportToString() : report.SavePackedDocumentToString();
		var path = Path.Combine(HttpContext.Server.MapPath("CacheFiles"), guid);
		File.WriteAllText(path, packedReport);
	}

	public override void RemoveReport(string guid)
	{
		var path = Path.Combine(HttpContext.Server.MapPath("CacheFiles"), guid);
		if (File.Exists(path))
			File.Delete(path);
	}
}

Then, create FileCacheController method:
public FileCacheController()
{
	StiNetCoreViewer.CacheHelper = new StiFileCacheHelper();
}

Finally, create report loading method:
public IActionResult GetReport(int id = 1)
{
	var report = new StiReport();
	report.Load(StiNetCoreHelper.MapPath(this, "Reports/TwoSimpleLists.mrt"));
	return StiNetCoreViewer.GetReportResult(this, report);
}

The last, MS SQL caching. First, create StiMSSQLCacheHelper class:
public class StiMSSQLCacheHelper : StiCacheHelper
{
	// Please use your own database connection
	private string connectionString = @"Data Source=127.0.0.1;Initial Catalog=SampleDB;Integrated Security=False;User ID=******;Password=******;";

	public override StiReport GetReport(string guid)
	{
		var connection = new SqlConnection(connectionString);
		try
		{
			connection.Open();

			var query = $"SELECT Guid, Value FROM ReportCache WHERE Guid='{guid}'";
			var command = new SqlCommand(query, connection);
			var reader = command.ExecuteReader();

			if (reader.HasRows)
			{
				reader.Read();
				var packedReport = reader.GetString(1);
				reader.Close();

				var report = new StiReport();
				if (guid.EndsWith(GUID_ReportTemplate)) report.LoadPackedReportFromString(packedReport);
				else report.LoadPackedDocumentFromString(packedReport);

				return report;
			}
		}
		catch (SqlException ex)
		{
			Console.WriteLine(ex.Message);
		}
		finally
		{
			connection.Close();
		}

		return null;
	}

	public override void SaveReport(StiReport report, string guid)
	{
		var connection = new SqlConnection(connectionString);
		try
		{
			connection.Open();

			var query = $"DELETE FROM ReportCache WHERE Guid='{guid}'";
			var command = new SqlCommand(query, connection);
			command.ExecuteNonQuery();

			var packedReport = guid.EndsWith(GUID_ReportTemplate) ? report.SavePackedReportToString() : report.SavePackedDocumentToString();
			query = $"INSERT INTO ReportCache (Guid, Value) VALUES ('{guid}', '{packedReport}')";
			command = new SqlCommand(query, connection);
			command.ExecuteNonQuery();
		}
		catch (SqlException ex)
		{
			Console.WriteLine(ex.Message);
		}
		finally
		{
			connection.Close();
		}
	}

	public override void RemoveReport(string guid)
	{
		var connection = new SqlConnection(connectionString);
		try
		{
			connection.Open();

			var query = $"DELETE FROM ReportCache WHERE Guid='{guid}'";
			var command = new SqlCommand(query, connection);
			command.ExecuteNonQuery();
		}
		catch (SqlException ex)
		{
			Console.WriteLine(ex.Message);
		}
		finally
		{
			connection.Close();
		}
	}
}

Then, create MSSQLCacheController method:
public MSSQLCacheController()
{
	StiNetCoreViewer.CacheHelper = new StiMSSQLCacheHelper();
}

Finally, create report loading method:
public IActionResult GetReport(int id = 1)
{
	var report = new StiReport();
	report.Load(StiNetCoreHelper.MapPath(this, "Reports/TwoSimpleLists.mrt"));
	return StiNetCoreViewer.GetReportResult(this, report);
}

На скриншоте ниже Вы можете увидеть результат выполнения данного кода:

Configuring Report Caching

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