Blog: Posts from February, 2013

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(8) OAuth Scopes(1) OAuth2(11) Offline(20) Offline Apps(4) Offline Sync(5) Oracle(10) PKCE(2) PostgreSQL(2) PWA(2) QR codes(2) Rapid Application Development(5) Reading Pane(2) Release Notes(180) Reports(48) REST(29) RESTful(29) RESTful Workshop(15) RFID tags(1) SaaS(7) Security(80) 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
Posts from February, 2013
Tuesday, February 19, 2013PrintSubscribe
PostgreSQL Sample Web Application

The PosgreSQL open-source database management system offers several sample databases. One of these samples is Pagila, a conversion of the sakila sample database from MySQL. Let’s use Code On Time generator to create a web app straight from this database.

Installing PostgreSQL and Pagila

First, download the correct version of PostgreSQL for your computer. Run the installer and follow the instructions to complete the installation.

Next, download the Pagila sample database. Follow the README file instructions to install the database.

Registering NpgSQL .NET Data Provider in GAC

We will be using NpgSQL .NET Data Provider to connect to the PostgreSQL database engine. This data provider is designed by the vender to be deployed alongside the binary files of a .NET web application to eliminate any need to install client software. Code On Time generator and produced web apps use a provider-independent model when interacting with the application database. This model of database access requires registration of native data providers in the Global Assembly Cache (GAC). Follow the instructions below to register the Npgsql data provider in GAC.

Download the NpgSQL .NET 4.0 Provider for PostgreSQL. Extract the contents of the zip file.

Run cmd.exe as administrator.

Running the command prompt as administrator.

Use the following command to navigate to the location of “gacutil.exe” tool. The tool will be present if Visual Studio is installed. Otherwise, install the Microsoft SDK for .NET Framework 4.0. The location and version of the SDK may be different on your computer.

cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools

Next, run the following line to register the data provider in the Global Assembly Cache. Make sure to use the correct path to the extracted “Npgsql.dll” file.

gacutil.exe /i "[Path]\Npgsql.dll"

If the installation was successful, you will see the text “Assembly successfully added to the cache”.

Installation of Npqsql to the global assembly cache was successful.

Repeat the process to install the second required DLL using the following line.

gacutil.exe /i "[Path]\Mono.Security.dll"

The next step will be to add a reference in the machine.config file for both 32-bit and 64-bit versions of Microsoft.NET.

You must update both configuration files on 64-bit machines.

Run Visual Studio as an administrator.

Running Visual Studio as administrator.

On the toolbar, press File | Open | File.

Opening a file in Visual Studio 2012.

Open the 32-bit machine.config file, located at C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config.

Within the XML file, locate the configuration/system.data/DbProviderFactories section. Add the following line inside the section. Note that your data provider version may be different.

<add name="Npgsql Data Provider" invariant="Npgsql"  support="FF" description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
Save the file. 

Open the 64-bit machine.config file, located at C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config. Add the same configuration element inside configuration/system.data/DbProviderFactories.

Save the file. The provider is now configured.

Creating a Web Application

Start Code On Time web application generator. Click on Create new web application. Select Web Site Factory from the list.

Creating a Web Site Factory project.

Assign a name of “PagilaDemo”, select the programming language of your choice, and press Create.

Assigning a name to the project.

Preserve the default Namespace and Framework, and press Next.

On the Database Connection page, select “.Net Framework Data Provider for Posgresql Server” for Data Provider. Then, click on the “…” button next to Connection String field.

Specifying Npgsql Provider as the data provider and activating the connection string configuration screen.

Enter the connection string properties and press Test to confirm.

Successful test of PostgreSQL connection string.

Press OK to use the configured connection string. Press Next until you reach the Reports screen. Check the box to enable reporting.

Enabling reports in the web application.

Press Next until you reach the Theme page. Select “Yoshi” from the list.

Selecting 'Yoshi' theme on the Theme page of the Project Wizard.

