Blog: Posts from May, 2012

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
Posts from May, 2012
Saturday, May 12, 2012PrintSubscribe
SQL and Email Business Rules, Stored Procedures with Output Caching

Code On Time release 6.0.0.27 introduces major new enhancements to the business rules processing and data retrieval.

It is now possible to create SQL Business Rules that can interact  with all tiers of a web application: database engine tier, application server tier, and client web browser tier. All of these are possible in a comfort of a familiar SQL dialect such as T-SQL or PL/SQL. Take a look at a validation example with SQL Business Rules. You can now develop and debug SQL Business Rules in your favorite tool and paste them as-is in the application definition. Use data controller virtualization to define SQL Business Rules at runtime with the node set plugins.

Stored procedure and web services a frequently used to build custom result sets that cannot be produced with a straightforward SELECT statement. Code On Time web applications now offer a powerful output caching model that makes it easy integrating a stored procedure or web service as a data source.

Email Business Rules allow easy implementation of notification in a lifecycle of a web application.

The following features, enhancements, and bug fixes are included in this release:

  • BusinessRules class supports string properties Whitelist and Blacklist that allow to control execution of named business rules of type SQL and Email.
     
  • Debug / End Debug statements can be included in SQL Business Rules and SQL action definition.
     
  • New Search action allows implementation of custom Search Bars and Search Dialogs.
     
  • A data view with action Search defined without a confirmation data controller will broadcast the search command to any other data views on the page that reference it in its own 'Search action confirmation property.
     
  • Data views feature the new property Show Action Buttons that has a default value of Top and Bottom. Other supported values are None, Top, and Bottom.
     
  • Method BusinessRules.Email accepts parameter MailMessage that can be preconfigured with attachments and still take advantage of automatic formatting. Premium edition only.
     
  • "Soft" filtering is now supported with SQL Business Rules.
  • SQL Business Rules support FieldName_Modified property.
     
  • It is possible to tag a data view in SQL Business Rules:
    set @BusinessRules_Tags = 'Tagged'
      
  • View messages are includes in the details of automatic reports.
     
  • SQL Business Rules and "SQL" action now support "@Url_" and "@Session_" parameters. This parameters are processed by application framework and do not require a declaration.
     
  • Filter details have a correct height in DotNetNuke projects.
     
  • DotNetNuke Factory does not publish the portal DLLs if the project has a direct dependency on the DotNetNuke site.
     
  • Improved detection of DotNetNuke system tables. System tables are hidden from the application generator.
     
  • It is now possible to reference any property of the business rules class as @BusinessRules_NameOfProperty in SQL actions and SQL Business Rules.
     
  • Element iframe is assigned a tab index when rendering custom field editors (Rich Text) and file upload.
     
  • Action State Machine performs an iteration on the client while trying to match an action in the group with the same scope as the last action. If the last action has been invoked from the data sheet view then the scope is Grid.
     
  • Class ControllerNodeSet has been enhanced to support business rules.
     
  • Fixed the bug with conversion of null values in data access objects.
     
  • Data format string is correctly applied when a lookup value is selected in edit/new modes.
     
  • Subsequent execution of Result.ShowViewMessage will not "forget" the default view header.
     
  • View-level messages rendered by business rules via Result.ShowViewMessage or @Result_ShowViewMessage will remain permanently displayed in the original data controller view until dismissed by the user or if the page is reloaded.
     
  • Project Explorer now displays the field length, read-only, and null flags in the tree.
     
  • Project Explorer displays '*' next to the name of mandatory fields.
     
  • Parameters @Result_Refresh and @Result_RefreshChildren are now supported in SQL Business Rules.
     
  • Mandatory lookups with Items Style set to Radio Button List will force a user to make a selection.
     
  • SQL Business Rules support New and Edit commands when selecting data on the server.
     
  • Fixed the problem with slight shifting of modal dialogs in Internet Explorer in tabbed form views.
     
  • Subsequent uploading of annotations will not loose the focused tab in the form.
     
  • Fixed the bug with printing of charts in automatically created reports.
     
  • The bug when opening View Details with annotations has been resolved.
     
  • TimeSpan fields are provided with an automatic drop down selector spaced in 15 minutes.
     
  • Multi-field copy now ignores spaces around "=" sign.
     
  • BusinessRules class uses case-insensitive parameter names when processing SQL action and SQL Business Rules.
     
  • SQL Business Rules are correctly working when there is not dedicated handler for the data controller.
     
  • SQL Business Rules will throw an exception if a value is assigned to @Result_Error and send a JavaScript expression to the browser if a value is assigned to @Result_ExecuteOnClient.
Saturday, May 12, 2012PrintSubscribe
Validation with SQL Business Rules

Data validation is the single most important component of any data-driven application.

Modern multi-tier web applications introduce a certain level of complexity when it comes to validation. The data travels between multiple tiers: a web browser, application server, and database. Validation can be performed on any application tier and requires a different skill level:

  • Web Browser tier validation is performed with JavaScript code.
  • Application Server tier validation is performed with C#/Visual Basic.
  • Database tier validation is performed with the dialect of SQL supported by the database engine.

