Application Factory

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
Application Factory
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.

Thursday, January 3, 2013PrintSubscribe
Restrict Access to Actions with “Roles” Property

It is possible to restrict access to actions by a specified list of roles. If the current user is not in the list of roles, the action will not be displayed in the user interface.

For example, the Actions | Export to Spreadsheet option in the Orders controller is available to all registered users by default.

The action 'Export to Spreadsheet' is available in the Orders controller.

Let’s restrict access to this action to only users with roles of “Administrators” or “Sales Manager”.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab and double-click on Orders / Actions /ag5 (ActionBar) – Actions / a3 – ExportRowset node.

Action 'a3' in action group 'ag5' of Orders controller.

Change the Roles property:

Property Value
Roles Administrators, Sales Manager

Press OK to save. On the toolbar, press Browse.

Log in with the standard user account (user / user123%) and navigate to the Orders page. The Export to Spreadsheet action will not longer be available.

The action 'Export to Spreadsheet' is no longer available in the Orders controller.

Log out, and log in again with the administrative account (admin / admin123%). The action will be available.

Saturday, December 8, 2012PrintSubscribe
HR Sample App (Oracle)

Sample database HR (Human Resources) comes standard with Oracle database server. Let’s create a web application straight from this database.

Getting Oracle on Your Computer

First, download the Oracle Database Express Edition 11g Release 2 installation files.

When the download is complete, extract the zip folder. Run the file at DISK1\setup.exe. Follow the steps to install Oracle Express Edition 11g on your computer.

When the database server has been installed, log in to the management website. The link to the page is available at C:\oraclexe\app\oracle\product\11.2.0\server\Get_Started.url. In the web browser, click on the Application Express tab, and create a workspace in order to access the database.

Native vs. Managed Data Provider

Code On Time web application generator creates web apps based on Microsoft ASP.NET, a component of Microsoft.NET technology. Database vendors offer middleware that allows ASP.NET applications to communicate with their servers. Oracle offers two providers:

The ODP.NET (Oracle Data Provider) is included in the Oracle Data Access Components (ODAC) for Windows package. The provider is a managed .NET wrapper that “speaks” to unmanaged native API of Oracle database server.

Because of this mix of managed and unmanaged code, there is a need to install both 32-bit and 64-bit versions of ODP.NET when working with Windows 7 and 8. Some components of development tools for Windows support only 32-bit architecture. Each version of ODP is around 230 MB in size.

The ODP.NET, Managed Driver is less than 2 MB in size and written purely in .NET. It has better performance and is easier to configure. This is the recommended .NET provider for ASP.NET web applications.

Click on one of the links above and install one of the providers for Oracle.

Creating a Web Application

Start the code generator, and click on the Create a new web application link on the start page. Select Web Site Factory to create the project.

Creating a 'Web Site Factory' project on the New Project screen.

Assign the project a name of “HR”, select the programming language of your choice (C# or Visual Basic), and press Create.

Assigning a name of 'HR' to the project.

Leave the default Namespace and Framework values and press Next.

Select the desired ODP provider in the Data Provider dropdown, and click on the “…” button next to Connection String field to access the Oracle Connection screen.

Selecting the 'Oracle Data Provider for .NET, Managed Driver' for the Data provider dropdown on the Database Connection screen.

'Oracle Data Provider for .NET' data provider selected. The '...' button next to Connection String field will activate the 'Oracle Connection' screen.

Enter your Server name, User name, and Password in the appropriate fields.

If you are working with Oracle Express Edition and using ODP.NET Managed Driver, leave the Server name blank. If you are using ODP.NET , then enter “127.0.0.1” in the Server name.

Press the Test button to test the connection string.

Alert showing that test connection succeeded for the Oracle connection string.

Press OK to dismiss the Connection Status window, and press OK to insert the configured connection string into the field.

Press Next twice to reach the Reporting page. Check the box to enable reporting.

Enabling reporting for the web application.

Press Next to reach the Themes page. Select Social from the list box.

Selecting a theme for the web application.

Hold down Shift, and press Next to skip to the Summary screen.

Activating the 'Generate' button on the Summary screen.

Press Generate to start the code generation. A window will open in your default web browser with the web app when complete.

Generated web application loaded in the default web browser.

Learn how to configure Custom Membership and Role Provider for your Oracle database.