Blog: Posts from March, 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 March, 2012
Thursday, March 1, 2012PrintSubscribe
Creating a Northwind App

Let’s create a baseline Code On Time Web Site Factory application. Run the web app generator, and select Web Site Factory project type.

Project Selection screen in Code On Time web application generator

Web Site Factory project type is based on a directory structure. Files will be compiled upon saving to the hard drive. Web Site Factory is suitable for an application of any complexity and is the easiest to manage. If you’re starting web development or coming to ASP.NET from other technologies, then this is the project type for you.

In the Name field, enter “OrderForm”. This will be the name of the folder that stores the project, and will be the display name shown on the start page of the code generator. Select the programming language of your choice, and press Create.

New Project Screen in Code On Time web application generator

On the next page, you can enter the Namespace, which will be used throughout the whole application. The namespace is a prefix used in all classes of the generated code base. We’ll leave the default name “MyCompany”. You can also change the Framework to either .NET 3.5 or 4.0. The latter is suggested, as it has better performance.

Namespace and Framework page in Code On Time Generator

When finished, press Next. This will create the project.
Thursday, March 1, 2012PrintSubscribe
Dynamic Access Control Rules, New Themes, Custom Master Pages

Code On Time release 6.0.0.21 includes numerous new features and enhancements.

New http://codeontime.com has been launched. Use the search feature of the web site to find everything related to our products including documents, tutorials, video, blog, support, and community resources.

Search engine for everything related to Code On Time

