Blog: Posts from April, 2012

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
Posts from April, 2012
Wednesday, April 11, 2012PrintSubscribe
Changing Settings in an Existing Project

The Project Wizard allows you to change settings that will be applied to the entire application.

Settings can affect one of two things in the application – data controllers or pages. An example of a setting that affects the data controllers is enabling standard action column in all grid views. An example of a page setting is changing the page layout.

If you change any setting in the Wizard, then it is necessary to use the Refresh project action to have the changes reflected in the generated application.

However, changes will only be reflected in the project if the following two conditions are met:

  1. The page, user controls, or controller elements have not been changed in the Designer.
  2. The application and data controller baseline files have not been edited by hand.

If these conditions are not met, then the settings will only be applied to new pages and controllers added to the application at a later time. The verification of these conditions is performed by the application generator to prevent overwriting of project customization.

Consider the Layout setting, which affects the application pages. By default, the layout property is set to Classic. This will create a master view at the top of each page, and all child views in tabs underneath the master view.

Create a brand new Northwind sample application. As you go through the project wizard, leave the layout with the default property of Classic.

Layout page in Code On Time Project Wizard

To change the layout, select the project name on the start page of the web app generator, and choose Settings.

Settings option of a Code On Time web application

Click on the Layouts option.

Layouts page under Settings in Code On Time web application generator

Let’s change the default layout to Tabbed. This puts all master and child views on different tabs in a single page container.

Tabbed standard page layout enabled 

Press Finish to go to the Summary page, and click on Refresh. The layout option change only affects the pages, so just press the Refresh button.

Refresh screen for Northwind sample in Code On Time web application generator

Press OK to confirm the refresh, and proceed to generate the application.

The web application will open in your default web browser. The new tabbed layout will be implemented on all pages in the application.

Customers page with Tabbed Layout in Code On Time web application

Now, let’s add an action column to a select few controllers.

Switch back to the web application generator, select the project name, and click Settings. Navigate to the Features page, and switch to the Grid Properties section. Toggle the checkbox Enable standard action column in all grid views.

Features page of Code On Time Project Wizard with Standard Action Column property enabled

Press Finish, and on the summary page click Refresh. Check the box next to Orders and OrderDetails controllers. Press Refresh button at the bottom of the screen, and then press Yes to confirm the action.

Refreshing data controllers in a Code On Time web application

Click Generate, and wait for the web application to load in your web browser.

You can see that the Customers grid view has not been changed, as it was not included in the refresh.

Customers grid view without Action Column in Code On Time web application

If you switch to the Orders tab, you will see the new action column at work. Actions Edit and Delete are rendered in the first column of the grid view.

Orders grid view with Actions Column in Code On Time web application

Labels: Tutorials
Wednesday, April 11, 2012PrintSubscribe
Creating a Custom Business Rules Handler

The framework of a generated application relies on the concept of business rules  to handle various events in the application lifecycle.

Consider the following form view in a web application created with Code On Time generator. Suppose you want to capture the moment when user clicks OK button and the record is saved to the database. If this event has occurred then a visual confirmation must be displayed in the client web browser.

Form view 'editForm1' in edit mode

The client library of  application will collect all entered field values and send a request to the server components of the application to execute the Update action.

You can create a business rules class to handle this and many other situations on the server.

Start the web application generator, select the project name and click Design.

Select Products data controller on the Controllers tab in Project Explorer if you are working with the Northwind sample.

Enter ProductsBusinessRules in the Handler property of the data controller in the Business Rules section.

Properties of a data controller in Project Designer of Code On Time web application generator

Click OK button to save the changes. Press Exit button on the Designer toolbar and proceed to generate the application.

The code generator will create a file named ProductsBusinessRules.cs(vb) either in ~/App_Code/Rules folder (Web Site Factory project type) or in the ~/Rules folder of the class library of your app (all other types of projects). The file will be created only if it does not exist yet. Subsequent code generation sessions will not overwrite the file contents.

You can edit the file content in your favorite text editor. If you have installed Microsoft Visual Studio  or Microsoft Visual Web Developer than follow these steps.

Click on the project name on the start page of the application generator and choose Develop option. Visual Studio or Visual Web Developer will start. Find the file in the Solution Explorer and double-click its name to open the file in the text editor.

Business Rules class in Solution Explorer of Visual Studio in a Web Site Factory app created with Code On Time web application generator

The business rules class will look like the one shown next.

