#ArchiveReportOutput()
##About
If you want to archive report output every time reports are executed, you could use the ArchiveReportOutput method. By overriding this method, you could easily archive any report (save to a file, output through FTP, send through email, etc.) The ArchiveReportOutput method is called when any type of export (except HTML) or scheduler runs. This method is called only when the process of executing the report is associated with the file creation process (such as exports to PDF, Word, Excel, etc.). This method is not called when you simply view reports in the Report Viewer or when you call the scheduler with a non-file content generating type such as Link, Embedded or HTML. There isn't a way to configure this to run in the viewer. In the example below, we will only archive reports made by a particular user.
##Global.asax (C♯)
//main class: inherits DatabaseAdHocConfig or FileSystemAdHocConfig
public class CustomAdHocConfig : Izenda.AdHoc.DatabaseAdHocConfig
{
public override void ArchiveReportOutput(ReportSet reportSet, string[] emails, string extension, byte[] data)
{
// Use archiving only for scheduler
if (!AdHocContext.SchedulerExecuting)
return;
// Check for permissions
if (reportSet.Owner != "test@test.com")
return;
// Look up report archive directory
string reportPath = savePath + LookUpTenantID(reportSet.Owner) + "\\";
if (!Directory.Exists(reportPath))
Directory.CreateDirectory(reportPath);
// Save report output to the archive
using (FileStream sw = new FileStream(reportPath + reportSet.ReportName + "." + extension, FileMode.Create))
using (BinaryWriter bw = new BinaryWriter(sw))
bw.Write(data);
}
}
##Global.asax (VB.NET)
'main class: inherits DatabaseAdHocConfig or FileSystemAdHocConfig
Public Class CustomAdHocConfig
Inherits Izenda.AdHoc.DatabaseAdHocConfig
Public Overrides Sub ArchiveReportOutput(ByVal reportSet As ReportSet, ByVal emails() As String, ByVal extension As String, ByVal data() As Byte)
' Use archiving only for scheduler
If Not AdHocContext.SchedulerExecuting Then Return
' Check for permissions
If reportSet.Owner != "test@test.com" Then Return
' Look up report archive directory
Dim reportPath As String = savePath + LookUpTenantID(reportSet.Owner) + "\\"
If Not Directory.Exists(reportPath) Then Directory.CreateDirectory(reportPath)
' Save report output to the archive
Using sw As New FileStream(reportPath + reportSet.Name + "." + extension, FileMode.Create)
Using bw As New BinaryWriter(sw)
bw.Write(data)
End Using
End Using
End Sub
End Class
Note: You might like to run auto-archiving only when the scheduler executes. Using SchedulerExecuting, you could know if this output is generated by the scheduler.
