Blog: Posts from March, 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 March, 2012
Saturday, March 31, 2012PrintSubscribe
Dynamic Creation of Static Lookup Items

Suppose that you want to change a field that renders as a textbox into a static drop down list of items, such as the Reorder Level field in the Products controller of the Northwind sample. By default, users can enter any numeric value in the field.

'Reorder Level' field showing numbers and as a textbox

Let’s change this by offering a drop down list of predefined items, and have the item values displayed as words.

You can do this at design time, as explained in Creating Static Lookup Items. However, there may be other situations when you don’t want to change the physical properties of the application. For example, the static items maybe displayed only to users in specific roles. For this purpose, you can use virtualization node sets.

First, you will need to enable shared business rules.

Next, switch to the web application generator, select the project name, and press Develop. This will open the project in Visual Studio.

Develop button in Code On Time web application generator

In the Solution Explorer, navigate to ~/App_Code/Rules/SharedBusinessRules.cs(vb). The code will need to enable virtualization if the controller name is “Products”. The virtualized Products controller will have a modified ReorderLevel field. The Items Style will be changed to “Drop Down List”, and it will have the following static items:

Value Text
0 Zero
5 Five
10 Ten
15 Fifteen
20 Twenty
25 Twenty-five
30 Thirty

Place the code into your SharedBusinessRules.cs(vb) file:

