When running a report, the reporting engine interacts with a reporting data source implementing the IReportDataSource interface and a report generator implementing the IReportGenerator interface.

The reporting engine calls the [T:Microsoft.Office.RecordsManagement.Reporting.IReportDataSource.StartQuery(Microsoft.SharePoint.SPSite,System.Collections.Hashtable)] interface to query for reporting data, followed by the [T:Microsoft.Office.RecordsManagement.Reporting.IReportDataSource.StartReport(System.Collections.Hashtable)] to start the report. Then, for each row defined in the report generator, it calls the GetNextDataRow to get data for the next row. When the report generator has reached maximum row limit, the reporting engine checks if there is more data to report by using the HasMoreData() interface.