Web 2.0

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 2.0
Tuesday, January 31, 2012PrintSubscribe
Roadmap 2012

Code On Time has expanded its rapid application development capabilities during the year of 2011.

In minutes you can build database web applications that are ready for deployment to shared or dedicated hosting server.  We now support Microsoft SQL Server, Oracle, MySQL, and SQL Anywhere.

A new exciting cloud platform called Microsoft Windows Azure attracts the attention of developers and business managers looking to cut deployment costs down and make deployment of web application simpler. Generate an Azure Cloud solution from your SQL Azure database. The solution includes a Web Role and class library implementing a web site with navigation system, role-based security, membership manager, built-in data export, reporting, and much more. Have it online in 15 minutes.

Many line-of-business web applications benefit from tight integration with web content management systems. We now offer two options that allow to take advantage of popular content management systems DotNetNuke and Microsoft SharePoint Foundation 2010.

DotNetNuke Factory creates application pages as controls with data views incorporated in a DotNetNuke module. The registered module can be configured by end users. This particular CMS is perfect for Internet-facing web applications.

SharePoint Factory creates a collection of application pages implemented as user controls, and packages them for deployment as a Microsoft SharePoint 2010 Feature with a single Web Part. Use this type of project for Intranet websites.

We are preparing the new http://codeontime.com website, complete with high quality search and built-in documentation engine.  We expect to launch the new site in a few weeks from now. The new documentation section will be cross-referenced in the Designer.

Our Code On Time team is working diligently to further the appeal of our web application generator. We would like to share the 2012 roadmap and explain the direction our product is taking.

The following upcoming features are presented in the approximate order of delivery. We will continue releasing bug fixes and introduce various product enhancements that are not listed in the roadmap. Updates will continue being delivered monthly.

Sync Server

Team development will become simple and hassle-free with the release of Sync Server. This is a cloud service from Code On Time designed to support groups of users working on the same project. Web application generator will feature Commit, Update, and Rollback actions to allow merging of the change logs created in the application Designer.

This tool will not replace existing powerful source control managements systems such as SVN or TFS. The sole purpose of the tool is to make the maintenance of Code On Time designer files as transparent and carefree as possible. Developers will be able to customize any part of the project and share their work with a push of a button.

Native Import of CSV Files

Shared hosting servers and restrictive host environments such as Windows Azure and Microsoft SharePoint Foundation make it impossible to use the Import feature available in the generated applications.

The current implementation relies on Microsoft Access Database Engine to process the submitted CSV, XLS, and XLSX files. It is not always possible to have them installed in the hosting environment.

We will offer a native reader of CSV files that will be embedded in the source code of generated application in Premium and Unlimited editions of the product.

Tree View

There is a partial implementation of “Tree” view in the current library. The implementation will be completed and become an official feature of the product.

Drag & Drop in Project Explorer

We have recently introduced the Project Explorer displayed alongside the Project Designer. The hierarchy of web application pages and data controllers allow easy access to the properties of various elements of an application. The hierarchies offer a holistic view of an application.

A full drag & drop manipulation of nodes in the hierarchies will allow easy reordering and changes in the composition of the project.

For example, you will be able to drag and drop “page” nodes to quickly change the navigation system of an application. Dragging of data fields will allow quick changes to the data presentation.

We will also allow Alt and Ctrl keys to affect the outcome of drag and drop actions. For example, one can imagine dragging a “view” node while keeping Ctrl pressed and dropping it on the parent node in the hierarchy. The outcome of such action may be creation of a “duplicate” view. We hope to work with the community to develop useful drag and drop actions.

“SELECT” Data Using Stored Procedures and Web Services

Code On Time web applications dynamically compose SQL SELECT statements to efficiently retrieve data. The generated application incorporates server side access control rules, user-defined filters, and sort order in the single SELECT expression. The application uses parameters to incorporate the user provided values.

This works great in many situations. Sometimes you may need a complex business logic to produce a data set presented to a user. There may be a stored procedure or a call to an external web service that produces data.

We will allow various levels of control to execute code before and after the data is processed. Developers will be able to supply a virtual dataset  if needed. We will also support native “virtualization” for stored procedures.

Business Rules in Project Explorer

Code On Time web applications offer a simple and powerful approach to the separation of business logic from the user interface. Developers create business rules for this purpose. Business rules are implemented as classes.  The classes contain methods adorned with ControllerAction, AccessControl, and RowBuilder attributes. These attributes allow the methods to participate in the application lifecycle.

