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, October 23, 2012PrintSubscribe
Order Details: Assign Default Values

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.

Saturday, October 20, 2012PrintSubscribe
Order Form Sample–Part 10

When creating a new order, the order date should default to the current date.

There are three types of business rules that can be used for this purpose. Choose any one of the suggested implementations below.

SQL Business Rule

Switch back to the Project Designer. In the Project Explorer, open the Controllers tab. Right-click on Orders / Business Rules node, and press New Business Rule option.

New Business Rule context menu option for Orders controller.

Specify the following values:

Property New Value
Type SQL
Command Name New
Phase Execute
Script
set @OrderDate = getdate()

Press OK to save the business rule. Press Browse in the top left corner, and wait for the page to load. Navigate to Order Form, and create a new order. Select a customer and employee. You will see that the current date has been inserted into the Order Date field.

Order Date has been populated with the current date.

Code Business Rule

C# or Visual Basic may be used as an alternative to SQL.

Switch back to the Project Designer.

If you have implemented the business rule above, then delete it. In the Project Explorer, right-click on Orders / Business Rules / New (SQL / Execute) – r100 node, and press Delete.

Deleting the SQL business rule.

Create a “code” business rule with the following properties:

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

Press OK to save.

Code business rules cannot be directly edited using the Project Designer, and do not exist until the project has been regenerated.

On the toolbar, press Browse to regenerate the project.

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

Edit Rule in Visual Studio context menu option available on the code business rule node in the Project Explorer.

The rule file will be opened in Visual Studio. The entire class definition and parameters of the business rule method are already defined. Replace the body of the rule with the UpdateFieldValue method:

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class OrdersBusinessRules : MyCompany.Data.BusinessRules
    {
        [Rule("r100")]
        public void r100Implementation(
                    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)
        {
            UpdateFieldValue("OrderDate", DateTime.Now);
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules

    Partial Public Class OrdersBusinessRules
        Inherits MyCompany.Data.BusinessRules

        <Rule("r100")> _
        Public Sub r100Implementation( _
                    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)
            UpdateFieldValue("OrderDate", DateTime.Now)
        End Sub
    End Class
End Namespace

Save the file. If you create a new order in the web application, the Order Date will be populated with the current date.

JavaScript Business Rule

Business rules can also be written in JavaScript if default values can be calculated entirely on the client.

If you created one of the above business rule implementations, delete it now.

Deleting the code business rule from the Orders controller.

Create another business rule with this configuration:

Property New Value
Type JavaScript
Command Name New
Phase After
Script
[OrderDate] = new Date();

Note that the business rule must execute after the command “New”, because the record is not instantiated on the client until after the command is executed by the application framework on the server.

Save the file. The business rule will work as shown in the illustration at the top.

Monday, October 8, 2012PrintSubscribe
Feature: Extending Apps With Build-in Application Server

Code On Time applications may include a built-in application server. The application server components of a generated app allow extending web apps with custom clients implemented on virtually any modern platform. The clients issue REST requests to the application server to perform CRUD operations when allowed by the web app configuration.

For example, one can create a static HTML page that allows submission of application data by anonymous users.

An HTML form configured to POST data to web app created with Code OnTime

A desktop application implemented as a Native Windows Client can browse and search data of a web app.

A native Windows Client allows searching and browsing product data managed by a web app created with Code On Time

A custom user control can be  jQuery-enabled to perform CRUD request to the web app.  This provides ultimate flexibility when implementing custom user interface.

A jQuery-enabled User Control can interact with the application server built-in the web app for ultimate flexibility when implementing custom user interface

The application sever supports cross-domain CRUD operations. This makes possible creating an entire data access layer with business rules and dynamic access control rules in the foundation of an application. The user interface of the app can be completely custom made and reside on different server if needed.