Hold down Shift key and press Next to skip to the Summary page. Press Generate and wait for the web app to load in the default browser.

Pagila web app running in Internet Explorer 9.

Wednesday, February 13, 2013PrintSubscribe
Roadmap 2013

Code On Time web app generator has introduced impressive capabilities for rapid application development over the last year.

We will continue introducing new easy-to-use features in the design environment and application framework.

The features will be delivered in three phases followed by an introduction of a new product, http://cloudontime.com.

Phase I

  • Second Generation Data Sheet view with support for hierarchies, horizontal and vertical scrolling, column resizing, reordering and freezing is the industry’s first web grid that rivals features and performance of desktop implementations.
  • Tools for Excel is a new design tool providing an alternative application development environment integrated in Microsoft Excel. Both beginners and power users will benefit from the ability to perform massive rapid changes to the project configuration elements.
  • Mobile Client Library will enable creating a single web app that adapts its presentation on mobile and desktop devices. Existing web apps created with Unlimited edition of Code On Time will automatically take advantage of the new client library. Developers will have an option to introduce desktop-only and mobile-only pages.
  • Multi-User Support in Designer will enable automated merging of designer transaction logs from multiple users.

These features will begin rolling out starting in February of 2013.

Phase II

  • Support for ASP.NET 4.5 will be introduced in the application framework.
  • DotNetNuke Factory will be updated to support DNN 7.
  • BLOB Adapters will enable code-free configuration of binary content processing with externalized storage in the file system with optional image preprocessing. Windows Azure Storage will also be supported as a replacement for the file system.
  • Native Import processor will handle uploaded files in CSV format without the need for Microsoft Access Database Engine to be deployed to the server.

Phase III

  • Map View is a new view type that will enable presentation of data on Google Maps and Bing Maps.
  • Enhanced Lookup Styles will enable “basket” presentation of many-to-many fields with extended item selectors.
  • List View is a new view type that will enable presentation of multi-column lists of data items.
  • Calendar View is a new view type that will enable presentation of data as a generic calendar with drag and drop support.

Cloud On Time

Adding a few extra ingredients to a live web app created with Code On Time can turn an application into a full-fledged Software-as-a-Service solution.

For the past year we have been developing enterprise-level tools to enable code-free implementation of Dynamic Access Control Rules and data controller Virtualization Rules. Both tools require additional tables to be included in the application database.  New view types finally allow us to create high quality administrative user interface for these tools.

One of the required ingredients of a SaaS solution is a content management system. A built-in CMS allows creating and managing virtual pages that can be stored alongside the Virtualization Rules.

Another ingredient is an online data controller designer. Such tool can be used to alter application data controllers at runtime and allow creating new ones. Our experience in developing the Project Designer built into the application generator shows that it can be accomplished with relative ease following the same model.

Combine all four ingredients together (Dynamic Access Control Rules, Virtualization Rules, Content Management System, and Online Data Controller Designer) in an Azure Factory project, and you will have an Online Application Builder hosted in Windows Azure Cloud.

How would one program a hosted web app with the Online Application Builder? Every app will be provided with a private Windows Azure SQL Database. SQL business rules and JavaScript business rules will be the two available programming facilities that will require no changes to the core application. The core application will have an embedded RESTful Application Server component to enable complex one-of-a-kind user interface development when needed.

Management tools for Dynamic Access Control Rules, Virtualization Rules, and Content Management System will be incorporated into the core application framework and become available to Code On Time developers shortly before Cloud On Time goes live.

It will be possible to export a hosted Cloud On Time web app to a private Cloud Factory project that will be supported in Code On Time web application generator.

Wednesday, February 13, 2013PrintSubscribe
Setting Default Value for Lookup Fields

A common enhancement in line-of-business web applications is to provide default values when a new record is being created. Default values may be set using an SQL business rule. However, lookup fields require two fields to be populated – one value for the actual foreign key column in the table (typically a unique identifier or Guid) and another value for the alias field (typically the name of the lookup item).

