Data Controllers / Fields

  Code Formula

Table of Contents
Data Controllers / FieldsPrint||
Code Formula

The Code Formula field is an expression in the language of your project (C# or Visual Basic) that calculates the value of the field every time the row values are changed in response to Calculate action.

Let’s add an Extended Price field in Order Details that will calculate the extended price of the order item using Unit Price, Quantity, and Discount.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab, right-click on OrderDetails / Fields node, and select New Field option.

New Field for OrderDetails controller.

Give this field the following settings:

Property Value
Name ExtendedPrice
Type Currency
The value of this field is calculated by a business rule expression. True
Code Formula
Convert.ToDecimal(unitPrice) * 
    Convert.ToDecimal(quantity) * 
    (1 - Convert.ToDecimal(discount))
Label Extended Price
Values of this field cannot be edited True
Data Format String c
Context Fields ProductID, UnitPrice, Quantity, Discount

Press OK to save the field.

At the top of the Project Browser window, switch to the Data Fields tab. Create a new data field with the following configuration:

Property Value
View createForm1
Category New Order Details

Press OK to save.

New ExtendedPrice field with data field in createForm1.

On the toolbar, press Browse button. Navigate to the Order Details page, and create a new record. Specify a Unit Price, Quantity, and Discount, and the Extended Price will be calculated when you press Tab or click outside of the changed field.

New Order Details form with a calculated Extended Price.

If you change any of the field values and shift focus to another field, the Extended Price will refresh.

When a value is changed in the other fields, Extended Price value will be recalculated.

The code generator automatically creates a business rule file using the Code Formula expression. The resulting file can be seen below.

C#:

using System;
using MyCompany.Data;

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

        [ControllerAction("OrderDetails", "Calculate", "ExtendedPrice")]
        public void CalculateOrderDetails(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("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
        
        <ControllerAction("OrderDetails", "Calculate", "ExtendedPrice")> _
        Public Sub CalculateOrderDetails(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("ExtendedPrice",
                Convert.ToDecimal(unitPrice) *
                Convert.ToDecimal(quantity) *
                (1 - Convert.ToDecimal(discount)))
        End Sub
    End Class
End Namespace