Blog: Posts from October, 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 October, 2012
Friday, October 26, 2012PrintSubscribe
Order Form Sample–Part 20

The Order Details grid view displays several unnecessary reference fields, such as Order Customer Company Name, Order Employee Last Name, and Order Ship Via Company Name. We will get rid of these redundant fields. Let’s also display the average Unit Price, total Quantity, average Discount, and total sum of Extended Price at the bottom of the grid.

Order Form details for a selected order. The order details grid view below contains redundant fields.

In the Project Explorer, expand to Order Form / c100 / dv101 / grid1 node. Highlight the data fields OrderCustomerCompanyName, OrderEmployeeLastName, and OrderShipViaCompanyName. Right-click and press Delete.

Deleting three data fields from 'grid1' view of OrderDetails controller.

Now that the redundant data fields have been removed, let’s assign aggregates. Double-click on Order Details / Views / grid1 / UnitPrice.

UnitPrice data field node in 'grid1' view of OrderDetails controller.

Change the Aggregate Function property:

Property New Value
Aggregate Function Average

Press OK to save the data field.

Next, double-click on Quantity data field.

Quantity data field node in 'grid1' view of OrderDetails controller.

Change the following value:

Property New Value
Aggregate Function Sum

Save the data field, and double-click on Discount.

Discount data field node in 'grid1' view of OrderDetails controller.

Change Aggregate Function to “Average”.

Property New Value
Aggregate Function Average

Press OK, and double-click on ExtendedPrice.

ExtendedPrice data field node in 'grid1' view of OrderDetails controller.

Change Aggregate Function to “Sum”.

Property New Value
Aggregate Function Sum

Press OK to save Extended Price data field.

Generate the application, and navigate to Order Form page. Select any order. You will see that the list of order details will not display redundant order information, and displays aggregates at the bottom of the grid.

Order Form page with details of an order displayed. The order details grid view now displays less redundant data fields as well as several averages and sums.

Thursday, October 25, 2012PrintSubscribe
Order Form Sample–Part 19

When you create a new order detail, the Extended Price field will not be calculated and will only display N/A until you save the record.

The Extended Price field is not being updated when field values are changed.

Let’s make the field automatically update and provide instantaneous feedback to the user.

Switch back to the Project Designer, and double-click on OrderDetails / Fields / ExtendedPrice node.

Change the following settings:

Property Value
The value of this field is calculated by a business rule expression True
Context Fields ProductID, UnitPrice, Quantity, Discount

Press OK to save the field.

Right-click on OrderDetails / Business Rules node, and press New Business Rule.

New Business Rule context menu option for OrderDetails controller.

The field can be updated using an SQL, Code or JavaScript business rule. Pick one of the following three implementations.

SQL Business Rule

Assign the following values:

Property Value
Type SQL
Command Name Calculate
Phase Execute
Script
set @ExtendedPrice = @UnitPrice * @Quantity * (1 - @Discount)

Press OK to save.

Code Business Rule

Assign the following values:

Property Value
Type C# / Visual Basic
Command Name Calculate
Phase Execute

Press OK to save. On the toolbar, press Browse to generate the web app and create the business rule file.

When complete, right-click on OrderDetails / Business Rules / Calculate (Code / Execute) – r101 business rule node, and press Edit Rule in Visual Studio.

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

