Business Rules/Logic

Labels
AJAX(112) App Studio(7) Apple(1) Application Builder(245) Application Factory(207) ASP.NET(95) ASP.NET 3.5(45) ASP.NET Code Generator(72) ASP.NET Membership(28) Azure(18) Barcode(2) Barcodes(3) BLOB(18) Business Rules(1) Business Rules/Logic(140) BYOD(13) Caching(2) Calendar(5) Charts(29) Cloud(14) Cloud On Time(2) Cloud On Time for Windows 7(2) Code Generator(54) Collaboration(11) command line(1) Conflict Detection(1) Content Management System(12) COT Tools for Excel(26) CRUD(1) Custom Actions(1) Data Aquarium Framework(122) Data Sheet(9) Data Sources(22) Database Lookups(50) Deployment(22) Designer(177) Device(1) DotNetNuke(12) EASE(20) Email(6) Features(101) Firebird(1) Form Builder(14) Globalization and Localization(6) How To(1) Hypermedia(2) Inline Editing(1) Installation(5) JavaScript(20) Kiosk(1) Low Code(3) Mac(1) Many-To-Many(4) Maps(6) Master/Detail(36) Microservices(4) Mobile(63) Mode Builder(3) Model Builder(3) MySQL(10) Native Apps(5) News(18) OAuth(9) OAuth Scopes(1) OAuth2(13) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(11) PKCE(2) Postgre SQL(1) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(183) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(81) SharePoint(12) SPA(6) SQL Anywhere(3) SQL Server(26) SSO(1) Stored Procedure(4) Teamwork(15) Tips and Tricks(87) Tools for Excel(2) Touch UI(93) Transactions(5) Tutorials(183) Universal Windows Platform(3) User Interface(338) Video Tutorial(37) Web 2.0(100) Web App Generator(101) Web Application Generator(607) Web Form Builder(40) Web.Config(9) Workflow(28)
Archive
Blog
Business Rules/Logic
Friday, May 4, 2012PrintSubscribe
Activating a Stored Procedure With a Master-Detail Relationship

An output caching script can be activated with user-defined filters.

Filters explicitly exist in the configuration of master/detail pages. Frequently, custom result sets are produced with the master ID specified as a parameter of a stored procedure or web service. The output may be presented as a detail view in the user interface.

Let’s place a data view of customer order history produced by CustOrderHist stored procedure on the Customers page in Northwind sample.

Activate the Project Designer and right-click Customers / container2 node. Select New Data View option to create a new data view.

Adding a data view to a page container in a web app created with Code On Time application generator

Enter the following properties and click OK button.

Property Value
Controller CustOrderHist_Cache
View grid1
Activator Tab
Text Order History
Page Size 5
Filter Source view1
Filter Field #1 Customer ID
Auto Hide Container

The output cache controller CustOrderHist_Cache has its SQL Business Rules configured to execute the output caching script to capture the data rows produced by CustOrderHist stored procedure.

Click Browse button on the designer tool bar. A browser window will open. Navigate to the Customers page and select  a customer. Switch to the Order History tab to view the customer order history.

Selection of a master data row in a grid view causes execution of the output caching script. The stored procedure 'CustOrderHist' is invoked if more that 30 seconds have passed since the last selection of the master data row.

If the Order History tab is visible, then the output caching script will execute every time you select a customer in the master grid view or navigate to a master data row in the form view. The stored procedure CustOrderHist will be invoked by the script only if more than 30 seconds have passed since the last selection of the same master data row.

Selection of a master data row in a form view causes execution of the output caching script. The stored procedure 'CustOrderHist' is invoked if more that 30 seconds have passed since the last selection of the master data row.

Friday, May 4, 2012PrintSubscribe
Activating a Stored Procedure With User-Defined Filters

The stored procedure output caching script is configured to execute when an application requires a row count and there are no unexpired data rows in the output cache table matched to the current user.

This is fragment of the script that does the verification of the condition.

if @BusinessRules_RequiresRowCount = 1 
    and @CustomerID_FilterValue is not null
    and not exists (
        select 1 from CustOrderHist_Cache
        where CacheUserName = @BusinessRules_UserName and 
            CustomerID = @CustomerID_FilterValue and
            CacheExpires > getdate()
    )
begin
    . . . . .

The application framework automatically assigns values to the parameters @BusinessRules_RequiresRowCount and @BusinessRules_UserName. The value of the first parameter is set to “1” when a number of available rows must be calculated. The value of the second parameter is assigned to the name of the current application user.

The highlighted parameter @CustomerID_FilterValue is matched to the field CustomerID of the output cache controller. If the data is being filtered by CustomerID, then the user-specified filter value is assigned to the parameter. If there is no user-defined filter then the application framework will assign a NULL value to the parameter.

If you navigate to the dedicated page of the output  cache table CustOrderHist_Cache, then you will see no records there. The script specified in the SQL Business Rules of the data controller is  triggered but will not cause execution of there stored procedure since there is no filter.