C#:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class SharedBusinessRules : MyCompany.Data.BusinessRules
    {
        public override bool SupportsVirtualization(string controllerName)
        {
            if (controllerName == "Products")
                return true;
            return false;
        }

        protected override void VirtualizeController(string controllerName)
        {
            if (controllerName == "Products")
            {
                NodeSet().SelectField("ReorderLevel")
                    .SetItemsStyle("DropDownList")
                    .CreateItem(0, "Zero")
                    .CreateItem(5, "Five")
                    .CreateItem(10, "Ten")
                    .CreateItem(15, "Fifteen")
                    .CreateItem(20, "Twenty")
                    .CreateItem(25, "Twenty-five")
                    .CreateItem(30, "Thirty");
            }
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq

Namespace MyCompany.Rules

    Partial Public Class SharedBusinessRules
        Inherits MyCompany.Data.BusinessRules

        Public Overrides Function SupportsVirtualization(controllerName As String) As Boolean
            If (controllerName = "Products") Then
                Return True
            Else  
Return False End If End Function Protected Overrides Sub VirtualizeController(controllerName As String) If (controllerName = "Products") Then NodeSet().SelectField("ReorderLevel") _ .SetItemsStyle("DropDownList") _ .CreateItem(0, "Zero") _ .CreateItem(5, "Five") _ .CreateItem(10, "Ten") _ .CreateItem(15, "Fifteen") _ .CreateItem(20, "Twenty") _ .CreateItem(25, "Twenty-five") _ .CreateItem(30, "Thirty") End If End Sub End Class End Namespace

Save this file and run the web application. You will see that the Products controller now displays Reorder Level filter options as words, and the field is rendered as a drop down list.

Reorder Level field in Products now showing static items as words, and as a drop down list

Saturday, March 31, 2012PrintSubscribe
Creating Static Lookup Items

In the Products table of Northwind sample database, there is a Reorder Level field. It is rendered as a textbox where users can type in any number to trigger the product reorder. If you look at the available filtering options of the Reorder Level field, you can see that there is a limited number of values stored in the database (0, 5, 10, 15, 20, 25, and 30).

Reorder Level field in Products screen presented as a textbox

Let’s change this field into a static dropdown list, and have the values displayed as words instead of numbers. For example, “0” will be Zero, “5” will be Five, and so on.

Open the web application generator, select the project name, and select Design. Switch to the Controllers tab in the Project Explorer, and double-click on Products / Fields / Reorder Level node. Change Items Style of Reorder Level field to “Drop Down List”, and press OK to save the field.

Reorder Level field changed to Items Style of 'Drop Down List'

Scroll to the top of the Designer, and click on the Items tab. On the action bar, select New | New Item.

Each item represents an option available in the dropdown list. The Value is stored in the database, while the Text is displayed to the user.

Enter the following values:

Value Text
0 Zero

New Item of '0' for Reorder Level field

Press OK to save the item. Using the same method, create more items with the following values:

Value Text
5 Five
10 Ten
15 Fifteen
20 Twenty
25 Twenty-five
30 Thirty

Static list of lookup items for Reorder Level field

In the top left corner, press Generate to generate the web app. A Preview window will open. Navigate to Products page, and you will see that the Reorder Level is now displayed with words. Edit a record, and the Reorder Level is now a static dropdown lookup.

Reorder Level field presented as a drop down list with words

The adaptive filter in the Reorder Level column also reflects the static values.

Drop Down options for Reorder Level with static items

On the action bar, select Report | PDF Document. You will see that Reorder Level displays the Text, and not the Value of the field.

PDF Report of Products displaying text in Reorder Level field

Saturday, March 31, 2012PrintSubscribe
“Soft” Filtering With Business Rules

Code On Time web applications offer impressive adaptive filtering and search capabilities that require zero programming. Consider the following screen shot from the Northwind sample.

A complex filter defined at runtime by an application user

Application user has selected specific categories,

User-defined category filter

specific suppliers,

User-defined supplier filter

a range of prices,

User-defined unit price filter

and specific values of product units on order.

User-defined 'units on order' filter

A user can remove the filter at will by either clicking on individual filter elements or dismissing the entire filter.

User can remove the filter at will by either clicking on individual filter elements or dismissing the entire filter

An application developer can also configure a filter based on arbitrary conditions at runtime. The filter can be constructed just before the data is retrieved from the database.  Users will see the filter as if they have selected all options on their own. End users can always cancel or adjust the “soft” filter to reveal more data rows.

This may be useful when a specific data row has to be brought to the application user’s attention.  “Soft” filtering will work even better when combined with the auto highlight first row or auto select first row features.

Enable shared business rules in your web application and enter the following code.

C#:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class SharedBusinessRules : MyCompany.Data.BusinessRules
    {
        [ControllerAction("Orders", "grid1", "Select", ActionPhase.Before)]
        public void AssignOrdersFilter()
        {
            if (!IsTagged("Filtered"))
            {
                AddTag("Filtered");
                DateTime startDate = new DateTime(1998, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                DateTime endDate = new DateTime(1998, 6, 1, 23, 59, 59, DateTimeKind.Utc);
                AssignFilter(
                    new FilterValue("OrderDate",
                        RowFilterOperation.Between, startDate, endDate),
                    new FilterValue("EmployeeLastName",
                        RowFilterOperation.Equal, "Callahan"),
                    new FilterValue("ShipViaCompanyName",
                        RowFilterOperation.Includes, "Speedy Express", "United Package"),
                    new FilterValue("Freight", 
                        RowFilterOperation.Between, 10, 30)
                );
                Result.ShowViewMessage("A \"soft\" filter has been applied to this list.");
            }
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq

Namespace MyCompany.Rules
    Partial Public Class SharedBusinessRules
        Inherits MyCompany.Data.BusinessRules

        <ControllerAction("Orders", "grid1", "Select", ActionPhase.Before)> _
        Public Sub AssignOrdersFilter()
            If Not IsTagged("Filtered") Then
                AddTag("Filtered")
                Dim startDate As DateTime = New DateTime(1998, 1, 1, 0, 0, 0, DateTimeKind.Utc)
                Dim endDate As DateTime = New DateTime(1998, 6, 1, 23, 59, 59, 
DateTimeKind.Utc) AssignFilter( New FilterValue("OrderDate", RowFilterOperation.Between, startDate, endDate), New FilterValue("EmployeeLastName", RowFilterOperation.Equal, "Callahan"), New FilterValue("ShipViaCompanyName", RowFilterOperation.Includes, "Speedy Express", "United Package"), New FilterValue("Freight", RowFilterOperation.Between, 10, 30) ) Result.ShowViewMessage("A ""soft"" filter has been applied to this list.") End If End Sub End Class End Namespace

Save the code file and navigate to the page Orders. The method AssignOrdersFilter will be invoked when the data is about to be retrieved. The method will apply a filter one time only in the lifecycle of the page instance displayed in the web browser to prevent interference with application user actions.

Notice that we are filtering by UTC dates to ensure that Microsoft.NET will not try to compensate for the time difference between the server and the web browser.

In the end, the method will display a view-level message rendered just above the grid view informing the app user about the “soft”- filter.

A list of orders with the 'soft' filtered applied in the business rules method

Select data view Customers/ Orders / container1 / view in the Project Explorer.

Data view selected in the Project Explorer

If you enable Search On Start in the data view properties then the Orders page will open up with the search bar pre-filled with filter values and no data will be displayed. Users will have to click Search to initiate the retrieval of data.

'Soft' filter will be displayed in the search bar if the data view property 'Search on Start' is turned on

If you have enabled automatic selection or highlighting of the first row in the properties of the page data view then the view will perform the first action in the context menu of the first data row or simulate a click in the first row. This sort of behavior will happen even if you do not “soft” filter the data.

You can also coincide the selection or highlighting of the first row with the assignment of a “soft” filter in business rules  by calling Result.SelectFirstRow or Result.HightlightFirstRow right after the call of ShowViewMessage method.

For example, this is the effect of Result.HighlightFirstRow method call.

The effect of calling AssignFilter and HighlightFirstRow methods in the business rules prior to data selection

Developers should use access control rules or filter expressions when the application business logic does not permit cancellation of data filters at will by the application users.

Continue to Shared Business Rules