Code On Time web applications offer a unique mechanism called SQL Business Rules. These rules exist on the application server tier, are executed by the database engine tier, and affect presentation in the  web browser client tier.

Consider the following script written in T-SQL.

-- debug
declare @UnitPrice money                      -- data field value
declare @BusinessRules_PreventDefault bit     -- application tier property
declare @Arguments_CommandName nvarchar(50)   -- application tier property
declare @Result_Focus nvarchar(255)           -- client tier property
declare @Result_ShowViewMessage nvarchar(255) -- client tier property

set @UnitPrice = 10
set @Arguments_CommandName = 'Update'
-- end debug

-- lookup database to find the average price of products
declare @AverageUnitPrice money 
select @AverageUnitPrice = avg(UnitPrice) 
from Products

-- perform validation
if @UnitPrice is not null and @UnitPrice > @AverageUnitPrice
begin
 set @BusinessRules_PreventDefault = 1
 set @Result_Focus = 
    'UnitPrice, You are not authorized to enter ' + 
    'a price higher than the average of ' + cast(@AverageUnitPrice as nvarchar) + '.'
 set @Result_ShowViewMessage = 'Error trying to execute "' + @Arguments_CommandName + 
    '" command.'
end

-- debug
if @BusinessRules_PreventDefault = 1
begin
    print 'BusinessRules_PreventDefault: ' + cast(@BusinessRules_PreventDefault as nvarchar)
    print 'Result_Focus: ' + @Result_Focus
    print 'Result_ShowViewMessage: ' + @Result_ShowViewMessage
end
-- end debug

The script is compatible with the Northwind sample database.

If you execute the script in SQL Management Studio, then the following output will be displayed in the Messages window.

BusinessRules_PreventDefault: 1
Result_Focus: UnitPrice, You are not authorized to enter a price higher
than the average of 28.87.
Result_ShowViewMessage: Error trying to execute "Update" command.

Replace the value of “30” assigned to the Unit Price with “10”, execute the script, and there will be no messages in the output.  The validation test has passed.

Start the Project Designer and right-click Products / Business Rules node on the Controllers tab in Project Explorer. Select New Business Rule option.

Creating a new business rule in a Code On Time web application

Enter the following properties and click OK button to save the business rule.

Property Value
Command Name Insert|Update
Type SQL
Phase Before
Script Paste the entire script from above

The hierarchy of the data controller will look as follows.

A validation SQL Business Rule defined for 'Products' data controller

Click Browse on the designer toolbar. The application will be generated and open in a default web browser. Navigate to Products page and try editing or creating a product with Unit Price higher than $28.87.

The application server tier will not perform the requested Insert or Update if the parameter @BusinessRules_PreventDefault is set to “1” by the business rule.

This is how the error messages are displayed on the client web browser tier when a violation is detected in the form view.

Validating SQL business rule detects a violation in a form view

These are the error messages displayed when entering a new product in the data sheet view.

Validating SQL business rule detects a violation in a data sheet view

The application framework automatically removes the debug / end debug sections in the SQL Business Rule script. From the database engine prospective, the script looks like this:

-- lookup database to find the average price of products
declare @AverageUnitPrice money 
select @AverageUnitPrice = avg(UnitPrice) 
from Products

-- perform validation
if @UnitPrice is not null and @UnitPrice > @AverageUnitPrice
begin
 set @BusinessRules_PreventDefault = 1
 set @Result_Focus = 
    'UnitPrice, You are not authorized to enter ' + 
    'a price higher than the average of ' + cast(@AverageUnitPrice as nvarchar) + '.'
 set @Result_ShowViewMessage = 'Error trying to execute "' + @Arguments_CommandName + '" command.'
end
Friday, May 11, 2012PrintSubscribe
Grouping Data Views Under the Same Tab

It is possible to create multi-level master-detail pages in a Code On Time web application. One option is to render the master-detail data views in a flat list one under another. Another option is to group the detail data views in the same container.

In a Northwind sample with a Classic page layout, the Customers page will have the Customers master data view at the top, and three child data views in their own tabs underneath.

 Customers page layout of data views in two containers.

The child data views belong to the same container, and have tabs as activators.

Northwind web application using Classic page layout.Northwind web application using Classic page layout.

In the above layout, the Order Details tab is a child of the Customers data view. Let’s make the Order Details data view a child of Orders data view and have it displayed when Orders tab is selected.

Start the Project Designer. Double-click on Customers / container2 / view4 data view node.

Child data view selected in Code On Time Project Explorer.

Change the following properties:

Property New Value
Text Orders
Filter Source view2
Filter Field #1 OrderID
Auto Hide Self

Press OK to save the data view. On the tool bar, press Browse to generate the application.

When your default web browser opens, navigate to Customers page. You are presented with a list of Customers. Select a customer, and the Orders and Customer Demo tabs of container2 will become visible. Select an Order, and relevant Order Details will appear underneath.

Northwind web application with three-level master/detail layout arranged using tabs.Northwind web application with three-level master/detail layout arranged using tabs.

If you choose Customer Demo tab, then both Orders and Order Details data views will become hidden.

When switched to the Customer Demo tab, Orders and Order Details data views are hidden.