Layout - Do you include useful information on the footer of reports?
Last updated by Tiago Araújo [SSW] 10 months ago.See historyWhen designing custom applications you want to include branding on reports. You should always include a useful and informative footer at the bottom of your reports.
Include:
- Date and Time Printed and User who printed it - see warning below (e.g. Printed by SSW\DaveSmith on 3/1/2024 3:16:30 PM)
- Execution Time (e.g. Execution time: 1 minute, 10 seconds)
- Page x of y (e.g. Page 3 of 10)
- Link to company website + slogan (e.g. <www.ssw.com.au> - Enterprise Sopftware Development)
Use these handy report expressions to show the above information.
Note: Do not use System.DateTime.Now
for Execution Time because if you do it will return the result at time of printing the document/PDF. Instead store the value in a variable (for example GroupExecutionTime
) and then call that.
Use these handy report expressions to show the above information.
Footer Item | Expression | Sample Output |
---|---|---|
Date and Time printed / User ID | ="Printed by " + User!UserID + " on " + Globals!ExecutionTime.ToString() | Printed by SSW2000\JatinValabjee on 3/1/2006 3:16:30 PM |
Execution Time | ="Execution Time: " + IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).TotalSeconds < 1, "0 seconds", ( IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours & " hour(s), ", "") + IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes & " minute(s), ", "") + IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds & " second(s)", "")) ) | Execution time: 1 minute, 10 seconds |
Page x of y | ="Page " + Globals!PageNumber.ToString() + " of " + Globals!TotalPages.ToString() | Page 3 of 10 |
Tip: Copy and Paste this XML into the
<PageFooter>
Paste here
</PageFooter>
Warning: Adding the User who printed it stops all data-driven subscriptions.
When you try to add the User your data-driven subscriptions will fail with the following error:
'The '/GroupHealth' report has user profile dependencies and cannot be run unattended. (rsHasUserProfileDependencies)'.
A quick workaround is to add a user function to fallback the error to a nice message, like "SYSTEM":
Public Function UserName()
Try
Return Report.User!UserID
Catch
Return "System"
End Try
End Function
Use above function to replace your reference to Report.User!UserID
will allow the subscription to work correctly.