Project Explorer will automatically parse the source code of all available business rules and match them to action nodes. Nodes of type controller and data view will feature Business Rules child node that will provide a summary of detected methods and will also allow easy creation of business rules. Methods and arguments will be automatically inserted in the source code. We will also allow selecting a purpose of the method. The boilerplate method implementation will reference the web resources explaining how a particular task can be accomplished in a Code On Time application.

Business rules are generated first time only. Customization will be preserved between the code generation sessions. New methods will be injected directly in the existing business rules. If a class implementing the business rules does not exist then a new class will be created.

EASE: My Account

Imagine that you are creating a web application to support a non-profit organization.

There are application users responsible for administration of the site. Event organizers will suggest the events supporting the cause of the organization. There are volunteers willing to sign up to help in organizing the events. There are donors who may wish to contribute financial resources.

Code On Time web applications offer a self-service sign up. Users create their own accounts with ease, which works great and requires minimal administration of the process. Users can login immediately. The application must ensure that the role of a user account is known to allow further access to the application pages. User “a” may wish to become a donor. User “b” would like to suggest an event. User “c” is burning with desire to volunteer.

Generated web applications will implement a class invoked to determine if a user account requires additional configuration when a page is accessed. Developer will have the power to make a determination and force the appropriate user configuration page presented in the browser. “My Account” link on the task bar will allow programmatic selection of the user configuration page.

This feature is a component of EASE (Enterprise Application Services Engine).

EASE: Dynamic Access Control List

Suppose you have created a successful line-of-business application for your client. Another client gets on board – things cannot be any better. Soon you discover that maintaining two clients with the same code base is very difficult. Complexity escalates quickly as you gain more and more customers.

If you have defined access control rules for one client then most likely your rules with have to be expanded to accommodate the other clients as well. Code On Time makes it easy, but the static nature of the access control rules will require frequent re-deployment of the application and possibly database changes.

Dynamic Access Control List will introduce a custom set of tables in the database of your application to support access control rules defined at runtime. The management tool will be built into your web application. Administrators will be able to define access control rules and assign them to roles and individual users.

This feature is a component of EASE (Enterprise Application Services Engine).

Code On Time Tools for Excel

Project Explorer makes it easy to have a bird-eye hierarchical view of your project. Many developers and business users feel more comfortable interacting with the application configuration setting presented in Microsoft Excel spreadsheet.

Code On Time Tools for Excel will provide an alternative to the built-in Designer. Custom ribbon tab will offer access to Code On Time projects. It will be possible to import all elements of a project into separate sheets and make changes to them en-masse. Ribbon controls will allow incorporating changes to the project designer log files.

Mobile Web Applications

Code On Time web applications display well in modern touch phones and tablets. However, the form factor of the web applications is designed to work best in the desktop browsers. The user interface is mouse-driven.

The unique design of Code On Time web applications allows seamless replacement of the client JavaScript library to accommodate new presentation paradigm. Upcoming releases of Code On Time will automatically link the mobile client library when touch screen phones and tablets are detected and render web applications accordingly.

There will be no need to change the existing applications or develop additional “mobile” pages that must be kept in sync with the desktop counterparts.

This feature will be available in Unlimited edition.

Ribbon Action Group

Recently released SharePoint Factory practically calls for a new action scope “Ribbon” to be supported.

New action scope will be available to expose the data controller actions on the tabs of the SharePoint ribbon.

We will also incorporate the SharePoint-style ribbon in other types of projects to offer this popular feature of Microsoft Office in the generated web applications that are not based on Microsoft SharePoint. You will find an example of an action group scope here.

EASE: Custom Membership Providers

Microsoft has introduced ASP.NET Membership to enable quick creation of sophisticated user and role management in the web applications. Code On Time makes it easy to take advantage of this standard feature. Generated web applications offer built-in Membership Manager, the visual tool that works on top of ASP.NET Membership.

Some developers do not trust Microsoft to do the job right and rely on their own tables and plumbing to handle the security. Full support for ASP.NET Membership providers is built in the ASP.NET.

Code On Time will offer automatic generation of custom membership providers directly from the custom database tables.

This feature is a component of EASE (Enterprise Application Services Engine).

A restricted version of custom membership provider will be available in all product editions if a web application is generated from SQL Compact, Microsoft Access, or DB2 database. This will apply to data sources that do not offer a standard ASP.NET membership provider.

Data Source: SQL Compact

Code On Time will support generation of web application from Microsoft SQL Compact databases.

Data Source: Microsoft Access

