Code Generator

Labels
AJAX(112) App Studio(9) 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(178) 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(184) 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(3) 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
Code Generator
Friday, August 31, 2012PrintSubscribe
Creating a New Web App

Let’s create a new Web Site Factory project.

Start Code On Time web application generator and select Web Site Factory under New Project.

Creating a Web Site Factory project on the Start Page of Code On Time web application generator.

The next page will prompt to specify a name and programming language of the project.

Select the programming language of your choice and specify the following name:

Property Value
Name MyProject1

Assigning a name and programming language to the new project.

Press Create button to create the project.

The next page allows changing the Namespace and the version of Microsoft .NET Framework. Leave the default values and press Next.

Configuring the namespace and .NET Framework for the project.

This page allows specifying the Data Provider and Connection String. Select your data provider from the list.

This tutorial uses Microsoft SQL Server database engine. If you do not have a database server, consider installing Microsoft SQL Server 2012 Express.

Click on the button to the right of the Connection String field to open the Connection String Configuration page.

Selecting a Data Provider and activating the Connection String Configurator.

If you have SQL Server Express edition, specify the following:

Property Value
Server .\SQLEXPRESS
Database Northwind
Sample Tables Northwind

To the right of Database field, click on the Create button and confirm to create the database.

Creating a new database on the specified server on the Connection String Configuration page.

To the right of the Sample Tables dropdown, press Install and confirm to populate the project database with the Northwind dataset.

Installing Northwind database tables and data into the specified database.

Code On Time does not offer tools to design databases. Use your favorite database management tools, such as Microsoft SQL Server Management Studio, to work with the database schema.

Our application will have built-in user and role management system. Code On Time applications rely on the security infrastructure available in ASP.NET.

Under Membership section, press Add and confirm to add ASP.NET Membership to the database.

Adding ASP.NET Membership to the database.

You will see a confirmation when the membership has been configured.

Press OK to finish configuration of the database connection string.

Configuration of the database connection string has been finished in a Code On Time web application.

If you are using a trial version of the application generator, the project size is limited to 10 tables or views. To select a subset of tables for the project, click the Change button next to “All database tables and views are included in this project”. Include the following tables: Categories, Customers, Employees, EmployeeTerritories, Order Details, Orders, Products, Shippers, Suppliers, and Territories.

Selecting database tables and views to include in the project.

Press Next twice to reach the Reporting configuration page. Enable dynamic and static reports in the application.

Enable reporting by checking the box on the Reporting Page of the Project Wizard.

Hold down Shift key and press Next – this will skip directly to the Summary page. Press the Generate button to start creation of the web application.

Summary page of the Project Wizard.

When generation is complete, the web site will open in your default browser.

Web Site Factory web application running in a web browser.

Monday, March 12, 2012PrintSubscribe
State-of-the-Art Web Application Generator

Code On Time has evolved from a general purpose code generator to a powerful enterprise class web application builder.

Web Application created with Code On Time

A Little History

We started with the idea of a tool for Microsoft.NET platform capable of producing code in both C# and Visual Basic from a single code generation template.

For fairly obvious reasons many developers believe that rendering a program code file is not any different than rendering an HTML web page. A code generator can use a template and replace dynamic portions of a template with user-defined variables. Numerous products on the market do exactly that, which is exemplified in the latest addition to Visual Studio called T4 Text Templates.

Creating a single template that produces both C# and Visual Basic output is quite difficult. From its inception Code On Time has been transforming an XML database of project settings to  output files written in XML language. This language has exactly the same capabilities as C# and Visual Basic. The generator simply translated the XML output file to C# and Visual Basic making it possible to generate equivalent code in either language from the same template.

We have quickly realized that the code generation by itself offers modest benefit to a developer. A developer has to create usable templates and the quality of the output depends on the developer’s skill.

Several code generation products were aiming at creating complete web applications on top of custom databases. Every single one of them is based on the idea that generating a large amount of code in a consistent fashion is an exceptional value and will replace a small army of hand-coders who are typically required to complete a large project.

