Blog: Posts from November, 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 November, 2012
Thursday, November 1, 2012PrintSubscribe
URL Parameters

Data views on the page can detect and use certain parameters specified in the URL in the address bar of the web browser.

Filter By Field

The picture below shows an unfiltered list of customers.

Unfiltered list of customers.

A URL parameter will act as a filter for any data view on the page if the filter name matches to the name of a data field in the view. Data rows with field values unequal to the filter value will be eliminated from the data view.

For example, the following parameter will show only customers that reside in the country of “Belgium”.

Parameter Value
Country Belgium

http://demo.codeontime.com/Northwind/Pages/Customers.aspx?Country=Belgium

Customers grid view with a field filtered. The filtered field has been hidden.

The data view will hide the filtered column to prevent display of duplicate values.  The column can be shown using the “_display” parameter.

Parameter Value
Country Belgium
_display Country

http://demo.codeontime.com/Northwind/Pages/Customers.aspx?Country=Belgium&_display=Country

The filtered field has been displayed with the URL parameter 'display'.

Any combination of filters can be applied using URL parameters. Multiple fields can be listed in a comma-separated list for the “_display” parameter.

Parameter Value
Country Belgium
City Bruxelles
_display Country,City

http://demo.codeontime.com/Northwind/Pages/Customers.aspx?Country=Belgium&City=Bruxelles&_display=Country,City

Customers grid view with two filters applyed using URL parameters.

Select Record

A record can be selected using URL parameters that specify the “Select” command, a command argument to specify the view, and the primary key of the record. The specified field will be hidden on the form. When the _commandName and _commandArgument parameters are used, all controllers will perform the action unless the controller is specified using “_controller”.

Parameter Value
_commandName Select
_commandArgument editForm1
ProductID 1
_controller Products

http://demo.codeontime.com/Northwind/Pages/Products.aspx?_commandName=Select&_commandArgument=editForm1&ProductID=1&_controller=Products

URL parameters used to select a record in edit form.

Edit Record

A record can be edited with URL parameters similar to selecting a record. The only difference is the use of “Edit” command name instead of “Select”.

Parameter Value
_commandName Edit
_commandArgument editForm1
ProductID 1
_controller Products

http://demo.codeontime.com/Northwind/Pages/Products.aspx?_commandName=Edit&_commandArgument=editForm1&ProductID=1&_controller=Products

URL parameters to open a record in edit mode.

Note that successfully performing any action in form view will navigate to the previous page, instead of going back to the grid. This behavior makes it easier to build a logical workflow for users without having to write redirection logic.

Create New Record

URL parameters can be used to open the form in new mode by specifying the “New” command and correct view.

Parameter Value
_commandName New
_commandArgument createForm1
_controller Orders

http://demo.codeontime.com/Northwind/Pages/Orders.aspx?_commandName=New&_commandArgument=createForm1&_controller=Orders

New record form opened using URL parameters.

Initial values can be specified for each field. These fields will also be hidden by default, and require “_display” parameter to be shown.

Parameter Value
_commandName New
_commandArgument createForm1
_controller Orders
ShipName John
_display ShipName

http://demo.codeontime.com/Northwind/Pages/Orders.aspx?_commandName=New&_commandArgument=createForm1&_controller=Orders&ShipName=John&_display=ShipName

New record form opened with initial values specified in the URL.

When specifying an initial value for a lookup, both the lookup field and the alias field must be specified.

Parameter Value
_commandName New
_commandArgument createForm1
_controller Orders
ShipName John
CustomerID AROUT
CustomerCompanyName Around the Horn
_display ShipName,CustomerID,CustomerCompanyName

http://demo.codeontime.com/Northwind/Pages/Orders.aspx?_commandName=New&_commandArgument=createForm1&_controller=Orders&ShipName=John&CustomerID=AROUT&CustomerCompanyName=Around the Horn&_display=ShipName,CustomerID,CustomerCompanyName

New record form opened with initial values specified in the URL and foreign key fields specified.

Tuesday, October 30, 2012PrintSubscribe
Order Form Sample–Part 25

The calculation will analyze Order ID and current Freight value:

If the order total is greater than $100, then Freight will be $19.95 flat.
Otherwise, Freight is $3.95.

The Order Form page will allow overriding the Freight value.

In the Project Explorer, double-click on Orders / Fields / Freight (Decimal) field node.

Freight field node selected in Orders controller of the Project Explorer.

Change the Context Fields:

Property New Value
Context Fields OrderDetails,Freight

Press OK to save.

If you implemented an SQL Business Rule to calculate Subtotal and Total, continue reading the next section. If you implemented the C# / Visual Basic Business rule, skip the next section. You may also use JavaScript – skip the next two sections.

SQL Business Rule

In the Project Explorer, double-click on Orders / Business Rules / Calculate (Sql / Execute) node.

Calculate SQL Business Rule in Orders controller of Project Explorer.

Append the script:

Property New Value
Script
select @Subtotal = sum(unitprice * quantity * (1 - discount)) 
from [Order Details] 
where OrderID = @OrderID

set @Total = @Subtotal + @Freight

if (@Freight is not null or @Freight = 0 
    or @Freight = 3.95 or @Freight = 19.95)
begin
    if (@Total > 100)
        set @Freight = 19.95
    else 
        set @Freight = 3.95
end

Press OK to save.

Code Business Rule

Right-click on Orders / Business Rules / Calculate (Code / Execute) node, and select Edit Rule in Visual Studio.

Edit Rule in Visual Studio context menu option for a Calculate code business rule.

