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
Tuesday, May 15, 2012PrintSubscribe
Modifying Membership Manager

Code On Time web applications designed for Internet access have an option to include a built-in Membership Manager. This tool works on top of Microsoft ASP.NET Membership to simplify user and role management in generated apps. It uses exactly the same data controller architecture as the rest of data controllers in a project.

Data controllers aspnet_Membership and aspnet_Roles are automatically created in a web application if the membership feature is enabled.

This is a typical view of Membership Manager presented if you sign in as admin and navigate to Membership page.

Standard Membership Manager in a web app created with Code On Time application generator

The data controller files can be changed in Visual Studio but the changes will be overwritten by the application generator.

Instead, consider the data controller virtualization when you need to modify the membership manager.

Select the project name on the start page of the generator and choose Develop option. Visual Studio will load the project for editing. Create a new code file Class1.cs(vb) under ~/App_Code/Security folder of your project.

The extension class file for MembershipBusinessRules class displayed in Solution Explorer of Visual Studio

Enter the following definition of the partial class MembershipBusinessRules to virtualize the data controller definition at runtime.

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Security
{
    public partial class MembershipBusinessRules
    {
        public override bool SupportsVirtualization(string controllerName)
        {
            return true;
        }

        protected override void VirtualizeController(string controllerName)
        {
            // remove lookup capability from the field "UserId"
            NodeSet().SelectField("UserId")
                    .SetItemsStyle(null)
                    .SetItemsController(null)
                    .SetItemsNewView(null);
            // select "grid1" view 
            NodeSet().SelectView("grid1")
                // add data field "UserId"
                .CreateDataField("UserId")
                    .SetReadOnly(true)
                // delete data field "Comment"
                .SelectDataField("Comment")
                    .Delete();
            // select "grid1" view
            NodeSet().SelectView("grid1")
                // re-arrange the data fields
                .ArrangeDataFields("UserUserName", "Email", "UserId");
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Security

    Partial Public Class MembershipBusinessRules
        Public Overrides Function SupportsVirtualization(controllerName As String) As Boolean
            Return True
        End Function

        Protected Overrides Sub VirtualizeController(controllerName As String)
            ' remove lookup capability from the field "UserId"
            NodeSet().SelectField("UserId") _
                .SetItemsStyle(Nothing) _
                .SetItemsController(Nothing) _
                .SetItemsNewView(Nothing)

            ' select "grid1" view, add data field "UserId", and delete data field "Comment"
            NodeSet().SelectView("grid1") _
                .CreateDataField("UserId") _
                    .SetReadOnly(True) _
                .SelectDataField("Comment") _
                    .Delete()
            ' select "grid1" view and re-arrange the data fields
            NodeSet().SelectView("grid1") _
                .ArrangeDataFields("UserUserName", "Email", "UserId")
        End Sub
    End Class

End Namespace

The new partial class complements the standard class MembershipBusinessRulesBase included in the application framework. It is possible to override any standard methods such as SignUpUser or UpdateUser. The implementation above overrides the data controller virtualization methods only.

Save the code file and navigate to Membership Manager.

You will see the global unique ID of each user. The data field Comment is not visible anymore. The remaining data fields are re-arranged.

Virtualized data controller aspnet_Membership in action

Tuesday, May 15, 2012PrintSubscribe
Filtering With SQL Business Rules

End users of Code On Time web applications have some impressible data filtering capabilities available to them. User-defined filters are also called “soft” filters. They can be canceled or activated at will.

Application developers can activate “soft” filters programmatically. For example, it may be appropriate to limit the amount of data in some data views based on a user identity or value of a session variable. Users can alter such “soft” filters on their own if a larger dataset is required.

Consider the Orders screen in the Northwind sample application.

A list of orders in the Northwind sample

An SQL Business Rule can be created to limit the list orders to those that meet a specific criteria without user intervention.

Select Orders data controller in Project Designer and enter a new business rule with the following properties.

Property Value
Command Name Select
Type SQL
Phase Before
Script
-- assign a filter if the client-side data view is not tagged
if @BusinessRules_Tags is null
begin
    -- tag the data view
    set @BusinessRules_Tags = 'Filtered'
    -- filter by Employee Name
    set @EmployeeLastName_Filter_Equals = 'Callahan'
    -- filter Ship Via Company Name by two values
    set @ShipViaCompanyName_Filter_Includes1 = 'Speedy Express'
    set @ShipViaCompanyName_Filter_Includes2 = 'United Package'
    -- assign a filter range to Freight
    set @Freight_Filter_Between1 = 10
    set @Freight_Filter_Between2 = 30
    -- assign a filter range to Order Date
    set @OrderDate_Filter_Between1 = '1/1/1998'
    set @OrderDate_Filter_Between2 = '6/1/1998'
    -- let the user know that the "soft" filter has been applied
    set @Result_ShowViewMessage = 'A "soft" filter has been applied.'
end

This is the data controller hierarchy after the rule has been saved.

A data controller with SQL Business Rule that executes before the data is selected

Generate the app and navigate to Orders page once more. A significantly shorter list of orders is rendered.

The "soft" filter produced by SQL Business Rule

A user can cancel some elements of the filter or apply a filter of their own. The script of the business rule assigns “Filtered” tag to the client-side data view to prevent interference with user actions.

The data view has a "soft" filtered assigned to it by the business rule

You can also assign a “soft” filter with business rules written in C# or Visual Basic .

Monday, May 14, 2012PrintSubscribe
Building “New” Rows with SQL Business Rules

Session variables provide a context for the current user activities. The common use for session variables is to perform automatic data filtering and to facilitate data input.

The Session and URL Variables example explains how to store an ID of  a supplier in a session variable. The stored Supplier ID is used for product filtering.

It is easy to use the same session variable to assign a supplier when a new product is entered.

Add a new SQL Business Rule to the Products data controller and enter its properties as follows.

Property Value
Command Name New
Type SQL
Phase Execute
Script
-- assign the Supplier ID
set @SupplierID = @Session_SupplierID
-- assign default values to other fields
select 
    @SupplierCompanyName = CompanyName, -- Supplier alias field
    @UnitsOnOrder = 0,                  -- Unit On Order
    @Discontinued = 0                   -- "Discontinued" flag
from Suppliers
where SupplierID = @SupplierID
-- assign default Reorder Level as the maximum reorder level  
-- for the products of this supplier
select @ReorderLevel = max(ReorderLevel)
from Products
where SupplierID = @SupplierID

Click OK button to save the business rule.

The script definition uses the value stored in the session variable SupplierID to assign the initial values to the lookup field SupplierID and its alias SupplierCompanyName when a new product record is created. It also figures ReorderLevel as a maximum reorder level of supplier products. The script assigns default values to the fields UnitsOnOrder and Discontinued.

The hierarchy of Products data controller will look as shown in the picture.

The selected business rule is executed when a new data row is created by the data controller before it is rendered in the user interface in the web browser

Click Browse to generate the app. Navigate to Suppliers page and choose Show Supplier Products in the context of any data row.

Select a custom 'SQL' action to store the SupplierID in the user session variable

The supplier ID will be stored in the session variable and the web browser will redirect to Products page.

Start creating a new product. The default supplier field values will be automatically entered in the new data record.

The application framework executes business rules that match the New command name. It returns all changed “field” parameter values as the values of a new data row to the web browser. The client library renders a new data row in a presentation view.

The session variable SupplierID is used to assign default values to the fields SupplierID, SupplierCompanyName, and ReorderLevel

You can visit other application pages. The value of the session variable SessionID will remain the same. If you arrive to Products page directly without choosing another supplier, then the same supplier stored in the session variable will be assigned to the new product record.