The vendors of these products to this day boast about many thousands of lines of code their software is capable of producing. The pitch goes like this: “We produced thousands upon thousands of lines of code. You will save untold amounts of money – the code is being written automatically”

More is not always better. Small armies were known to defeat larger opponents. In software engineering, a common principle is Don’t Repeat Yourself – something that repetitive generated code fails to follow.

The advantages of a consistently constructed application are undisputable. On the other hand, applications produced with the code generators are hard to maintain and expand. The same fragments of code are repeated all over the place and require changes to the code generation templates if you want a consistent behavioral change in the application.

State-of-the-Art Web Application Generator

The full potential of web application generation can be realized with a different  approach to application construction. The generated application code must be based on a core framework that allows taking advantage of automatic code generation and easy extension of the code without losing the changes. The framework shall not be based on “black-box” runtimes. The source code of framework must become the organic part of the generated web application.

Code On Time web applications are based on Data Aquarium Framework. This framework does not exist as a separate download – each generated application includes the framework source code. The generated components of custom applications coexist with the core framework files, taking full advantage of this synergy.

Data Aquarium Framework uses the concept of data controllers to implement various data manipulation capabilities. The framework uses information contained in XML data controller descriptors to allow automatic data retrieval, paging, and sorting of very large data sets. The framework supports adaptive filtering, quick find, search bars, data import and export. The framework supports update, insert, and delete operations, without the need for stored procedures.

The advantages of a built-in framework are enormous. Every single application page references the data controllers connected in multi-level master-detail relationships.  The same controller can be referenced by many application pages. The application framework instantiates the light-weight AJAX user interface components on the pages at runtime. The client-side components of the framework communicate with the application via a single gateway web service. The server portion of the framework makes possible paging, sorting, filtering, export, import, and data modification without any duplicate code present on any of the generated pages. The application remains small, compact, and easy to understand from a development prospective.

Rapid Application Generation

The use of the framework  in the generated applications makes Code On Time the fastest code generator on the marker. It takes about 15 seconds for a midrange workstation to create a full featured web application on top of Adventure Works R2 demo database provided with Microsoft SQL Sever 2008. The database contains 91 tables and views.

'Adventure Works' demo web application created with Code On Time.

The application generator does not change your database in any way. A typical code generation product will create close to 400 stored procedures for a similarly sized application to support the cookie-cutter pages. The intelligent framework of applications created with Code On Time makes all of these redundant.

Business Rules and Custom User Controls

Developers can request generation of placeholder business rules classes in the application code base. Business rules support standard framework functionality and can extend it with custom behavior for specific data controllers.

The business rules classes are created first time only and remain unchanged during subsequent code generation sessions. Custom business rules natively blend with the application source code and become a part of the application framework.

Developers can write business rules that participate in all stages of the application lifecycle. It includes validation, logging, and modification of data.

If a custom user interface element is required, than the code generator can create a custom user control placeholder. Developers can modify the custom user control to their liking and place it on any number of application pages without losing customization when code is re-generated.

Life beyond the code generation

All generated web applications have no dependencies on any sort of “black boxes” or runtimes.  An application can be constructed for deployment to a dedicated web server, to Windows Azure Cloud, or even to popular web content management systems Microsoft SharePoint and DotNetNuke.

Data Aquarium Framework also offers unique extensibility after the application has been deployed. We have incorporated a few tools that allow runtime configuration of the application. The tools are a part of the source code of your application.

Dynamic Access Control List allows creating custom access control rules at runtime without making any changes to the application. Dynamic access control rules can restrict access to data based on user identity and roles. Multiple access profiles can be assigned to a single user or role. Access Profile combines multiple access restrictions and can be activated based on an optional schedule or arbitrary condition defined by administrator.

Workflow Register allows creating custom data controller modifications at runtime without making any changes to the application. Workflow Register links user identity and roles to workflow profiles. Multiple workflow profiles can be assigned to a user or role. Workflow Profile combines multiple data controller modification instructions and virtual pages that can be activated based on optional schedule or arbitrary condition defined by administrator.

Future releases of the code generator will include mobile version of the AJAX portion of the application framework and will automatically render mobile-friendly user interface.

