Code On Time apps offer the ability to display the results of a stored procedure. Some stored procedures require passing an SQL parameter in order to perform manipulations on the data.
In the Northwind sample database, the [Employee Sales By Country] stored procedure shows total sales amounts grouped by employee, and then by country. It accepts two parameters, @Starting_Date and @Ending_Date to determine the filter.
Let’s create a controller from this stored procedure. By default, the stored procedure will display all records between the years 1970 and 2000. In addition, we will add a custom action that will allow the user to specify the Beginning and Ending dates via a custom confirmation controller.
The picture below shows the confirmation controller form allowing the user to specify parameters for the stored procedure.
The CREATE script for the stored procedure can be seen below.
CREATE procedure [dbo].[Employee Sales by Country] @Beginning_Date DateTime, @Ending_Date DateTime AS SELECT Employees.Country, Employees.LastName, Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal AS SaleAmount FROM Employees INNER JOIN (Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID) ON Employees.EmployeeID = Orders.EmployeeID WHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date
Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Click on the New Controller icon on the toolbar.
Enter a name for the controller.
Property | Value |
Name | EmployeeSalesByCountry |
Press OK to save. Right-click the new controller and press “Generate From SQL…”.
In the SQL script textbox, paste in the following script. The debug section is removed from the business rule when the application framework executes the script at runtime and declares the parameters.
-- debug DECLARE @Session_BeginningDate datetime, @Session_EndingDate datetime -- end debug if (@Session_BeginningDate is null) set @Session_BeginningDate = '1970' if (@Session_EndingDate is null) set @Session_EndingDate = '2000' EXEC [dbo].[Employee Sales by Country] @Session_BeginningDate, @Session_EndingDate
Press OK to generate the controller.
Note that the parameters returned from the search dialog will not be cached. These parameters must be saved into a session variable. In the Project Explorer, double-click on the EmployeeSalesByCountry / Business Rules / Select (Sql / Before) – enableResultSet node.
Replace the script with the following:
set @BusinessRules_EnableResultSet = 1 -- Enable caching of the result set. Duration is specified in seconds. -- set @BusinessRules_ResultSetCacheDuration = 30 if (@Parameters_BeginningDate is not null) set @Session_BeginningDate = @Parameters_BeginningDate if (@Parameters_EndingDate is not null) set @Session_EndingDate = @Parameters_EndingDate
Press OK to save the new script.
Next, let’s add the controller to a page. Right-click on the controller and press Copy.
Switch to the Pages tab in the Project Explorer. On the toolbar, press the New Page icon.
Give a name to the page and press OK to save.
Property | Value |
Name | Employee Sales By Country |
Drop the new page to the right side of Home page node to place it second in the site menu.
Right-click on the page and press Paste to instantiate the controller as a data view on the page.
Switch back to the Controllers tab in the Project Explorer. Right-click on EmployeeSalesByCountry / Actions / ag3 (ActionBar) – New node, and press New Action.
Specify the following values:
Property | Value |
Command Name | Search |
Header Text | Filter View |
Confirmation |
_controller=FilterEmployeeSales
|
Press OK to save the action.
Let’s add a controller that will allow the user to specify BeginningDate and EndingDate parameters for the stored procedure.
On the Project Explorer toolbar, press the New Controller icon.
Enter a name for the controller.
Property | Value |
Name |
FilterEmployeeSales |
Click OK to save the controller. Right-click on FilterEmployeeSales / Fields node, and press New Field.
Define the field as follows:
Property | Value |
Name | BeginningDate |
Type | DateTime |
Save the field, and create a second field with these values:
Property | Value |
Name | EndingDate |
Type | DateTime |
Save the EndingDate field. The confirmation controller is now complete.
On the Project Designer toolbar, press Browse. In the browser window that will open, navigate to the Employee Sales By Country page. Note that all 809 records are displayed.
In the sidebar or context menu, press Filter View action. The page will navigate to a form with the Beginning Date and Ending Date fields. Enter values, and press OK.
Note that the parameters have been passed to the stored procedure and there are only 17 records displayed now.