Page 1 of 1
Batch Email Part 2
Posted: Thu May 11, 2023 4:29 pm
by JohnW
In my effort to read report data I have been attempting to work with the suggestion from this thread
viewtopic.php?t=60976
In my report I created a read only variable called 'varEmail'. I assigned it a value of of data field from the query called 'newLicenseReport.email'.
On the report for testing purposes I have used the varEmail and it shows the correct data. Good so far.
In my code (VB.net) I added this test line of code to see if I could extract the value for the email.
Code: Select all
Dim xx As String = report.Dictionary.Variables("varEmail").Value
What is being returned is the name of the data field 'newLicenseReport.email' and not the email address on the report. I am looking for the proper syntax to extract the email address showing on the report.
Again I desire to use this in a send to address for mail message. I plan on sending a batch of dozens of the emails each day.
Any suggestions? This should be simple but I have been unable to figure it out to this point.
Thanks
John W
Re: Batch Email Part 2
Posted: Fri May 12, 2023 9:35 am
by Lech Kulikowski
Hello,
Please send any sample report with test data or sample project for analysis.
Thank you.
Re: Batch Email Part 2
Posted: Fri May 12, 2023 5:18 pm
by JohnW
I have the sample/test project to support.
Re: Batch Email Part 2
Posted: Mon May 15, 2023 6:15 pm
by Lech Kulikowski
Hello,
Ok. We will reply to you by email.
Thank you.
Re: Batch Email Part 2
Posted: Thu May 25, 2023 3:09 pm
by JohnW
I am getting closer. I have been able to iterate the report data. I have been able to collect the email address and then filter the report data using a variable.
What I am now unable to do it create the report for each loop, save it to a .pdf file for emailing. When I run this code the only report that renders and shows it the last record. Here is the current dev code. Anyone have a suggestion on solving the rendering and saving to pdft. Then attaching the file to an email? This is vb.net using current version of Stimulsoft.
Thanks
John W
Code: Select all
Protected Sub StiWebViewer1_GetReport(ByVal sender As Object, ByVal e As StiReportDataEventArgs)
Dim report = StiReport.CreateNewReport()
Dim path = Server.MapPath("Reports/Report.mrt")
report.Load(path)
Dim dt As DataTable = report.Dictionary.GetDataSet("newLicenseRpt").Tables(0)
'set variables
Dim strEmail As String = ""
Dim intApID As Integer = 0
'For intCount As Integer = 1 To (dt.Rows.Count - 5)
For Each dr As DataRow In dt.Rows
If Not IsDBNull(dr.Item("email")) Then
' gets eamil value if not dbNull
strEmail = dr.Item("email").ToString
'gets applicationID if it is different from the previous one.
If intApID <> dr.Item("applicationID") Then
intApID = dr.Item("applicationID")
'selects data based on applicationID
report.Dictionary.Variables("varApplicationID").Value = intApID
'creates report/makes .pdf for each applicationID?
e.Report = report
'emails report under construction
'emailReport(strEmail)
End If
End If
'intCount += intCount
Next
'e.Report = report
End Sub
Re: Batch Email Part 2
Posted: Mon May 29, 2023 8:52 pm
by Lech Kulikowski
Hello,
Should be something like the following:
Code: Select all
report.Load("e:\\sendemail.mrt");
foreach (DataRow row in emailsTable.Rows)
{
report.Dictionary.Variables["Variable1"].Value = row["email"].ToString();
report.Compile(false);
report.Render(false);
report.ExportDocument(StiExportFormat.Pdf, "e:\\" + row["email"].ToString() + ".pdf");
// send email code
}
Thank you.
Disregard I have regData sorted.
Posted: Thu Jun 01, 2023 3:10 pm
by JohnW
After too much trial and error I have this working.
I have pretty much everything sorted, the report iterated and convert to .pdf. So I am getting a report for each application number.
I am filering the data using the dataview.rowfilter process.
I pass the dataview to the report using report.regdata(dataview)
The last problem is the report is seeing all the data not just the filtered data from the dataview.
Am I using the regdata incorrectly?
Thanks
John W
Re: Batch Email Part 2
Posted: Mon Jun 05, 2023 7:19 am
by Lech Kulikowski
Hello,
Do you use any filtrations in the report?
Thank you.
Re: Batch Email Part 2
Posted: Mon Jun 05, 2023 2:35 pm
by JohnW
Lech:
I do have to deal data but I use a dataset as the vehicle. There is likely a far more elegant way to do this, but I have yet to find it. Essentially I am using this process
I built my report in the designer and made certain it is presenting what I wanted.
In code for the GetReport event I did the following:
- created a datatable and passed the data from the report.getdataset to it.
- I created a new dataset, dataadapter, connection, etc
- I then used the datatable as the means to iterated through the records.
- I was able to gain access to my pk and the email address this way.
- Using the pk I made a new select statement
- Using the adapter I was able to fill the dataset with specific data for that report. This is how I filtered down the records.
- Using report.regdata I was able to registed the new dataset for the report to use.
- Then the report is rendered, and saved to a .pdf file for the emailing process.
The upside is I deal with only the records needed and the iteration allows me to access data needed. Since there will only be a couple hundred of these reports run every day, the system as I have designed it should give good performance. At least It does on my 30 record test data set.
I ran into a multitude of problems. I had to learned how the report collects the data in the initial query, I learned report variables were not the solution for this, I needed to learn more about the report objects, how they fit into the process, and how to use them to my purpose. For the coding side I admit I struggled finding the documentation I needed. I am not saying its not there, but I had challenged finding it.
I do apppreciated the help I was given by you in getting this sorted out.
John W
Re: Batch Email Part 2
Posted: Tue Jun 06, 2023 11:04 pm
by Lech Kulikowski