Thursday, January 5, 2012PrintSubscribe
Baseline + Log = Cache

Code On Time has released update 6.0.0.18.

This release introduces important changes to the code generator architecture that will speed up code generation.

Understanding Baseline and Cache

The previous version of the code generator created baseline application and controller collection files every time the project is generated. The temporary baseline was deleted right after the completion of the code generation. The logs of Designer changes to the application and controller collection are stored in Application.Log.xml and Controllers.Log.xml files. The transactions from the log files were applied to the corresponding baselines during each code generation session.

Things have changed with this release.

The baselines is now permanent.

You will notice four new files as soon as you change and/or generate a project.

The files are Application.Baseline.xml, Application.Cache.xml, Controllers.Baseline.xml, and Controllers.Cache.xml.

The "baseline" files are persistent copies of the baseline app and controllers.

"Cache" files are results of applying the designer transactions from the log to the "baseline".


Application.Baseline.xml + Application.Log.xml = Application.Cache.xml

Controllers.Baseline.xml + Controllers.Log.xml = Controllers.Cache.xml


You can copy the baseline from one project to another or change the baseline in XML editor if you need to move a part of your app to another existing/new project.

The new Refresh mechanism will delete *.Cache.xml files and will also offer developer a chance to indicate if any controllers in Controllers.Baseline.xml must be replaced with the fresh copy constructed by the code generator. Application baseline will be intact. Any new "host" pages for new data controllers will be added under "New Pages" node in the application. An example of using Refresh can be found at /blog/2011/12/ease-auditing.html.

The net effect is as follows:
1. If your project has a large number of designer changes then it may take a long time to process the log. The new release will process them once and will not do so again until a Project Refresh is requested. This will bring the time to process the log to zero.

2. If you change the project in Designer then the changes are written to the *.Log.xml and to the *.Cache.xml file at the same time.

3. Introduction of baselines will eliminate the issue of controllers acquiring unwanted fields that reflect changes to the database. The application navigation menu will also remain unchanged. Any new pages constructed by the code generator will show up in a predictable "New Pages" node.

Other Changes

The list of enhancements included in the release.

  • You can now develop your applications OFFLINE even if you are not connected to the internet.
     
  • New “Social” theme is now available.
    image
     
  • The project summary page has been enhanced to offer Design, Settings, Refresh, and Generate actions.
    image 
     
  • Implementation of Created By/On and Modified By/On will not interfere with the Import.
     
  • Import correctly displays the upload controls when executed under local web development server.
     
  • New “White Smoke” theme is now available.
    image
     
  • Action bar assigns "First" and "Last" CSS classes to the corresponding action  buttons in "flat" action groups.
     
  • Annotation Icon on the action bar has been restored.
     
  • Customized properties Description and Confirmation defined on standard actions are not overwritten by default values. For example, entering a confirmation on Delete action does not require a customized HeaderText of the action.
     
  • Action "Settings" displays a list of Project Wizard shortcuts. Shortcuts provide quick access to specific configuration settings group. Button Finish is displayed in all groups to allow convenient completion of configuration.
    image 
     
  • Standard control Welcome has a margin at the bottom and will not overlap with the data views and controls that belong to the same container.
     
  • Chart view with "Show View Selector" = False will not raise an exception at runtime.
     
  • Exit from Designer while the preview is generated will not result in exception if user activtes the designer and tries to preview once more.
     
  • Referential integrity verification mechanism has been integrated in Designer. The first check is removal of any references to a data field from other categories of a data view when a data field is moved or inserted in a different category.
    A data field can exists only in once category in a view.
     
  • Horizontal scrolling position is now retained in Project Explorer when an project element is changed in Designer.
     
  • All pages of Project Wizard now feature icons in headings of pages to match the menu of page shortcuts.
       
  • Project Wizard now supports Left Shift+Next shortcut to skip the rest of the steps remaining. Left Shift + Next will proceed to the summary of data controllers.
     
  • Sample images of themes are now integrated in the Project Wizard. 
     
  • Missing "partial" attribute on ControllerUtilities class is not available.