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
Friday, August 29, 2008PrintSubscribe
Code OnTime Generator Update

The latest release of code generator has resolved the issue of "Access Denied" that has been experienced by some users trying to install the code generation library or to register a premium projects subscription.

New typeConstructor element allows to generate a static or shared constructor for a type. For example, you can declare the following type member in a class:

<typeConstructor>
  <statements>
    <assignStatement>
      <fieldReferenceExpression name="typeMap"/>
      <objectCreateExpression type="SortedDictionary">
        <typeArguments>
          <typeReference type="System.String"/>
          <typeReference type="Type"/>
        </typeArguments>
      </objectCreateExpression>
    </assignStatement>
  </statements>
</typeConstructor>

This will result in the following code being generated.

C#:

static Controller()
{
    _typeMap = new SortedDictionary<string, Type>();
}

VB.NET:

Shared Sub New()
    m_TypeMap = New SortedDictionary(Of String, Type)()
End Sub

There were also minor code generator changes that allow to skip target definition in delegateCreateExpression and eventReferenceExpression elements. The missing target is automatically defaulted to thisReferenceExpression.

Project descriptor CodeOnTime.Project.xml file now supports two additional elements in the information section. You can supply a link to a live demo application and a link to a detailed project description. Here is a snippet from the project descriptor of Data Aquarium Framework code generator project.

  <information>
    <product>COT200805-DA</product>
    <title>Data Aquarium Framework</title>
    .......
    <website>http://www.codeontime.com</website>
    <about>http://www.codeontime.com/productsdaf.aspx</about>
    <demo>http://dev.codeontime.com/demo/northwind</demo>
  </information>
Wednesday, August 20, 2008PrintSubscribe
Alternative Unique Key Fix

Code OnTime Generator is using a collection of queries to interrogate a database schema when any code generator project involving database interaction is generated. File [My Documents]\Code OnTime\Library\_Config \CodeOnTime.ModelMap.xml defines a collection of queries that are used to discover the database metadata. Data provider System.Data.SqlClient  has an entry named PrimaryKeyColumns that was incorrectly determining the primary key columns. The query has been retrieving both primary keys and alternative unique keys. Alternative unique keys should be ignored.

Generated projects were treating fields included in the alternative unique keys as if they were the fields of the primary key.

We have replaced the query with the following:

select kcu.*
from information_schema.key_column_usage kcu 
    inner join information_schema.table_constraints tc on
        kcu.constraint_catalog = tc.constraint_catalog and
        kcu.constraint_schema = tc.constraint_schema and
        kcu.constraint_name = tc.constraint_name 
where 
    tc.constraint_type = 'PRIMARY KEY'

The fix has been deployed. Simply start CodeOnTime.exe and you will be prompted to download the update.

If you do have a database table with any fields included in a UNIQUE INDEX then open you project and proceed to the Database Connection section of your project. There is a link "Click here if your database has changed and you would like to refresh the cached metadata." Click on the link to reset the metadata and generate the project again. The problem will go away.

Sunday, May 25, 2008PrintSubscribe
Getting Started

Code generation is a well-established technique of software development. Modern development tools are using code generation whenever there is a need to create a chunk of source code of a well-known structure. For example, plumbing code to interact with a web service or a business object layer library for a database are both good candidates to be outsourced to a code generator.

How difficult is it to create a code generator?

Consider Microsoft.NET Framework. A dedicated namespace System.CodeDom is provided to allow easy programmatic creation of source code trees with additional classes capable to convert a code tree into actual source code in the .NET language of your choice. You can even compile the code directly from the tree and have it executed! So the answer to the question is that it is not that difficult if you are relying on a toolset such as Microsoft.NET.

Why would you want to build a code generator?

The reality of software development is that it is not enough anymore to have a great hierarchy of classes that can be reused by many projects. To be productive you need an initial set of source code files that are linked to a great class library and shaped to solve a specific business problem. This is especially true if you are interacting with the databases, invoking external web services, or building user interface screens. Most of these tasks can be done with automatic code generation tools.

Take a look at the great example below. The ASP.NET 3.5 web application with Ajax Control Toolkit and JSON web service is running right in the middle of the page and was created with .

This shows that very sophisticated applications can be instantly created given the right set of tools. The development process is considerably shorter - in seconds you are ready to start tackling the real business problems instead of figuring how to write client AJAX calls to your JSON web service.

How do you build a great code generator?

A code generation project requires some sort of database to store project requirements specified by the user. The most lightweight, flexible and universally supported medium is XML. Another popular choice is to store project settings in the database. Database does make it more difficult to alter project structure and creates sometimes additional level of complexity, which might not be needed.

XML naturally suggests three other technologies - XSD, XPath, and XSLT.

Use XSD schemas to ensure that users are not making mistakes when populating project files. Tools, such as , will automatically recognize the schemas and assist with intelli-sense when users are working with the XML source.

XPath is great if you need to create a project builder for your code generator. You can easily inspect the content of the project XML files and allow the code generator to make decisions about the steps that need to be executed.

Transform and shape the project data with XSLT stylesheets. For example, you can come up with an intermediate form of source code that will be naturally produced by applying XSLT transformations to the project XML files and have them later converted into the source code. Don't reinvent the wheel, go with System.CodeDom or any other comparable technology available in other programming platforms, to do such conversion.

A great code generator will provide capability to write user interface forms to help user in configuring the projects. The best bet is to use HTML and AJAX techniques to create a project browser. The scripts running in the pages can interact with the XML files and provide user input to the code generator.

Download Code OnTime Generator now