The file will be opened in Visual Studio. Replace the body of the rule with the following implementation:

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class OrderDetailsBusinessRules : MyCompany.Data.BusinessRules
    {
        
        [Rule("r101")]
        public void r101Implementation(int? orderID, 
            string orderCustomerID, 
            string orderCustomerCompanyName, 
            string orderEmployeeLastName, 
            string orderShipViaCompanyName, 
            int? productID, 
            string productProductName, 
            string productCategoryCategoryName, 
            string productSupplierCompanyName, 
            decimal? unitPrice, 
            short? quantity, 
            float? discount, 
            decimal? extendedPrice)
        {
            UpdateFieldValue("ExtendedPrice", 
                Convert.ToDecimal(unitPrice) * Convert.ToDecimal(quantity) * 
                (1 - Convert.ToDecimal(discount)));
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules

    Partial Public Class OrderDetailsBusinessRules
        Inherits MyCompany.Data.BusinessRules

        <Rule("r101")> _
        Public Sub r101Implementation(ByVal orderID As Nullable(Of Integer),
                                      ByVal orderCustomerID As String,
                                      ByVal orderCustomerCompanyName As String,
                                      ByVal orderEmployeeLastName As String,
                                      ByVal orderShipViaCompanyName As String,
                                      ByVal productID As Nullable(Of Integer),
                                      ByVal productProductName As String,
                                      ByVal productCategoryCategoryName As String,
                                      ByVal productSupplierCompanyName As String,
                                      ByVal unitPrice As Nullable(Of Decimal),
                                      ByVal quantity As Nullable(Of Short),
                                      ByVal discount As Nullable(Of Single),
                                      ByVal extendedPrice As Nullable(Of Decimal))
            UpdateFieldValue("ExtendedPrice",
                Convert.ToDecimal(unitPrice) * Convert.ToDecimal(quantity) *
                (1 - Convert.ToDecimal(discount)))
        End Sub
    End Class
End Namespace

Save the file.

JavaScript Business Rule

Assign the following values:

Property Value
Type JavaScript
Command Name Calculate
Phase Execute
Script
[ExtendedPrice] = [UnitPrice] * [Quantity] * (1 - [Discount]);
this.preventDefault();

Press OK to save the business rule.

Viewing the Results

On the toolbar, press Browse.

Navigate to the Order Form page, and select an order. Create a new order detail, and select a product. The Extended Price will be calculated using the default values.

New Order Details screen with a selected product and default values. The Extended Price has been calculated.

If you change any of the fields, the Extended Price will be recalculated when the user changes focus from the changed field.

Quantity has been changed and focus was shifted to the Discount field. Extended Price has been recalculated.

Thursday, October 25, 2012PrintSubscribe
Order Form Sample–Part 18

Let’s add an Extended Price field to show the final price of each line item in the order. This field will multiply price by quantity, and factor in the discount.

Switch to the Project Explorer, and activate the Controllers tab. Expand OrderDetails, and right-click on Fields. Select New Field option.

Create New Field option for 'OrderDetails' controller in Code On Time Designer

For the new field, enter the following settings:

Property Value
Name ExtendedPrice
Type Currency
The value of this field is computed at run-time by SQL Expression True
SQL Formula
OrderDetails.UnitPrice * OrderDetails.Quantity * (1 - OrderDetails.Discount)
Label Extended Price
Values of this field cannot be edited True
Data Format String c

Press OK to save the field. The OrderDetails alias used in the SQL Expression field above is referring to “command1” of the Order Details controller. The text of this command can be found at Order Details / Commands / command1 node.

Command1 of OrderDetails controller node in the Project Explorer.

Your application will incorporate the SQL Formula in the SELECT statements composed at runtime. The statement will be equivalent to the following simplified example.

select *, 
    OrderDetails.UnitPrice * OrderDetails.Quantity * 
    (1 - OrderDetails.Discount) ExtendedPrice
from "Order Details" OrderDetails

This is the output produced in SQL Management Studio if you try executing the simplified statement.

Result of 'SQL Formula' incorporated in SELECT statement

To make sure that the field will be displayed in the application pages, we’ll bind the field to the data view using data fields.

In the Project Explorer, drop OrderDetails / Fields / ExtendedPrice* (Currency, read-only) field node on OrderDetails / Views / grid1 view node.

Dropping ExtendedPrice field node onto 'grid1' view node.     ExtendedPrice field binding created in view 'grid1'.

Again, drop the field node onto OrderDetails / Views / editForm1 / c1 – Order Details category node.

Dropping ExtendedPrice field node onto 'c1' category node.     ExtendedPrice field binding created in view 'editForm1'.

Finally, drop the field node onto OrderDetails / Views / createForm view node.

Dropping ExtendedPrice field node onto 'createForm1' view node.     ExtendedPrice field binding created in view 'createForm1'.

On the toolbar, press Browse, and navigate to the Order Form page. Select an order from the list – the list of order details will have an Extended Price column.

Extended Price column available in Order Details grid view.