Activate the search bar and enter “ANTON” in the CustomerID field. Notice that there will be no auto-completed values as you type the text.

Entering a user-defined filter value in Automatic Search Bar of a web app created with Code on Time application generator

Hit Enter key and the list of matched products purchased by the customer will show up.

The result of execution of the output caching script that invokes the 'CustOrderHist' stored procedure in the Northwind sample created with Code On Time web application generator

Try entering other customer IDs and activating search. For example, try “AROUT”, “BONAP”,  and “BLONP” values. Every time the relevant data rows are displayed.  You will also notice that the auto-completion kicks in as your type initial letters of the values.

Clear the filter and sort the customer order history by Product Name. You will see all records that are captured in the cache output table.

You can also initiate a filter directly from the context menu of the Customer ID column.

The context menu of the column in a grid view of a web application created with Code On Time

Select Customer# / Text Filters / Equals option and enter a customer ID.

Modal dialog allows entering a user-defined filter value in a web application created with Code On Time generator

Hit Enter key to apply the filter. The relevant data rows will populate the output cache table.

It does not matter to the output caching script what filter operation is selected in the context menu of the column Customer ID. You can choose Equals or Does Not End With and the stored procedure will be invoked by the script in both cases.

The chosen filter operation will affect the selection of data from the CustOrderHist_Cache table after the script has been executed. For example, if you choose Does Not Equal and enter a valid customer ID, then you will see the previously cached data rows. None of them will match the entered ID. In fact the relevant data rows have been inserted in the table by the output caching script. The filter operation Does Not Equal hides them from the user.

If you want to fine-tune the output caching script, then consider using the @CustomerID_FilterOperation parameter. The value of the parameter is a string representing the selected filter operation spelled without spaces. For example, the value of the parameter may be equal to “DoesNotContain” or “EndsWith”. The value is equal to NULL, if the field is not filtered by the application user. Use the filter operation as an additional condition for the activation of the stored procedure in the output caching script when needed.

If you activate a Customer ID filter on the page and add a new customer order of any product, then the subsequent filtering of the history by the same Customer ID will most likely reflect that. The caching timeout is set to 30 seconds. It will probably take longer to enter a new order and activate a filter. If you change the script to cache records for a longer period of time, then there will be a period of discrepancy between the cached data and the actual data records. It is up to you to figure the acceptable cache expiration that can be tolerated by business users and processes.

Thursday, May 3, 2012PrintSubscribe
Adding Output Cache Table to a Project

It is easy to add a data controller for the output cache table to an existing project.

Start the application generator, select the project name and choose Refresh action. Toggle the check box next to the table dbo.CustOrderHist_Cache and click Refresh button. Click Yes to confirm the refresh action.

Adding a table to a web application created with Code On Time generator

Select Design option on the project Summary Page of the application generator.

Activate Controllers tab in Project Explorer, and right-click the CustOrderHist_Cache / Business Rules node. Chose the  New Business Rule option.

Adding a declarative business rule to a data controller in a Code On Time web application

Enter the following business rule properties and click OK button.

Property Value
Command Name Select
View grid1
Type SQL
Phase Before
Script Paste the  output caching script in its entirety.

Note that the output caching script includes a section declaring parameters and their values that can be used for debugging.

The application framework will automatically remove
the script lines between Debug and End Debug.

That way you can develop a script using SQL Management Studio or any other SQL development tool compatible with your database engine. The entire script can be moved unchanged between the development tool and the Project Designer.

The application framework automatically recognizes and declares parameters and provides their values if a parameter name starts with “@BusinessRules_” or represents the name of the data controller field with optional suffixes “_NewValue”, “_OldValue”, “_Value”, “_FilterValue”, and “_FilterOperation”. All other parameters must be declared explicitly in the Script property of an SQL Business Rule or in the Data property of SQL action.

Expand the CustOrderHist_Cache / Views / grid1 view node, right-click the data field CacheUserName . Choose Delete option in context menu to remove the data field. Repeat this procedure for the field CacheExpires.

Deleteing a data field in a Code On Time web application project

Select the CustOrderHist_Cache / Views / grid1 view node and change its properties as follows. Click OK button to save the view properties.

Property New Value
Filter Expression
CacheUserName = @BusinessRules_UserName

View of the customized output cache controller 'CustOrderHist_Cache' in Project Explorer

Click Browse button on the designer tool bar to generate the project. The default web browser window will open.

Application generator has created a dedicated page for the data controller CustOrderHist_Cache when the project had been refreshed. If you have not customized any pages in the Northwind sample then the menu option to access the dedicated page is Region / Cust Order Hist Cache. Otherwise you will find it under New Pages / Cust Order Hist Cache.

Navigating to the dedicated page of the output cache table 'CustOrderHist_Cache' in the Northwind project

Navigate to the page and you will see the standard grid view of the output cache table data.

The view of the dedicated page of the output cache table 'CustOrderHist_Cache' in the Northwind project

There will be no records.