For example, the ReportsTo column of the Employees table in the Northwind sample database contains the EmployeeID of the manager employee. A default web application created from this database creates an alias field ReportsToLastName. This virtual field is selected from the parent table and displayed as the value.

ReportsTo data field in editForm1 of Employees controller has an alias of 'ReportsToLastName'.

If a default value is set for the ReportsTo field, the display text will not be updated and will appear to be null. However, when the user saves the record, the ReportsToLastName field value will be calculated and displayed properly.

To ensure that the last name is displayed, let’s create an SQL business rule that will populate both ReportsTo and ReportsToLastName.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Employees / Business Rules node, and press New Business Rule.

Creating a new business rule for Employees controller.

Select one of the following methods below.

SQL Business Rule

Assign the following values:

Property Value
Type SQL
Command Name New
Phase Execute
Script
set @ReportsTo = 1
set @ReportsToLastName = 'Fuller'

Press OK to save the business rule.

JavaScript Business Rule

Assign the following values:

Property Value
Type JavaScript
Command Name New
Phase After
Script
set @ReportsTo = 1
set @ReportsToLastName = 'Fuller'

Press OK to save the business rule.

C# / Visual Basic Business Rule

Assign the following values:

Property Value
Type C# / Visual Basic
Command Name New
Phase Execute

Press OK to save. On the toolbar, press Browse to generate the business rule file.

When complete, right-click on Employees / Business Rules / New (Code / After) – r100 and press Edit Rule in Visual Studio.

Editing the rule in Visual Studio.

The file will open in Visual Studio. Replace the code base with the following:

C#:

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

namespace MyCompany.Rules
{
    public partial class EmployeesBusinessRules : MyCompany.Data.BusinessRules
    {
        [Rule("r100")]
        public void r100Implementation(
                    int? employeeID, 
                    string lastName, 
                    string firstName, 
                    string title, 
                    string titleOfCourtesy, 
                    DateTime? birthDate, 
                    DateTime? hireDate, 
                    string address, 
                    string city, 
                    string region, 
                    string postalCode, 
                    string country, 
                    string homePhone, 
                    string extension, 
                    string notes, 
                    int? reportsTo, 
                    string reportsToLastName, 
                    string photoPath)
        {
            UpdateFieldValue("ReportsTo", 1);
            UpdateFieldValue("ReportsToLastName", "Fuller");
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq
Imports System.Text.RegularExpressions
Imports System.Web
Imports System.Web.Security

Namespace MyCompany.Rules
    
    Partial Public Class EmployeesBusinessRules
        Inherits MyCompany.Data.BusinessRules
        <Rule("r100")>  _
        Public Sub r100Implementation( _
                    ByVal employeeID As Nullable(Of Integer),  _
                    ByVal lastName As String,  _
                    ByVal firstName As String,  _
                    ByVal title As String,  _
                    ByVal titleOfCourtesy As String,  _
                    ByVal birthDate As Nullable(Of DateTime),  _
                    ByVal hireDate As Nullable(Of DateTime),  _
                    ByVal address As String,  _
                    ByVal city As String,  _
                    ByVal region As String,  _
                    ByVal postalCode As String,  _
                    ByVal country As String,  _
                    ByVal homePhone As String,  _
                    ByVal extension As String,  _
                    ByVal notes As String,  _
                    ByVal reportsTo As Nullable(Of Integer),  _
                    ByVal reportsToLastName As String,  _
                    ByVal photoPath As String)
            UpdateFieldValue("ReportsTo", 1)
            UpdateFieldValue("ReportsToLastName", "Fuller")
        End Sub
    End Class
End Namespace

Viewing the Results

On the toolbar, press Browse.

Navigate to the Employees page. On the action bar, press New Employees. Note that the default value for Reports To field is correctly displayed.

Default value for Reports To has been populated and displays correctly.