Application Factory

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
Application Factory
Thursday, January 14, 2010PrintSubscribe
Ad Hoc Reporting

Learn to create ad hoc reports in Web Site Factory projects.

We will show how to create an ad hoc report based on a business object layer class generated by Code OnTime Generator. Then we will replace the business object layer object with a ControllerDataSource component.

Watch this video on our YouTube channel at http://www.youtube.com/watch?v=wAeNRB-kdLY.

We will create a dataset with a table adapter based on a free-form SQL query or optional stored procedure. Then we will replace ControllerDataSource component in the AJAX web application created in the first part of the tutorial with an ObjectDataSource hooked to the data table adapter.

Watch this video on our YouTube channel at http://www.youtube.com/watch?v=T_FYskbhYCM.

Monday, January 11, 2010PrintSubscribe
Global Logging With Shared Business Rules

Many applications require a global log of changes made by users at runtime. Data Aquarium Framework provides an excellent mechanism to create a single point of logging of all operations.

If you create a code file with a class named YourNamespace.Rules.SharedBusinessRules inherited from BusinessRules base then the framework will use this class if there is no custom handler for the data controller.

Here is an example written in C#.

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

namespace MyCompany.Rules
{
    public class SharedBusinessRules : BusinessRules
    {
        public SharedBusinessRules()
        {
        }

        protected override void AfterSqlAction(ActionArgs args, ActionResult result)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine();
            sb.AppendFormat(@"Controller: {0}, View: {1}, Command: {2}",
                args.Controller, args.View, args.CommandName);
            sb.AppendLine();
            switch (args.CommandName)
            {
                case "Update":
                    foreach (FieldValue v in args.Values)
                        if (v.Modified)
                        {
                            sb.AppendFormat(
                                "Field '{0}' has been changed from '{1}' to '{2}'",
                                v.Name, v.OldValue, v.NewValue);
                            sb.AppendLine();
                        }
                    break;
                case "Insert":
                    foreach (FieldValue v in args.Values)
                        if (v.Modified)
                        {
                            sb.AppendFormat(
                                "Field '{0}' is equal to '{1}'",
                                v.Name, v.Value);
                            sb.AppendLine();
                        }
                    break;
                case "Delete":
                    foreach (FieldValue v in args.Values)
                    {
                        sb.AppendFormat(
                            "Field '{0}' is equal to '{1}'",
                            v.Name, v.Value);
                        sb.AppendLine();
                    }
                    break;

            }
            System.Diagnostics.Debug.WriteLine(sb.ToString());
        }
    }
}

Here is a sample  debug output of the code produced by a Web Site Factory application when records in Northwind.Customers table are updated, inserted, and deleted.

image

The complete debug log in the picture is listed below.

Controller: Customers, View: grid1, Command: Update
Field 'CompanyName' has been changed from 'Alfreds Futterkiste' to 'Alfreds Futterkiste*'

Controller: Customers, View: grid1, Command: Insert
Field 'CustomerID' is equal to 'A'
Field 'CompanyName' is equal to 'New Company'
Field 'ContactTitle' is equal to 'President'

Controller: Customers, View: grid1, Command: Delete
Field 'CustomerID' is equal to 'A    '
Field 'CompanyName' is equal to 'New Company'
Field 'ContactName' is equal to ''
Field 'ContactTitle' is equal to 'President'
Field 'Address' is equal to ''
Field 'City' is equal to ''
Field 'Region' is equal to ''
Field 'PostalCode' is equal to ''
Field 'Country' is equal to ''
Field 'Phone' is equal to ''

You can implement  a database table to keep track of changes instead of sending the output to the Debug log that can be viewed in Visual Studio and Visual Web Developer Express. The code generator will create a user interface for the logging table and this will ensure that you can have an auditing and reporting capability embedded into your web application.

If you need to retain the global logging functionality in the custom data controller handler then simply use SharedBusinessRules class as a base class for your custom data-controller specific business rules.

Thursday, December 31, 2009PrintSubscribe
Masked Editing, Auto Completion, Inline Record Insertion, New Themes

We are ending the year 2009 with a bang!

Here is list of features available in the latest update.

Grid View Allows Inserting New Rows Inline

Action New is now supported in grid views.

image

Here is a record in “New” mode displayed alongside of the other records in the grid view.

image

Masked Editing

Masked editing is supported by components of Ajax Control Toolkit, which provides the foundation for Data Aquarium Framework. Now you can easily enable masked editing in Code OnTime Designer with a a few clicks of a mouse on any field of any data controller. Read about mask format here.

image

Here you can see the masked editing in action:

image

Auto-Completion In Views

New attribute Auto Complete Prefix Length on a data field of a view controls the minimum prefix length for auto-completion to start.

You can quickly define this parameter on a data fields with the help of Code OnTime Designer. Pictured below is the data field City of editForm1 view in Customers data controller. The value of the prefix is set to 1.

image

Here you can see the auto-completion in action:

image

Server-Side Formatting Of Values

Data Aquarium Framework takes every opportunity to offload the processing of presentation logic to the client browser. The standard formatting of values is controlled by the data field property Data Format String. The actual formatting is done via JavaScript String.format function, which has powerful but limited capabilities if compared to .NET System.String.Format.

Now you can simply un-check the Format On Client box in Code OnTime Designer and additional processing will be performed on the server. The data controller will create a dynamic data field and will provide a formatted value for it. The actual field is aliased to present the dynamic data field in read-only mode.

image

Here you can see the [Product].[Discount] field formatted in the column five according to the data format string 00.00 shown in the previous screen shot. Note that this particular data format string is not compatible with the JavaScript implementation of String.format.

image

Html Encoding

Data Aquarium Framework makes sure that user data will not break the presentation when HTML compatible character sequences are entered as field values. Sometimes you might want to have them displayed as an actual HTML.

Suppose you have entered a product category as follows:

Cheeses <b>are great</b>

If you disable HTML encoding for the data controller field directly in the data controller or in Code OnTime Designer then the following will be presented with the phrase “are great” displayed in “bold” font in the Description column of the second grid row.

image

Improved blob Processing

File upload has just became easier with this release. Now you can simply select a file and the uploading starts instantly. A nice AJAX-style animated image is indicating process.

The previous implementation required user to additionally click on submit button next to the file input control.

Five New Themes

Users with Code OnTime Designer subscription are now able to create applications styled with five new themes. You can see samples of these themes presented in various browsers in this very post.