Several originally planned features were excluded from this release. We are still testing Code On Time Sync and will likely release it to production in the next two weeks. The server infrastructure of Sync is in place now.

  • Business rules are invoked correctly if data operations are initiated by data access objects.
     
  • Previous version was incorrectly displaying annotations when users start creating a new record. The annotation fields are now displayed only when user edits an existing record. Future updates will support annotations when creating new records.
     
  • LastView property in now available in PageRequest, ViewPage and ActionArgs classes.
    The application framework takes advantage of this property and automatically copies the "View Filter" from a grid view to a form view at runtime if the form view does not have its own "View Filter". Learn more about view filter expressions at http://codeontime.com/learn/security/multi-tenant-applications/view-filter-expressions.
     
  • Custom master pages are now supported. Learn more at  http://codeontime.com/learn/pages/custom%20master%20page.
     
  • Code generator now features integrated support for Google Translate API Key in globalization settings of projects. Lear more at http://codeontime.com/learn/globalization-and-localization/automatic-translation.
     
  • New Controller.ConvertToType method is used in Data Access Objects and business rules engine to convert client values to native .NET types.
     
  • Fixed the exception with filtering of DateTimeOffset fields.
     
  • Culture manager prevents duplicated initialization.
     
  • Class Controller allows overriding the new GetDataControlStream method. The method can return a stream of XML data controller definition from any source based on arbitrary condition.
     
  • Implemented data controller virtualization. Two methods are required in a business rules class: SupportsVirutalization and VirtualizeController.
     
  • Access control rules support filtering expressions with the data controller field names wrapped in square brackets. Learn more at http://codeontime.com/learn/security/multi-tenant-applications/data-segregation-and-filtering.
     
  • All available user interface are now supported right-to-left languages.
     
  • The collection of themes has expanded. You can see new theme samples at http://codeontime.com/learn/introduction/user-interface/themes-a-c.
     
  • Dynamic access control rules are now available in Premium and Unlimited editions. Learn more at http://codeontime.com/learn/security/multi-tenant-applications/dynamic-access-control-rules.
     
  • New ContainsField method is now available in ViewPage class. There is also a utility class SqlParam used with Dynamic Access Control Rules.
     
  • Business rules correctly process a single null or DBNull.Value as a restriction of an access control business rule method. Learn more at http://codeontime.com/learn/security/multi-tenant-applications/restricting-access-to-null-values.
     
  • Data Views number support Show Row Number property. The logical row number is displayed in the first column if Show Row Number is set to true. Learn more at http://codeontime.com/learn/pages/data-views/displaying-row-number.
     
  • Search Options are now supported in Premium and Unlimited edition. Learn more at http://codeontime.com/blog/2012/02/search-mode-options.
     
  • Report handler is now declared as partial class. It will allow overriding the File Name composed when a report is rendered with Report Viewer. The method name is FormatFileName.
     
  • Method DataViewExtender.AssignFilter will correctly clear the data view filter when called in response to ASP.NET events.
     

        protected void Button1_Click(object sender, EventArgs e)
        {
            dve1.AssignFilter(new FieldFilter[] {
                new FieldFilter(
                    "CategoryCategoryName",
                    RowFilterOperation.None) });
        }

  • Setting property Hyperlink Format String to a URL with _blank prefix will open a new tab in IE8/9. If user click the link while holding Shift key then the new popup window will open.
     
  • In-line creation of lookup values in a Data Sheet view will not result in an exception. Cancellation of modal lookup will not cancel editing in a Data Sheet view.
     
  • Reversed description of Hidden/System fields in the project wizard.
     
  • RichText in data fields will not cause a security exception raised by ASP.NET when executing any "Report..." action.
     
  • Modified the globalization mechanism to use the new "culture" folders under [Documents]\Code OnTime\Library\_Localization.
     
  • The code generator will not crash if a decimal point value is entered as Columns or Rows property of a data field.
     
  • Fixed the incorrect display of multi-layered modal views. Previously the subsequently opened modal views would not cover the previous view. Users were able to interact with them. Now the modal view covers with the semi-transparent background the entire area underneath.
     
  • Fixed the exception error message displayed in Designer Preview if a modal view was open at the time of closing when user exists the Designer.
     
  • The latest release generates applications with Ajax Control Tookit 51116. Learn more at http://ajaxcontroltoolkit.codeplex.com/.
     
  • Class DistinctValueRequest is now declared as partial. Developers may find it useful overriding the property MaximumValueCount to control the number of distinct values returned to the client.

    using System;
    using System.Web;

    namespace MyCompany.Data
    {
        public partial class DistinctValueRequest : DistinctValueRequestBase
        {
            public override int MaximumValueCount
            {
                get
                {
                    if (Controller == "Customers")
                        return 10;
                    return base.MaximumValueCount;
                }
                set
                {
                    base.MaximumValueCount = value;
                }
            }
        }

  • Multi-byte search values entered in Advanced Search Panel and custom column filters are now working correctly.
     
  • Code generator will refresh the Application baseline to reflect changes in the project settings when your execute project Refresh. If any customization has been applied to the application design then only new pages composed by the code generator to host application data controller will be affected by the changed settings.
     
  • Attributes AccessControl and ControllerAction allow a regular expression to be entered as a Controller property. This allows a shorthand definition of a business rule method that can cover multiple controllers with a certain name pattern.
     
  • Project action Refresh now incorporates any new pages or data controllers inserted or modified directly in *.Baseline.xml files. Custom data controllers must not have nativeSchema or nativeTableName attribute in the definition to be included in the application design.
     
Thursday, March 1, 2012PrintSubscribe
View Filter Expressions

The alternative method of filtering is available in the data controller views. Property “View Filter” allows specifying an expression that will be embedded in the SQL statement composed by the application framework at runtime.

Suppose you want to filter a list of customers by a specific country.

Start the application generator and select your project, choose Design.

Locate the page Customers in Project Explorer, expand container1 and view1 nodes.

Double-click grid1 to active its properties.

Grid view "gird1" selected in Project Explorer

Enter the following expression in Filter Expression property of the Sort and Filter section.

Country = 'USA'

Sort and Filter section of a data controller view

Click OK button to save the changes and click Browse button on the tool bar. The generator will start the app in your default browser.

Navigate to Customers page and observe that only customers from the USA are displayed.

List of customers affected by the view filter Country = 'USA'

Select any customer by clicking on a link in the first column. The form view editForm1 will be activated.

Form view 'editForm1' inherits the filter from the last view 'grid1'. 

Notice that only customers from the USA are visible when you navigate between records in the form view with the help of navigation buttons.

Form view navigation buttons

The form view automatically inherits the value of Filter Expression from the last view that was presented to the user.

Static view filters work great when you need to present several alternative views of data. Users cannot remove the view filters and apply their own criteria on top of the view filter expressions.

View filter can also reference properties of the business rules class associated with the data controller of the view.

For example, you can define the following filter that contains a parameter.

Country = 'USA' and Region = @RegionName

If you generate the application and navigate to the Customers page then you will see the following exception:

View 'grid1' uses a filter with 'RegionName' parameter. Business rules class of the controller must provide a value for this parameter. The filter is defined as (Country = 'USA' and Region = @RegionName).

The application framework does not know how to determine the value of RegionName.

Right-click the data view view1 in the Project Explorer and choose Show Controller option.

"Show Controller" option in the context menu of data view node

Double-click Customers controller on the Controllers tab of Project Explorer.

"Customers" controller selected on the Controllers tab of Project Explorer

Enter CustomersBusinessRules in the Handler property of the controller and click save.

Definition of business rules class name

Exit the Designer and proceed to generate the project.

Select the project name on the start page of web application generator and click Develop.

Visual Studio or Visual Web Developer will start.

Open ~/App_Code/Rules/CustomersBusinessRules.cs(vb) class and enter the definition of RegionName read-only property.

C#:

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

namespace MyCompany.Rules
{
    public partial class CustomersBusinessRules : MyCompany.Data.BusinessRules
    {
        public string RegionName
        {
            get
            {
                return "OR";
            }
        }
    }
}

Visual Basic:

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

Namespace MyCompany.Rules

    Partial Public Class CustomersBusinessRules
        Inherits MyCompany.Data.BusinessRules

        Public ReadOnly Property RegionName As String
            Get
                Return "OR"
            End Get
        End Property

    End Class
End Namespace

Navigate to the Customers page and observe that only customers from the state of Oregon are now visible.

List of customers affected by view filter (Country = 'USA' and Region = @RegionName)

Notice that the value returned by RegionName property of the business rules class does not become a part of SQL statement.  The application will compose a SELECT statement that incudes the view filter expression text with the resolved names of the data fields. An actual command parameter will be created . The property value will be assigned to the parameter value.

If you want to create a filtering expression as a dynamic fragment of SQL at runtime then consider using dynamic access control rules.

If more than one value needs to be passed to the view filter then consider changing the filter definition as follows (we have replaced “=” with “in”).

Country = 'USA' and Region in @RegionName

Change the property definition to return a list or an array of values.

C#:

public List<string> RegionName
{
    get
    {
        List<string> regions = new List<string>();
        regions.Add("OR");
        regions.Add("WA");
        return regions;
    }
}

Visual Basic:

Public ReadOnly Property RegionName As List(Of String)
    Get
        Dim regions As List(Of String) = New List(Of String)
        regions.Add("OR")
        regions.Add("WA")
        Return regions
    End Get
End Property

Customers from the states of Oregon and Washington are now available in the list.

List of customers filtered by array of (WA, OR)

The application framework will list a separate parameter in the composed SELECT statement for each value in the list returned by the RegionName property of the business rules class.  In our example the actual fragment of SQL will look as follows:

("Customers"."Country" = 'USA' and "Customers"."Region" in (@RegionName0,@RegionName1))

Continue to Web App Themes V-Y