Code On Time will support generation of web application from Microsoft Access databases.

Data Source: DB2

Code On Time will support generation of web application from IBM DB2 databases.

Binary Fields: Upload When Inserting Records

Web applications generated with Code On Time allow direct upload/download of binary content to and from the binary columns of existing table  rows. It is not possible at this time to upload the binary content when a new row is created. The upload process streams the data straight to the database and a physical row has to exists for this to happen.

The new record does not exist in the database at the time when an end user selects a file to upload. The same limitation applies to binary content stored externally.

The upcoming revisions of the application framework and client library will allow selecting the binary files when a new record is created. The application framework will not upload the files instantly. Instead the upload will start when the database row has been created successfully.

Binary Fields: File System Adaptor

The web application generator will produce the “adapter” class that will make it easy to direct the uploaded content to the external file system folders.  No programming will be required.

Binary Fields: Azure Adapter

The web application generator will produce the “adapter” class that will make it easy to direct the uploaded content to the Windows Azure Storage. No programming will be required.

Binary Fields: Amazon S3 Adapter

The web application generator will produce the “adapter” class that will make it easy to direct the uploaded content to the Amazon S3 storage. No programming will be required.

Binary Fields: Multi-File Upload

Code On Time web applications will support optional multi-file uploading with a progress indicator.

EASE: Workflow Register

Workflow Register will complement the runtime capabilities of generated web applications. This feature will join the Membership Manager and Dynamic Access Control List.

If you are developing an application that services multiple customers, then a common requirement is to allow customization of the user interface according to the needs of each customer. Workflow Register will bring elements of Code On Time Designer to the generated applications. End users will be able to create new virtual pages, data views, and actions groups.

This feature is a component of EASE (Enterprise Application Services Engine).

View Type: Calendar

If your dataset has a date column then it is not a bad idea to see the records in calendar format. This is precisely what we intend to do.

The new view type will render data in a calendar format and will behave similar to the grid view for all intents and purposes.

EASE: Dynamic Web Content Management System – Site Builder

Search Engine Optimization and web content management may not be on your mind when you are creating a line-of-business web application. If your software-as-a-service solution is ready for production then the next step is to start a marketing campaign.

You will likely seek a 3rd party solution such Wordpress or Office 365. You do have the option of incorporating your software in the popular content management systems with DotNetNuke Factory and SharePoint Factory.

If none of the above options are appealing then Code On Time will have another option for you. Built-in site builder will allow creation of virtual pages within your own application that are seamlessly integrated in your web application. No 3rd party software will be required.

This feature is a component of EASE (Enterprise Application Services Engine).

View Type: Rollup

We will deliver a new view type that will present a variation of data sheet view with the ability to collapse the data rows. The view will differ from the data sheet view. It will behave more inline with traditional spreadsheet style of presentation. The overflow data in the cells will not wrap to the next line and will stay hidden.

View Type: Map

Location presentation is easy in modern web development thanks to mapping solutions from Google and Microsoft. We will offer a new view type to present the dataset on the map.

Cloud On Time

We hope to end this year with the launch of http://cloudontime.com. The hosted version of Code On Time with ability to create tables will require zero software on the computer. The service will be subscription-based.

Developers will be able to start the project in the cloud and optionally migrate to a custom version of the cloud app that will be under their full control with the help of Cloud Factory project.

1-to-1 Entities

A common database design practice is to use 1-to-1 entities.

For example, you may implement the Person table that provides the base shared columns LastName and FirstName for tables Student and Teacher.  Both the Student and Teacher tables have PersonID column that allows inclusion of common attributes.

Code On Time does not recognize such relationships and generates the master-detail page where Person is the master view and Student and Teacher are detail views.

The developer’s intent is to have the two independent pages and two controllers that match Student and Teacher. Both controllers must incorporate the personal information (LastName and FirstName) as if it is defined in the base tables.

We will offer a special mapping area to identify the 1-to-1 entities and will generate the code to handle the distributed nature of the data in such relationships.

Saturday, January 21, 2012PrintSubscribe
SharePoint Factory is Out!

Code On Time release 6.0.0.19 includes new code generation project SharePoint Factory and miscellaneous product enhancements.

