Web Application Generator

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
Web Application Generator
Monday, July 9, 2012PrintSubscribe
Feature: “Code” Business Rules

The application framework of each project is generated in C# or Visual Basic. The business rules engine of the framework takes care of executing SQL, Email, and JavaScript business rules in response to actions defined in the data controller. Naturally, developers can create business rules written in the programming language of the project to tap in the power of the business rules engine and vast Microsoft.NET library.

'Code' Business Rule defined in the data controller 'Customers'

For example, the “Code” business rule defined in the project configuration will result in the code file generated in the project output folders.

The code file with the implementation stub is automatically generated for each 'Code' Business Rule in the programming language of the project

The business rule file provides a method template linked to the data controller business rule with Rule attribute. The file will not be re-created during subsequent code generation sessions. Any modifications to the file will become a permanent extension of the application framework.

Let’s implement a validation business logic.  Note that the highlighted text indicates the conditional expression inserted in the automatically generated business rule method template.

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class CustomersBusinessRules : MyCompany.Data.BusinessRules
    {
        /// <summary>
        /// This method will execute in any view before an action
        /// with a command name that matches "Insert|Update|Delete".
        /// </summary>
        [Rule("r100")]
        public void r100Implementation(string customerID, string companyName,
            string contactName, string contactTitle, string address, string city,
            string region, string postalCode, string country, string phone, string fax)
        {
            // This is the placeholder for method implementation.
            if (country == "USA")
            {
                // tell the application framework to skip the execution of update, insert, or delete
                PreventDefault();
                // set the focus to the field "Country" and display an error message
                Result.Focus("Country",
                    "You are not authorized to {0}, " +
                    "if the Country is equal to \"USA\".",
                    Arguments.CommandName.ToLower());
                // show an additional information in the message bar at the top of the page
                Result.ShowMessage("Error trying to execute {0} command",
                    Arguments.CommandName);
            }
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules
    Partial Public Class CustomersBusinessRules
        Inherits MyCompany.Data.BusinessRules
        ''' <summary>
        ''' This method will execute in any view before an action
        ''' with a command name that matches "Insert|Update|Delete".
        ''' </summary>
        <Rule("r100")> _
        Public Sub r100Implementation(ByVal customerID As String, ByVal companyName As String,
            ByVal contactName As String, ByVal contactTitle As String, ByVal address As String,
            ByVal city As String, ByVal region As String, ByVal postalCode As String,
            ByVal country As String, ByVal phone As String, ByVal fax As String)
            ' This is the placeholder for method implementation.
            If (country = "USA") Then
                ' tell the application framework to skip the execution of update, insert, or delete
                PreventDefault()
                ' set the focus to the field "Country" and display an error message
                Result.Focus("Country",
                    "You are not authorized to {0}, " &
                    "if the Country is equal to ""USA"".",
                    Arguments.CommandName.ToLower())
                ' show an additional information in the message bar at the top of the page
                Result.ShowMessage("Error trying to execute {0} command",
                    Arguments.CommandName)
            End If
        End Sub
    End Class
End Namespace

The pattern of implementation is following closely the pattern of SQL and JavaScript business rules. Both of these alternatives are actually built on top of the same infrastructure demonstrated in this example.

The screenshot shows the “code” business rule in action.

Validation with C# / Visual Basic Business Rules in a web app created with Code On Time web application generator

Monday, July 9, 2012PrintSubscribe
Code Default

The Code Default property provides an expression written in C#/Visual Basic that evaluates to an initial field value of a new data row. Database tables frequently define default column expressions that will be evaluated by the database engine when a new record is persisted. From the user perspective, it is beneficial to see what exactly will be inserted in the column at the time when the user enters the field values instead of leaving the fields blank and relying on the database to fill in the blanks. The Code Default may provide a duplicate calculation that fulfills this need.

Default Values with C# / Visual Basic

The New Orders form has two date fields, Order Date and Required Date, that should have defaults when the form is first initialized.

New Orders form without any default values.

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

OrderDate field of Orders controller.

Change the Code Default:

Property New Value
Code Default DateTime.Now

Press OK to save. Double-click on Orders / Fields / RequiredDate node.

RequiredDate field of Orders controller.

Change the Code Default:

Property New Value
Code Default DateTime.Now.AddDays(7)

Press OK to save. On the Project Browser toolbar, press Browse button.

Navigate to the Orders page, and create a new record. The Order Date field will be populated with the current date. The Required Date field will be populated with the date seven days in the future.

New Orders form with default values for Order Date and Required Date fields.

This is how the code generator incorporates the code expression in the C#/Visual Basic business rules.

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class OrdersBusinessRules : MyCompany.Data.BusinessRules
    {
        
        [RowBuilder("Orders", RowKind.New)]
        public void BuildNewOrders()
        {
            UpdateFieldValue("OrderDate", DateTime.Now);
            UpdateFieldValue("RequiredDate", DateTime.Now.AddDays(7));
        }
    }
}
Visual Basic:
Imports MyCompany.Data

Namespace MyCompany.Rules
    
    Partial Public Class OrdersBusinessRules
        Inherits MyCompany.Data.BusinessRules
        
        <RowBuilder("Orders", RowKind.New)>  _
        Public Sub BuildNewOrders()
            UpdateFieldValue("OrderDate", DateTime.Now)
            UpdateFieldValue("RequiredDate", DateTime.Now.AddDays(7))
        End Sub
    End Class
End Namespace

A custom utility class can be implemented for complex calculations. A static or shared property or method of the class can be used in Code Default expressions similar to how System.DateTime class is used in the example.

Default Values with SQL Business Rules

Code Default permits simple default values. For a majority of situations or when a more complex default value calculation involving interactions with the database is required, SQL Business Rules provide a great alternative.

Switch back to the Project Designer. Double-click on Orders / Fields / OrderDate field node.

OrderDate field of Orders controller.

Clear the Code Default:

Property New Value
Code Default N/A

Save the field. Double-click on Orders / Fields / RequiredDate field node.

RequiredDate field of Orders controller.

Change the following properties:

Property New Value
Code Default N/A

Press OK to save the field. Right-click on Orders / Business Rules node, and select New Business Rule option.

image

Use the following configuration:

Property Value
Command Name New
Type SQL
Phase Execute
Script
set @OrderDate = GETDATE()
set @RequiredDate = DATEADD("d", 7, getdate())

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

Navigate to the Orders page, and create a new order. The correct date values will be presented as default values.

New Orders form with default values for Order Date and Required Date fields.

The business rule matching New command is automatically executed on the server and the values of parameters OrderDate and RequiredDate are transferred to the fields with the same name in a new row.

Monday, July 9, 2012PrintSubscribe
"Code” and “JavaScript” Business Rules, Inclusion and Exclusion of Pages From Menu

Code On Time release 6.0.0.30 includes the following new features and enhancements:

  • Developers can use designer to create “Code” business rules implemented in C#/Visual Basic. The application generator will create a file with the business rule implementation. The file will not be overwritten by subsequent code generation sessions. New application framework class RuleAttribute links the business rule to the code.
     
    'Code' Business Rules are now automatically generated in all projects types and all product editions
     
  • Sophisticated JavaScript Business Rules can now be used to implement complex validation and just-in-time correction of user input.
     
  • Project Explorer offers a new context menu option “Exclude From Menu” to hide the page from the navigation menu.
     
  • Project Explorer offers a new context menu option “Include in Menu” to show the page in
    the navigation menu.
     
  • New "View in Browser" action is available in Project Explorer in the context menu of pages.
  • Mandatory "radio button list" will require user to make a selection of an option when inserting or editing a record.
     
  • Read-Only fields are passed to the business rules when actions are executed in the views with the type other than the "form" view.
     
  • Virtualization node set now features IsEmpty property. The property value is 'true' if the node set is empty.
     
  • The chained calls to CreateAction will correctly create multiple actions.
     
  • Clicking on the "View Details" arrow icon in the lookup window will not close the lookup window.
     
  • Property AutoSelect when set to "true" for a lookup field will automatically activate the lookup on data entry if the field is blank.
     
  • Enhancements to the "focus" processing with business rules in form views.
     
  • Command Text is correctly saved in Designer.
     
  • The client library will validate argument values before executing Report action. This will ensure that "read-only" values passed as arguments of business rule methods.
     
  • DotNetNuke Factory uses cases-insensitive filter when publishing deployment files.
      
  • Property AquarimExtenderBase.ServicePath is now virtual. Class DataViewExtender is declared as "partial", which allows global overriding of the application service path.
      
  • "Confirmation" controllers are working correctly again. 
      
  • New page name entered in a camel notation will result in "pretty" path and title.
     
  • "Generate" and "Browse" actions will not crash if IIS Express is not install.
     
  • Browsing a page with a non-blank "External Url" property will open the default page of the app instead of trying to open a non-existing page with the name of the page node.
     
  • The issues with Auto Complete Anywhere is resolved.
     
  • The Generate/Browse bug in Designer when a node is not selected is fixed.