C#:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class ProductsBusinessRules : MyCompany.Data.BusinessRules
    {
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq

Namespace MyCompany.Rules
    
    Partial Public Class ProductsBusinessRules
        Inherits MyCompany.Data.BusinessRules
    End Class
End Namespace

The definition of the standard class is empty and will have no effect on the application.

Let’s display a browser message in response to the Update action.

C#:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using MyCompany.Data;
using System.Web;

namespace MyCompany.Rules
{
    public partial class ProductsBusinessRules : MyCompany.Data.BusinessRules
    {
        [ControllerAction("Products", "Update", ActionPhase.After)]
        private void DisplayMessageOnUpdate(FieldValue productName, int productId)
        {
            Result.ExecuteOnClient(
                "alert('Product \"{1}\" with ID={0} has been changed. " + 
                 "Old product name is \"{2}\".')", 
                productId, 
                JavaScriptString(productName.Value),
                JavaScriptString(productName.OldValue)
                );
            Result.Continue();
        }

        private string JavaScriptString(object text)
        {
            return HttpUtility.JavaScriptStringEncode(Convert.ToString(text));
        }
    }
}

Visual Basic

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq

Namespace MyCompany.Rules

    Partial Public Class ProductsBusinessRules
        Inherits MyCompany.Data.BusinessRules

        <ControllerAction("Products", "Update", ActionPhase.After)>
        Private Sub DisplayMessageOnUpdate(ByVal productName As FieldValue,
                                           ByVal productId As Integer)
            Result.ExecuteOnClient(
                "alert('Product ""{1}"" with ID={0} has been changed. " + _
                "Old product name is ""{2}"".')",
                productId,
                JavaScriptString(productName.Value),
                JavaScriptString(productName.OldValue)
                )
            Result.Continue()
        End Sub

        Private Function JavaScriptString(ByVal text As Object) As String
            Return HttpUtility.JavaScriptStringEncode(Convert.ToString(text))
        End Function

    End Class
End Namespace

Make sure to save the file. Bring up the application generator, select the project name on the start page and press Browse.The application will start in your default web browser.

Start editing any product and save the changes. A message will be displayed when the server application returns control to the web browser.

The result of execution of a business rule in an app created with Code On Time web application generator

Method DisplayMessageOnUpdate is executed after the record has been successfully saved to the database.

The method composes a JavaScript string that will be executed by the client library of application in the web browser. Custom function JavaScriptString is used to encode old and current product names to ensure that any characters that have a potential of “breaking” a JavaScript expression are taken care of.

If a custom JavaScript expression is passed to the client and you want to continue execution of the standard action state machine, then you need to call Result.Continue method. The client library will return to the list of products if Result.Continue has been executed in the business rules method. The method needs to be called one time only. If you comment this line out, then the record will stay in the edit mode.

Preparation of a JavaScript expression for execution in the web browser is not the only utility of custom business rules. You can perform all sorts of processing and data validation when needed. The full power of Microsoft.NET is at your disposal.

Wednesday, April 11, 2012PrintSubscribe
Focus in Tabbed Forms, Modal Window Height

Code On Time update 6.0.0.24 includes the following bug fixes and improvements:

  • If there was an exception when saving a many-to-many field then the operation is aborted and the exception is displayed to the user.
     
  • Client library will set focus on the first input field when users select a tab in a form view in edit mode.
     
  • Fixed the bug with lost focus in modal form views displayed in Internet Explorer.
     
  • The height of a modal from view will not exceed 80% of the browser window height.
     
  • Annotation plugin will correctly process the primary key fields that do not have a value in the database.
     
  • If the there is no designer change log and if the baseline file has not changed then the subsequent changes in Settings -> Refresh -> Generate sequence will be reflected in the generated application.

    For example, if you change the page layout in Project Settings, refresh the project without selecting controllers and generate the app then you will see the new layout in action. This sequence can be repeated multiple times with different project settings.
     
  • “ Bittersweet” theme is now less bitter and more sweet. On the eyes.
     
  • Floating row container issue has been fixed. This was causing incorrect rendering of pages in applications with right-to-left language cultures.
     
  • Business object builder will only consider the fields in the base table of the data controller for inclusion in the primary key.
     
  • The sequence of initialization of annotation plugin has been reverted to the one prior to the last update. The last update was causing problems when virtualization has been performed on a data controller with annotations.

     
Labels: Release Notes