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.
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.
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.
If you change any of the field values and shift focus to another field, the Extended Price will refresh.
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