This release includes the following features and enhancements:

  • SharePoint Factory web application project.
     
  • Theme page of the project wizard now offers an index of all theme samples.
     
  • New themes: Mission, Laminate, Grapello, Graham, Convention, Construct, Cay, Bittersweet, Berry, Municipal.
     
  • DotNetNuke Factory will produced a Visual Studio 2010 project if Visual Studio 2010 is detected.
     
  • New "strongNameKey" code generator instruction creating a random key pair with the help of Strong Name Utility is integrated in the code generator. If the SNU is not available then the standard key is copied from the library to the output. This feature is provided to support SharePoint Factory.
     
  • EASE EventTracker class has been updated to ensure compatibility with Visual Basic.
     
  • Alias Field Name property of data fields is left blank if the Discovery Depth is set to zero.
     
  • Suppression of duplicate foreign keys is now performed by the code generator in all project types. Duplicate foreign keys were previously causing erroneous code generation.
     
  • "Project Refresh" window now offers Select All/None buttons to allow quick selection of all items.
     
  • Quick Find performs a case-insensitive search in projects using Oracle backend.
     
  • Settings "Features | Grid | Enable standard action column in all grid views" will add an action column to all views of an application.
     
  • Click on a "View Details" link next to a lookup field in a master view will not stop refreshing of child views when the selected master record has changed.
     
  • Slow running detail views will automatically cancel data requests if the master has changed. The previous implementation may have resulted in the wrong detail data displayed if the selected master record has changed before all details were retrieved.
     
  • It is now possible to process "Report..." actions in business rules.
     
  • Designer log progressing progress in now displayed in the log box of the code generator. This will be noticeable with large change longs only when the project is refreshed.
     
  • Batch Update in grid view will not raise an "Unauthorized command..." exception when user tries to save the changes.
     
  • Connection String Name defined in the data controller properties is correctly used in the generated apps. Read about implementing multi-database projects at /blog/2012/01/multiple-databases.html.
     
  • Check for updates is automatically initiated when an activation code is registered.

Monday, January 9, 2012PrintSubscribe
Handling “Report…” Actions

Code On Time web applications support out-of-the-box reporting capabilities that require zero programming.

Standard Report Actions

All data views offer four standard actions that yield a different output.

  • Action “ReportAsPdf” will render the data presented to end users as a Adobe PDF document. The shorthand action “Report” will produce the same result. This type of report requires a compatible software installed on the client computer to view and print the report output. You can download free Adobe Acrobat Reader at at http://get.adobe.com/reader.
     
  • Action “ReportAsImage” creates a TIFF image file, which requires a compatible software installed on the client. TIFF format supports multiple pages and is a perfect alternative to PDF. The quality of output in PDF and TIFF formats is equivalent.
     
  • Action “ReportAsWord” renders a report as Microsoft Word document with a high-quality output. In some instances the output is less precise then the output produced by the action “ReportAsImage” and “ReportAsPdf”.
     
  • Action “ReportAsExcel” produces a Microsoft Excel spreadsheet that offer a lesser quality output due to rendering restriction of the popular spreadsheet software.

If a user  requests a “Report...” action then a report is rendered on the server with the help of Microsoft Report Viewer. The output is streamed to the client browser. Typically a prompt is displayed before a compatible installed software viewer will be activated. Users also have an option to save the output locally. If a viewer is not installed on the client computer then the prompt to save the file is the only option.

Code On Time web applications execute various server calls off-band to provide smooth Web 2.0 user experience. Modern web browsers make sure to prevent all sorts of popups initiated by the scripts embedded in the web pages. The client library makes use of correct techniques to process reports on the server without causing automatic activation of popup blockers.

Custom Report Action Handlers

Code On Time web applications created with version 6.0.0.19 or higher allow developers to perform custom processing of reporting actions in business rules. There are several reasons that may require an execution of  custom code that must precede or override the standard report rendering logic:

  • The data must be “prepared” before a report is rendered.
  • The report request must be logged.
  • An external report rendering engine is available. The custom code will redirect the report request to such an engine.
  • A special report preview page needs to be displayed.
  • A custom report building code must execute. The custom code replaces the standard report rendering logic.

Create a business rule for your data controller and implement methods to handle the corresponding “Report...” actions when you need to override the standard report processing.

Example

Generate a Northwind sample using Code On Time web application generator.

Select the project name on the start page of the code generator and click Design.

Select Controllers tab in the Project Explorer and enter CustomerBusinessRules in the Handler property of the Customers data controllers. Click OK to save the changes.

image

Expand Actions node of the Customers data controller in Project Explorer, right-click Actions and create a new action group with the Scope of Action Column.

Add a new action in the newly created action group, set its Command Name to Report, and Command Argument to _blank.

image

Here is the sub-tree of the Customers data controller with the  Report action selected.

image