Append the following code.

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class OrdersBusinessRules : MyCompany.Data.BusinessRules
    {

        [Rule("r101")]
        public void r101Implementation(
                    int? orderID,
                    string customerID,
                    string customerCompanyName,
                    int? employeeID,
                    string employeeLastName,
                    DateTime? orderDate,
                    DateTime? requiredDate,
                    DateTime? shippedDate,
                    int? shipVia,
                    string shipViaCompanyName,
                    decimal? freight,
                    string shipName,
                    string shipAddress,
                    string shipCity,
                    string shipRegion,
                    string shipPostalCode,
                    string shipCountry,
                    decimal? subtotal)
        {
            object total = null;
            using (SqlText calc = new SqlText(@"select sum(unitprice * 
                    quantity * (1 - discount)) from 
                    [Order Details] where OrderID= @OrderID"))
            {
                calc.AddParameter("@OrderID", orderID);
                total = calc.ExecuteScalar();
            }

            if (DBNull.Value.Equals(total))
            {
                UpdateFieldValue("Subtotal", 0);
                UpdateFieldValue("Total", 0);
            }
            else
            {
                UpdateFieldValue("Subtotal", Convert.ToDecimal(total));
                UpdateFieldValue("Total", Convert.ToDecimal(total) + freight);
            }

            if (!freight.HasValue || freight.Value == 0 ||
            freight.Value == 3.95m || freight.Value == 19.95m)
                if (Convert.ToDecimal(total) > 100)
                    UpdateFieldValue("Freight", 19.95);
                else
                    UpdateFieldValue("Freight", 3.95);
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules

    Partial Public Class OrdersBusinessRules
        Inherits MyCompany.Data.BusinessRules

        <Rule("r101")> _
        Public Sub r101Implementation( _
                    ByVal orderID As Nullable(Of Integer), _
                    ByVal customerID As String, _
                    ByVal customerCompanyName As String, _
                    ByVal employeeID As Nullable(Of Integer), _
                    ByVal employeeLastName As String, _
                    ByVal orderDate As Nullable(Of DateTime), _
                    ByVal requiredDate As Nullable(Of DateTime), _
                    ByVal shippedDate As Nullable(Of DateTime), _
                    ByVal shipVia As Nullable(Of Integer), _
                    ByVal shipViaCompanyName As String, _
                    ByVal freight As Nullable(Of Decimal), _
                    ByVal shipName As String, _
                    ByVal shipAddress As String, _
                    ByVal shipCity As String, _
                    ByVal shipRegion As String, _
                    ByVal shipPostalCode As String, _
                    ByVal shipCountry As String, _
                    ByVal subtotal As Nullable(Of Decimal))
            Dim total As Object = Nothing
            Using calc As SqlText = New SqlText(
                    "select sum(unitprice * quantity * (1 - discount)) " +
                    "from [Order Details] where OrderID=@OrderID")
                calc.AddParameter("@OrderID", orderID)
                total = calc.ExecuteScalar()
            End Using
            If DBNull.Value.Equals(total) Then
                UpdateFieldValue("Subtotal", 0)
                UpdateFieldValue("Total", 0)
            Else
                UpdateFieldValue("Subtotal", Convert.ToDecimal(total))
                UpdateFieldValue("Total", Convert.ToDecimal(total) + freight)
            End If
            If Not freight.HasValue Or freight.Value = 0 Or
                freight.Value = 3.95 Or freight.Value = 19.95 Then
                If total >= 100 Then
                    UpdateFieldValue("Freight", 19.95)
                Else
                    UpdateFieldValue("Freight", 3.95)
                End If
            End If
        End Sub
    End Class
End Namespace

Save the file.

JavaScript Business Rule

Double-click on Orders / Business Rules / Calculate (JavaScript / After) node.

Calculate JavaScript Business Rule in Orders controller of Project Explorer.

Append the following:

Property New Value
Script
[Total] = [Subtotal] + [Freight];


if ([Freight] || [Freight] == 0 || 
    [Freight] == 3.95 || [Freight] == 19.95)
{
    if ([Total] > 100)
    {
        [Freight] = 19.95;
    }
    else 
    {
        [Freight] = 3.95;
    }
}

Press OK to save.

Viewing the Results

On the toolbar, press Browse. Edit an order, and change the Freight to “0”. When you tab away from the field, the freight will be recalculated.

When Freight is cleared and Total is below $100, freight is calculated to be $3.95.

If you change the order details so that the Subtotal is greater than $100, you will see Freight be recalculated to $19.95.

When Freight is cleared and Total is above $100, freight is calculated to be $19.95.

Tuesday, October 30, 2012PrintSubscribe
Order Form Sample–Part 24

Currently, the new fields Total and Subtotal do not allow sorting or filtering. You can see this on the grid of Order Form – the Total column does not have a dropdown available, and the field is not displayed as an option in the advanced search bar.

'Total' field in Order Form is not searchable or filterable.

Let’s enable sorting and filtering for these two fields. Switch back to the Project Explorer, and double-click on Orders / Fields / Subtotal* (Currency, read-only).

Subtotal field in the Orders controller of the Project Explorer.

Change the following settings:

Property New Value
Allow Query-by-Example true
Allow Sorting true

Press OK to save the field. Now, double-click on Total field node.

Total field in the Orders controller of the Project Explorer.

Make the same changes:

Property New Value
Allow Query-by-Example true
Allow Sorting true

Save the field, and regenerate the application. On the Order Form page, you can see that the Subtotal and Total fields are now available as options on the advanced search bar.

Subtotal and Total available as options on the advanced search bar.

Both columns also have sorting and filtering options available on the column header dropdown.

Subtotal and Total column header dropdowns are now enabled.