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
Wednesday, January 2, 2013PrintSubscribe
Duplicating a Record with SQL Business Rule

The default Duplicate action available in Code On Time web apps performs a client-side duplication. When the action is activated, the create form will be opened and the fields will be populated using values from the duplicated record. The new record will only be saved to the database when the user presses OK.

Sometimes it is necessary for more complex operations to be performed when a record is duplicated. For example, when a master record is duplicated, the child records should be duplicated as well. This will require a server-side duplication. A custom action will be implemented – when the user activates this action, the master and detail records will be copied and saved to the server. The order will then be displayed in the edit form.

Let’s implement a master-detail duplication with Orders and Order Details controllers in the Northwind database.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Orders / Actions / ag1 (Grid) node, and press New Action.

Creating a new action in Orders controller.

Assign the following values:

Property Value
Command Name Custom
Command Argument DuplicateOrder
Header Text Duplicate Order
Confirmation Are you sure you want to duplicate this order?

Press OK to save the action. Right-click on Orders / Business Rules node, and press New Business Rule.

image

Use the following:

Property Value
Type SQL
Command Name Custom
Command Argument DuplicateOrder
Phase Execute

In the Script property, enter the following:

-- duplicate the order
insert into Orders (CustomerID, EmployeeID, OrderDate, RequiredDate, 
                    ShippedDate, ShipVia, Freight, ShipName, ShipAddress, 
                    ShipCity, ShipRegion, ShipPostalCode, ShipCountry)
select CustomerID, EmployeeID, getdate(), RequiredDate, null, ShipVia, 
        Freight, ShipName, ShipAddress, ShipCity, ShipRegion, 
        ShipPostalCode, ShipCountry
from Orders
where OrderID = @OrderID

-- find ID of duplicated order
declare @NewOrderID int;
select @NewOrderID = @@IDENTITY;

-- duplicate order details
insert into "Order Details" (OrderID, ProductID, UnitPrice, 
                            Quantity, Discount)
select @NewOrderID, ProductID, UnitPrice, Quantity, Discount
from "Order Details"
where OrderID = @OrderID

-- open edit form for duplicate order
set @Result_NavigateUrl = 'Orders.aspx?OrderID=' + cast(@NewOrderID as nvarchar)
                          + '&_controller=Orders&_commandName=Edit'
                          + '&_commandArgument=editForm1'

The business rule will first duplicate the order. The OrderDate will be assigned the current date, and RequiredDate will be set to null. Then, the ID of the new order will be acquired using the @@IDENTITY function. The order details will be duplicated using the new ID. Finally, the client library will be prompted to navigate to open the new order using URL parameters. Press OK to save the business rule. On the toolbar, press Browse.

Navigate to the Orders page. Using the context menu on a row, activate the Duplicate Order option.

Activating the context menu option 'Duplicate Order'.

The order and associated order details will be duplicated, and it will be displayed in the edit form.

Order duplicated and opened in the edit form.

Sunday, December 30, 2012PrintSubscribe
Changing Values on Edit

Client-side business rules allow changing the value of a field without having to save it to the database. This way, the user can either approve the value, change it, or leave the original data intact.

Let’s add 7 days to the Order Date of an order when a user starts editing.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Orders / Business Rules node, and press New Business Rule.

Creating a new business rule for Orders controller.

Assign the following values:

Property Value
Type JavaScript
Command Name Edit
Phase After
Script
var d = [OrderDate];
if (this.dataView().get_isEditing() && d != null) {
    d.setDate(d.getUTCDate() + 7);
    d.setHours(0);
    [OrderDate] = d;
}

The business rule will get the current date value of OrderDate, add 7 days, and assign the value.

Press OK to save. On the toolbar, press Browse. Navigate to the Orders page. Note the Order Date of a specific record.

Highlighting an order record and noting the Order Date.

Start editing the the record. The Order Date will be moved forward by 7 days from the original value.

When the order is edited, the Order Date is moved forward by 7 days.

If the user presses Cancel at this time, the Order Date will not be changed. If the user saves the record, the new value will be applied.

Order record with new order date.

Saturday, December 29, 2012PrintSubscribe
On-Demand Handler Property

The Products table in the Northwind database includes a foreign key reference to CategoryID column of Categories table. Code On Time generator adds the CategoryName field in the Products controller through automatic denormalization. In addition to the CategoryName field, let’s denormalize the Picture field in order to include it in the Products grid.

Start the web application generator. Click on the project name, and select Settings. Click on Business Logic Layer option. Switch to the Denormalization Map section, and paste in the following:

dbo.Products => dbo.Categories
Picture

Defining a Denormalization Field Map in the Project Wizard.

Press Finish to skip to the Summary page, and then press Refresh. Check the box next to Products controller, and continue to refresh the project.

Refreshing the Products controller.

On the Summary page, click on Design to bring up the Project Designer.

In the Project Explorer, switch to the Controllers tab. Double-click on Products / Fields / CategoryPicture (Byte[], read-only) field node.

Selecting 'CategoryPicture' field of Products controller.

Change the following values:

Property New Value
On Demand Handler CategoriesPicture

This will prompt the application framework to populate the field using the same handler that populates the Picture field in Categories controller. Press OK to save the field.

Drop Products / Fields / CategoryPicture (Byte[], read-only) field node onto Products / Views / grid1.

Dropping 'CategoryPicture' field node onto view 'grid1'.     Data field for 'CategoryPicture' instantiated in view 'grid1'.

On the toolbar, press Browse. Navigate to the Products page. The Category Picture column will now be populated with images.

Field 'Category Picture' is populated with pictures from the Categories table.