Click Exit on the Designer tool bar and generate your application.

Select the project name on the start page of the web application generator and choose Develop. Visual Studio or Visual Web Developer will start.

Locate the file ~/App_Code/Rules/CustomerBusinessRules.cs(vb) and enter the following code.

C#:

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

namespace MyCompany.Rules
{
    public partial class CustomersBusinessRules : MyCompany.Data.BusinessRules
    {
        [ControllerAction("Customers", "Report", "_blank")]
        public void RedirectToCustomReport(string customerId, string companyName)
        {
            // Redirect user to another URL
            Result.NavigateUrl = String.Format(
                "~/Pages/Customers.aspx?CustomerID={0}&_controller=Customers" + 
                "&_commandName=Select&_commandArgument=editForm1",
                customerId);
        }

        [ControllerAction("Customers", "ReportAsImage", "")]
        public void GenerateCustomReport(string customerId, string companyName)
        {
            PreventDefault();
            // return the same image in response to all "Report..." commands
            Context.Response.Clear();
            Context.Response.ContentType = "image/jpeg";
            Context.Response.AddHeader("Content-Disposition", 
                String.Format("attachment;filename={0}.jpg", customerId));
            byte[] reportData = 
                File.ReadAllBytes(@"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg");
            Context.Response.AddHeader("Content-Length", reportData.Length.ToString());
            Context.Response.OutputStream.Write(reportData, 0, reportData.Length);
        }
      
    }
}

Visual Basic:

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

Namespace MyCompany.Rules
    
    Partial Public Class Customers
        Inherits MyCompany.Data.BusinessRules

        <ControllerAction("Customers", "Report", "_blank")> _
        Sub RedirectToCustomReport(ByVal customerId As String, ByVal companyName As String)
            ' Redirect user to another URL
            Result.NavigateUrl = String.Format( _
                "~/Pages/Customers.aspx?CustomerID={0}&_controller=Customers" + _
                "&_commandName=Select&_commandArgument=editForm1",
                customerId)
        End Sub

        <ControllerAction("Customers", "ReportAsImage", "")> _
        Sub GenerateCustomReport(ByVal customerId As String, ByVal companyName As String)
            PreventDefault()
            'return the same image in response to all "Report..." commands
            Context.Response.Clear()
            Context.Response.ContentType = "image/jpeg"
            Context.Response.AddHeader("Content-Disposition", _
                String.Format("attachment;filename={0}.jpg", customerId))
            Dim reportData As Byte() = _
                File.ReadAllBytes("C:\Users\Public\Pictures\Sample Pictures\Koala.jpg")
            Context.Response.AddHeader("Content-Length", reportData.Length.ToString())
            Context.Response.OutputStream.Write(reportData, 0, reportData.Length)
        End Sub
    End Class
End Namespace

The first method RedirectToCustomReport will use the ID of the selected customer to compose a URL relative to the application. The URL will open in a new browser window and will force the application to select a customer with the specified ID.

The new window will open if your have entered the command argument as “_blank” when defining the action in Project Designer. If action command argument has been left blank then the new URL will replace the page in the web browser. Users will have an option to return to the previous page using the browser’s Back button.

The screen shot of the Customers page prior to execution of our Report action is shown next.

image

If you click on the Report button then a new browser window will open. You can see the address bar reflecting the ID of the selected customer.

image

Our web application is using its own capabilities to present the data with the help of data controller URL parameters. You can redirect the report action to a generic web request handler or to a web-enabled report server such as Crystal Reports or Microsoft SQL Server Reporting Services.

The second method GenerateCustomReport takes control over the report rendering completely.

First, the method cancels out the default reporting logic at the very beginning by calling PreventDefault.

Next it reads the file C:\Users\Public\Pictures\Sample Pictures\Koala.jpg and streams it out. In a real-world application you can produce any sort of output using a custom code.

The method uses the customer ID to assign the file name to the output.

If you are reproducing this sample on a Windows 7 computer then there is not need to change the code . Otherwise change the path to the image file accordingly.

Run your web app, navigate to Customers page and select a customer.

Choose Report | Multipage Image on the action bar above the list of customers.

image

The custom method will execute and you will see the following prompt to download the file AROUT.jpg if you browsing with IE 9.

image

Click Open and the default image viewer will start.

image

If you select any other customer and choose the same action bar option then exactly the same image will be downloaded but the file name will reflect the actual primary key of the selected customer.

In a real-world applications you will likely stream other formats of output such as PDF or custom Microsoft Office documents using 3rd party reporting software.