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
Sunday, October 28, 2012PrintSubscribe
Order Form Sample–Part 22

The Subtotal field is now present in the application. The field does not reflect changes when new order items are entered. We will add a business rule to the Orders controller to calculate the subtotal.

In the Project Explorer, switch to Controllers tab. Double-click on Orders / Fields / Subtotal node.

Subtotal field node under Orders controller in the Project Explorer.

Change the following properties:

Property New Value
The value of this field is calculated by a business rule expression true
Context Fields OrderDetails

Press OK to save.

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

New Business Rule context menu option for Orders controller.

The business rule can be implemented using SQL or C# / Visual Basic.

SQL Business Rule

Assign these values:

Property Value
Type SQL
Command Name Calculate
Phase Execute
Script
select @Subtotal = sum(unitprice * quantity * (1 - discount)) 
from [Order Details] 
where OrderID = @OrderID

Press OK to save the business rule.

Code Business Rule

Assign the following values:

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

Press OK to save the business rule.

On the toolbar, press Browse. The business rule placeholder file will be created.

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

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

The rule file will open in Visual Studio. Replace the body of the rule with 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)
        {
            using (SqlText calc = new SqlText(@"select sum(unitprice * 
                    quantity * (1 - discount)) from 
                    [Order Details] where OrderID= @OrderID"))
            {
                calc.AddParameter("@OrderID", orderID);
                object total = calc.ExecuteScalar();
                if (DBNull.Value.Equals(total))
                    UpdateFieldValue("Subtotal", 0);
                else
                    UpdateFieldValue("Subtotal", Convert.ToDecimal(total));
            }

        }
    }
}

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))
            Using calc As SqlText = New SqlText(
                    "select sum(unitprice * quantity * (1 - discount)) " +
                    "from [Order Details] where OrderID=@OrderID")
                calc.AddParameter("@OrderID", orderID)
                Dim total As Object = calc.ExecuteScalar()
                If DBNull.Value.Equals(total) Then
                    UpdateFieldValue("Subtotal", 0)
                Else
                    UpdateFieldValue("Subtotal", Convert.ToDecimal(total))
                End If
            End Using

        End Sub
    End Class
End Namespace

This function uses SqlText utility class to create an instance of a query connected to the project’s database.
This simple query selects a sum of UnitPrice multiplied by Quantity multiplied by one minus the
Discount.

Note that SqlText utility class is generated as a part of the code base of your application. It uses the
default database connection string and ADO.NET to execute the query.

Viewing the Results

On the toolbar, press Browse. Navigate to the Order Form page, and select an order. Note the value of Subtotal field.

Orders form with a subtotal value.

Change one of the values in an order detail. The Subtotal will be updated to reflect the changes.

If one of the order details is changed, the subtotal will be updated to reflect the changes.

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 17

Let’s assign default values to fields Quantity and Discount of a new order detail record. These fields already have server defaults that are added when the order detail is saved to the database. It would be better to have these defaults displayed to the user before insertion, and have Discount formatted as percentage.

There are multiple ways of assigning a default value to the field. The following sections will describe each method.

SQL Business Rule

Switch to the Project Designer, and right-click on OrderDetails / Business Rules node. Select New Business Rule option.

New Business Rule context menu option for OrderDetails controller.

Assign the following values:

Property Value
Type SQL
Command Name New
Phase Execute
Script
set @Quantity = 1
set @Discount = 0

Press OK to save. 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 Quantity and Discount fields will be populated with default values.

New Order Details form with default values for Quantity and Discount.

Code Business Rule

The Quantity and Discount fields can also be assigned defaults using C#or Visual Basic.

If you have created the SQL business rule in the previous section, delete it now.

Delete context menu option for the SQL business rule in Order Details controller.

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

New Business Rule context menu option for OrderDetails controller.

Assign the following values:

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

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

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

Context menu option to edit the code business rule in Visual Studio.

The file will open in Visual Studio. Replace the body of the predefined business rule method with the following:

C#:

using System;
using MyCompany.Data;

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

        [Rule("r100")]
        public void r100Implementation(int? orderID, 
            string orderCustomerID, 
            string orderCustomerCompanyName, 
            string orderEmployeeLastName, 
            string orderShipViaCompanyName, 
            int? productID, 
            string productProductName, 
            string productCategoryCategoryName, 
            string productSupplierCompanyName, 
            decimal? unitPrice, 
            short? quantity, 
            float? discount)
        {
            UpdateFieldValue("Quantity", 1);
            UpdateFieldValue("Discount", 0);
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules
    
    Partial Public Class OrderDetailsBusinessRules
        Inherits MyCompany.Data.BusinessRules
        
        <Rule("r100")> _
        Public Sub r100Implementation(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))
            UpdateFieldValue("Quantity", 1)
            UpdateFieldValue("Discount", 0)
        End Sub
    End Class
End Namespace

Save the file. The default values will function as described earlier when an order detail record is created.

JavaScript Business Rule

The third method of implementation is by using JavaScript.

If you have created the SQL or Code business rules described above, delete them now.

Delete context menu option for the code business rule in OrderDetails controller.

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

New Business Rule context menu option for OrderDetails controller.

Assign the following values:

Property Value
Type JavaScript
Command Name New
Phase After
Script
[Quantity] = 0;
[Discount] = 1;

Press OK to save. If you browse the application and create a new order detail record, the Quantity and Discount fields will be assigned default values as described earlier.

Formatting Discount as Percentage

In the Project Explorer, double-click on OrderDetails / Fields / Discount node.

Discount field node in OrderDetails controller in the Project Explorer of Code On Time web application Designer.

Change the Data Format String property:

Property New Value
Data Format String p

Press OK to save the field, and regenerate the project. Navigate to the Order Form page. Select an order, and create a new order detail. Select a product for the order detail. Discount field is now formatted as a percentage (0.00%).

Discount field is now formatted as a percentage.