I am working .net core rest api backend and angular front end.
I am trying to make a ReportBook adding reports to programmatically.
Front End TypeScript
reportReady() {
const reportSource =
this
.viewer.getReportSource();
reportSource.report = 1 +
'_'
+
this
.id;
const params = reportSource.parameters;
params.summaryId =
this
.id;
params.baseurl = Config.getServerUrl();
params.OriginalOrDuplicateParam =
''
;
reportSource.parameters = params;
this
.viewer.setReportSource(reportSource);
}
Backend i have reports controller with Custom Report Resolver
private
InstanceReportSource InvoiceSummaryReportBook(
string
reportId)
{
try
{
InstanceReportSource result =
new
InstanceReportSource();
using
(var db =
new
FilteredHahnDbContext())
{
var summaryId = reportId.Split(
"_"
).LastOrDefault();
var summaryIdGuid = Guid.Parse(summaryId);
var summaryDetails = db.InvoiceSummaryDetails.Include(x => x.Invoice)
.Where(x => x.InvoiceSummaryMasterId == summaryIdGuid).ToList();
// Creating a new report book
var reportBook =
new
ReportBook();
var typeReportSource =
new
Telerik.Reporting.TypeReportSource();
typeReportSource.TypeName =
typeof
(ReportBook).AssemblyQualifiedName;
//Add first report
var glossaryReportSource =
new
UriReportSource();
glossaryReportSource.Uri =
this
.MapPath(
"InvoiceSummaryReport.trdp"
);
reportBook.ReportSources.Add(glossaryReportSource);
var params1 =
new
ParameterCollection();
var index = 0;
foreach
(var summaryDetail
in
summaryDetails)
{
if
(summaryDetail.Invoice.InvoiceTypeId == EInvoiceType.Individual)
{
var glossaryReportSource2 =
new
UriReportSource();
glossaryReportSource2.Parameters.Add(
"invoiceId"
, summaryDetail.InvoiceId.ToString());
result.Parameters.Add($
"reports({index}).invoiceId"
, summaryDetail.InvoiceId.ToString());
typeReportSource.Parameters.Add($
"reports({index}).invoiceId"
, summaryDetail.InvoiceId.ToString());
glossaryReportSource2.Uri =
this
.MapPath(
"IndividualInvoice.trdp"
);
reportBook.ReportSources.Add(glossaryReportSource2);
}
else
{
var glossaryReportSource2 =
new
UriReportSource();
glossaryReportSource2.Parameters.Add(
"invoiceId"
, summaryDetail.InvoiceId.ToString());
result.Parameters.Add($
"reports({index}).invoiceId"
, summaryDetail.InvoiceId.ToString());
typeReportSource.Parameters.Add($
"reports({index}).invoiceId"
, summaryDetail.InvoiceId.ToString());
glossaryReportSource2.Uri =
this
.MapPath(
"OrderInvoice.trdp"
);
reportBook.ReportSources.Add(glossaryReportSource2);
}
index++;
}
reportBook.TocReportSource = typeReportSource;
//Return the new instance
result.ReportDocument = reportBook;
return
result;
}
}
catch
(Exception ex)
{
throw
;
}
}
Above Method used in
public
ReportSource Resolve(
string
reportId)
{
InstanceReportSource result =
null
;
var rprtId = reportId.Split(
"_"
).FirstOrDefault();
switch
(rprtId)
{
// 1 Invoice Summary ReportBook
case
"1"
:
result = InvoiceSummaryReportBook(reportId);
break
;
}
return
result;
}
For each report "invoiceId" is different. As you can see in code i am trying three different methods to pass parameters but none are taking effect.