Code Generator

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
Code Generator
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.

Saturday, November 19, 2011PrintSubscribe
Designer and Explorer – The New Look Of Code On Time

Code On Time web application generator has a new look.

The New Project page is fundamentally the same and will soon feature a new project option – SharePoint Factory.

image

My Projects page has been simplified.

We have removed the Actions column and widened the community section.

image

A menu of project actions is available when you click on the project name. These include previously available actions and some useful shortcuts.

image

Project Designer is loaded upon selection of Design action.

Tabs on the start page of Designer have been rearranged. The first three tabs are Pages, Controllers, and User Controls to reflect the development workflow.

Project Explorer is displayed on right-hand side of the window. Three tabs at the bottom of the Explorer allow management of Pages, Controllers, and User Controls.

Selection of nodes in the tree view activates the relevant page in the Designer.

The tree on the Pages tab provides a unified view of all application resources including pages, containers, data views, fields, actions, and user controls.

image

Project Designer features a fixed tool bar with actions Generate, Browse and Exit. It is now possible to generate and preview application without leaving the design environment.

Generate button will generate the app and launch it in a built-in Preview browser.

Browse button will generate the app and launch it in your default web browser.

image