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
Thursday, November 29, 2012PrintSubscribe
Calculating Read-Only Fields with C# and Visual Basic

Let’s create a calculated field in the Employees controller that will combine First Name and Last Name fields.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Employees / Fields node, and press New Field option.

New Field context menu option for Employees controller in Code On Time web application generator.

Assign the following properties:

Property Value
Name FullName
Type String
Length 80
Allow Null Values true
The value is calculated by a business rule expression true
Label Full Name
Values of this field cannot be edited true

Press OK to save.

In the Project Explorer, drag Employees / Fields / FullName field node and drop it onto Employees / Views / createForm1 to add a data field.

Dropping FullName field node onto 'createForm1' view.     FullName data field created in 'createForm1' view.

Right-click on Employees / Fields / FullName node, and press Add Code Converter.

Add Code Converter context menu option on FullName field node in the Project Designer.

Double-click on Employees / Fields / FullName node, and change the Context Fields property:

Property Value
Context Fields FirstName, LastName

On the toolbar, press Browse to generate the web application and code business rule.

Right-click on Employees / Business Rules / FullName_Convertor and press Edit Rule in Visual Studio.

Edit Rule in Visual Studio context menu option for 'FullName_Converter' business rule node.

The business rule file will open in Visual Studio. Replace the default code with the following:

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class EmployeesBusinessRules : MyCompany.Data.BusinessRules
    {
        
        /// <summary>
        /// Rule "FullName_Converter" implementation:
        /// This method will execute in any view before an action
        /// with a command name that matches "Calculate|Insert|Update".
        /// </summary>
        [Rule("r100")]
        public void r100Implementation(
                    int? employeeID, 
                    string lastName, 
                    string firstName, 
                    string title, 
                    string titleOfCourtesy, 
                    DateTime? birthDate, 
                    DateTime? hireDate, 
                    string address, 
                    string city, 
                    string region, 
                    string postalCode, 
                    string country, 
                    string homePhone, 
                    string extension, 
                    string notes, 
                    int? reportsTo, 
                    string reportsToLastName, 
                    string photoPath, 
                    string fullName)
        {
            if (!(String.IsNullOrEmpty(firstName)) && !(String.IsNullOrEmpty(lastName)))
                UpdateFieldValue("FullName", firstName + ' ' + lastName);
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules
    
    Partial Public Class EmployeesBusinessRules
        Inherits MyCompany.Data.BusinessRules
        
        ''' <summary>
        ''' Rule "FullName_Converter" implementation:
        ''' This method will execute in any view before an action
        ''' with a command name that matches "Calculate|Insert|Update".
        ''' </summary>
        <Rule("r100")>  _
        Public Sub r100Implementation( _
                    ByVal employeeID As Nullable(Of Integer),  _
                    ByVal lastName As String,  _
                    ByVal firstName As String,  _
                    ByVal title As String,  _
                    ByVal titleOfCourtesy As String,  _
                    ByVal birthDate As Nullable(Of DateTime),  _
                    ByVal hireDate As Nullable(Of DateTime),  _
                    ByVal address As String,  _
                    ByVal city As String,  _
                    ByVal region As String,  _
                    ByVal postalCode As String,  _
                    ByVal country As String,  _
                    ByVal homePhone As String,  _
                    ByVal extension As String,  _
                    ByVal notes As String,  _
                    ByVal reportsTo As Nullable(Of Integer),  _
                    ByVal reportsToLastName As String,  _
                    ByVal photoPath As String,  _
                    ByVal fullName As String)
            If (Not (String.IsNullOrEmpty(firstName)) AndAlso Not (String.IsNullOrEmpty(lastName))) Then
                UpdateFieldValue("FullName", firstName + " " + lastName)
            End If
        End Sub
    End Class
End Namespace

Save the file.

Switch back to the web application generator. On the toolbar, press Browse.

Navigate to the Employees page, and create a new employee. Type a value for Last Name and First Name.

Typing in First and Last Name into each respetive field on the New Employees form.

The Full Name field will be updated when the user presses Tab or shifts focus away from the field.

Tabbing away from First Name will update the Full Name calculated field.

Thursday, November 29, 2012PrintSubscribe
Calculating Read-Only Fields with SQL

Let’s create a Full Name calculated field in the Employees controller. This field will display a concatenation of First Name and Last Name field values.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Employees / Fields node, and press New Field.

New Field context menu option in Code On Time web application Project Explorer.

Give this field the following settings:

Property Value
Name FullName
Type String
Length 80
Allow Null Values true
The value is calculated by a business rule expression true
Label Full Name
Values of this field cannot be edited true

Press OK to save the field.

In the Project Explorer, drag Employees / Fields / FullName (String(80), read-only) field node and drop it onto Employees / Views / createForm1 to create a data field.

Dropping Fullname field node onto 'createForm1' view.      FullName data field has been created in 'createForm1' view.

Right-click on Employees / Fields / FullName (String(80), read-only) node, and press Add SQL Converter.

Add SQL Converter context menu option in the Project Explorer.

Double-click on Employees / Fields / FullName node.

FullName field node in Employees controller.

Change the Context Fields property:

Property Value
Context Fields FirstName, LastName

Press OK to save the field. Double-click on Employees / Business Rules / FullName_Converter – Calculate|Insert|Update (Sql / Before) - r100 node.

'FullName_Converter' business rule node in Employees controller in the Project Explorer.

Replace the default script with the following:

Property New Value
Script
if @FirstName is not null and @LastName is not null
begin
    set @FullName = @FirstName + ' ' + @LastName
end

Press OK to save the business rule. On the Project Designer toolbar, press Browse.

Navigate to the Employees page, and create a new employee. Enter values in First Name and Last Name fields.

Values entered in LastName and FirstName fields.

When the user shifts focus away from the field, Full Name will be calculated.

When user shifts focus, the FullName field is calculated.

Thursday, November 29, 2012PrintSubscribe
Multi-Field Copy with a C# / Visual Basic Business Rule

It may be necessary to copy similar values from a lookup to a record.

For simple copy operations, the Copy property can be used. For more complex operations, a business rule can be implemented. Let’s implement a C# / Visual Basic business rule to copy shipping information from a customer to an order in a sample Northwind web application.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab and double-click on Orders / Fields / ShipName node.

ShipName field in the Orders controller in Code On Time web application designer.

Change the following propeties.

Property Value
The value of the field is calculated by a business rule expression true
Context Fields CustomerID

Press OK to save the field.

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

New Business Rule context menu option for Orders controller in the Project Explorer.

Give this rule the following properties.

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

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

When complete, right-click on Orders / Business Rules / New|Calculate node, and press Edit Rule in Visual Studio.

Edit Rule in Visual Studio context menu option for a business rule will open the file in Visual Studio.

The business rule handler will open in Visual Studio. Replace the default implementation with the following:

C#:

using System;
using MyCompany.Data;

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

        /// <summary>
        /// This method will execute in any view for an action
        /// with a command name that matches "New|Calculate".
        /// </summary>
        [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)
        {
            // This is the placeholder for method implementation.
            if (!String.IsNullOrEmpty(customerID))
                using (SqlText findCustomer = new SqlText(
                    "select " +
                    "    ContactName, " +
                    "    Address, " +
                    "    City, " +
                    "    Region, " +
                    "    PostalCode, " +
                    "    Country " +
                    "from Customers " +
                    "where  " +
                    "    CustomerID = @CustomerID "))
                {
                    findCustomer.AddParameter("@CustomerID", customerID);
                    if (findCustomer.Read())
                    {
                        UpdateFieldValue("ShipName", findCustomer["ContactName"]);
                        UpdateFieldValue("ShipAddress", findCustomer["Address"]);
                        UpdateFieldValue("ShipCity", findCustomer["City"]);
                        UpdateFieldValue("ShipRegion", findCustomer["Region"]);
                        UpdateFieldValue("ShipPostalCode", findCustomer["PostalCode"]);
                        UpdateFieldValue("ShipCountry", findCustomer["Country"]);
                    }
                }
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules

    Partial Public Class OrdersBusinessRules
        Inherits MyCompany.Data.BusinessRules

        ''' <summary>
        ''' This method will execute in any view for an action
        ''' with a command name that matches "New|Calculate".
        ''' </summary>
        <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)
            'This is the placeholder for method implementation.
            If Not String.IsNullOrEmpty(customerID) Then
                Using findCustomer As SqlText = New SqlText(
                    "select " +
                    "    ContactName, " +
                    "    Address, " +
                    "    City, " +
                    "    Region, " +
                    "    PostalCode, " +
                    "    Country " +
                    "from Customers " +
                    "where  " +
                    "    CustomerID = @CustomerID ")
                    findCustomer.AddParameter("@CustomerID", customerID)
                    If (findCustomer.Read()) Then
                        UpdateFieldValue("ShipName", findCustomer("ContactName"))
                        UpdateFieldValue("ShipAddress", findCustomer("Address"))
                        UpdateFieldValue("ShipCity", findCustomer("City"))
                        UpdateFieldValue("ShipRegion", findCustomer("Region"))
                        UpdateFieldValue("ShipPostalCode", findCustomer("PostalCode"))
                        UpdateFieldValue("ShipCountry", findCustomer("Country"))
                    End If
                End Using
            End If
        End Sub
    End Class
End Namespace

Save the file. Switch back to the Project Designer, and press Browse on the toolbar.

Navigate to Customers page. Select a customer, and a list of orders will appear underneath. On the action bar, press New Orders. The shipping information will be populated using the customer information.

On the New Orders form, the shipping information has been populated using the values from the customer.

Navigate to the Orders page. On the action bar, press New Orders. The shipping fields will be empty.

New Orders form has no customer selected, so no shipping information is populated.

Select a customer using the Customer Company Name lookup. The shipping information will be populated.

Once a customer is selected, the shipping information is copied.