Application Builder

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
Application Builder
Wednesday, December 26, 2012PrintSubscribe
Web Transactions with “Status” Field

A dedicated “Status” field in a database table is a simple and easy to implement method of separating “draft” and “committed” data. For example, orders stored in a database will be explicitly marked with a status of “Committed” if no changes are allowed to them. Orders still being composed will be marked with a status of “Draft”. The application must ignore draft data and have it visible only on the order entry page.

Adding the “Status” Column

Start SQL Server Management Studio. In the Object Explorer, right-click on Databases / Northwind and press New Query.

Creating a new query for Northwind database.

Paste in the following script to add the table column and mark all existing orders as “Committed”.

alter table Orders
add Status nvarchar(50) default 'Draft'
go

update Orders
set Status = 'Committed'
go

On the toolbar, press Execute to run the query.

Controlling Display of Draft Orders

Start the web application generator. Select the project name and click Settings. Press Business Logic Layer and enable shared business rules. Click Finish and regenerate the project.

Enabling shared business rules.

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Orders controller node, and press Edit Handler in Visual Studio.

Using the context menu action to edit the handler in Visual Studio.

The shared business rule file will open in Visual Studio. Replace the file with the following code:

C#:

using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class SharedBusinessRules : MyCompany.Data.BusinessRules
    {
        
        public SharedBusinessRules()
        {
        }

        protected override void EnumerateDynamicAccessControlRules(string controllerName)
        {
            if (Context.Request.UrlReferrer != null)
            {
                if (Context.Request.UrlReferrer.ToString().ToLower().Contains("orderform.aspx"))
                    RegisterAccessControlRule("OrderID", 
                        "select OrderID from Orders where Status = 'Draft'", 
                        AccessPermission.Allow);
                else
                    RegisterAccessControlRule("OrderID", 
                        "select OrderID from Orders where Status = 'Committed'", 
                        AccessPermission.Allow);
            }
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Linq

Namespace MyCompany.Rules

    Partial Public Class SharedBusinessRules
        Inherits MyCompany.Data.BusinessRules

        Public Sub New()
            MyBase.New()
        End Sub

        Protected Overrides Sub EnumerateDynamicAccessControlRules(controllerName As String)
            If Context.Request.UrlReferrer <> Nothing Then
                If Context.Request.UrlReferrer.ToString().ToLower().Contains("orderform.aspx") Then
                    RegisterAccessControlRule("OrderID",
                                            "select OrderID from Orders where Status = 'Draft'",
                                            AccessPermission.Allow)
                Else
                    RegisterAccessControlRule("OrderID",
                                            "select OrderID from Orders where Status = 'Committed'",
                                            AccessPermission.Allow)
                End If
            End If
        End Sub
    End Class
End Namespace

The implementation will conditionally register a dynamic access control rule that will apply to a view of any data controller with an OrderID data field. If the user is interacting with an application page ~/Pages/OrderForm.aspx, then only data that matches orders with a status of “Draft” is allowed. Otherwise, only data that matches orders with a status of “Committed” is included in the returned data set.

Adding “Submit Order” Action

In the Project Explorer, right-click on Orders / Actions / ag2 (Form) node, and press New Action.

Context menu option 'New Action' for action group 'ag2'.

Assign the following values:

Property Value
Command Name Custom
Command Argument SubmitOrder
Header Text Submit Order

Press OK to save the action. Drop Orders / Actions / ag2 (Form) / a101 – Custom, SubmitOrder | Submit Order node on the left side of a100 – Report | Order Report to place it first.

Dropping action 'a101' on the left side of 'a100'.     Action 'a101' has been placed first in the form.

Adding Business Rule

Right-click on Orders / Business Rules node, and press New Business Rule.

Creating a new business rule for Orders controller.

Assign these values:

Property Value
Type SQL
Command Name Custom
Command Argument SubmitOrder
Phase Execute
Script
update Orders
set Status = 'Committed'
where OrderID = @OrderID

set @Result_NavigateUrl = 'OrderForm.aspx'

The business rule will set Status column of the selected order to “Committed” and refresh the page loaded in the web browser. Press OK to save.

Testing the Results

On the toolbar, press Browse. Navigate to the Order Form page. Create a new order and return to the grid. Note that only a single draft order is listed.

A single draft order is displayed in the Order Form list.

Navigate to the Orders page. Note that the all of the orders are displayed except for the draft order.

Orders page only displays committed orders.

The draft order will also not be visible in any data controllers based on database views if they relate to orders. For example, page Reports | Order Subtotals will not display the new order. The dynamic access control rule explained above filters the order out.

Other views and reports will not display draft reports.

Go back to the Order Form page, and select the draft order. Click on the “Submit Order” button.

Clicking on the 'Submit Order' button in the Order Form.

The browser will refresh the page and display an empty list of orders.

The Order Form grid does not display any records.

The order will now be displayed on Orders page.

The committed order is now displayed on Orders page.

It will also be displayed on Order Subtotals page that can be found under the Reports option in the application navigation menu.

Committed order displayed on Order Subtotals page.

Monday, December 24, 2012PrintSubscribe
Overview of Reporting Capabilities

Web applications created with Code On Time include default reporting actions when reporting has been enabled.

Default reporting actions in a web application created with Code On Time.

When a user activates a Report action, the application framework will transform the relevant data controller XML file into a report definition file (RDLC) with the help of a default report template written in XSLT. The report definition and dataset with active filters and sort order will be passed to Microsoft Report Viewer. The Viewer will produce a report output in PDF, Excel (XLS), Image (TIFF), or Word (DOC) format.

The pictures below shows samples of default reports rendered in PDF and Word formats.

Default PDF report using the standard report template.

Sample of default report rendered in Word format.

Several properties of the data controller view can alter automatic construction of the report definition file:

Property Description
Report Font Changes the size of the font in the report. Options available are X-Large, Large, Medium, Small, X-Small. The default is “Medium”.
Report Label Specifies the text displayed in the header of the report.
Report Orientation Manually specifies the orientation of the page. By default, reports with more than seven fields will be rendered in landscape mode. Otherwise, the report will be portrait.

For example, the next picture uses a Report Font of “X-Large”.

Report with a font of 'X-Large'.

The default XSLT report template can be customized in order to change the automatically constructed report definition files. When this template is changed, all reports will reflect the changes. For example, the picture below shows the modified footer element that now includes a copyright message.

Report created from default report template now has copyright information displayed in the bottom left corner.

When it is necessary to create a fully custom report beyond the available options, a custom report template may be created for the view. This will generate a report template at design-time. The RDLC file can be designed in Visual Studio.

Custom report template RDLC file selected in the Solution Explorer.

For example, the Order Form Sample shows how to create a custom Order Report. This report will group order details by customer, and then by order. It has multiple calculated fields, such as Extended Price, Subtotal, and Total.

PDF report displaying orders of the specific customer.

Development of a custom report definition file involves either an extended field dictionary of a data controller, or a brand new data controller based on a database view. A dedicated report view must be defined to provide the field model for a custom report. The developer can remove the pre-configured elements from the custom report definition file or rearrange them in Visual Studio.

The simplest implementation of a master-detail report requires setting up a tablix element and placing master fields in the header and footer of the report. The report definition language offers rich field formatting capabilities supported in Visual Studio.

The last step is to configure a Report action in a data controller to activate the custom report.

A custom report may be implemented with multi-level grouping when data rows of multiple logical entities are included in the report data set. These reports can be activated from multiple data controllers with controller-specific filters.

The reporting actions may have a custom handler that will produce an arbitrary output. Custom parameters can be collected from the application user, data row selected on the client, or URL in the address bar of the browser. These parameters will be passed to the report handler.

A web application created with Code On Time can be integrated with third-party reporting solutions with the help of Navigate action. Another alternative is to configure a Hyperlink Format String for a data field in the view.

Monday, December 24, 2012PrintSubscribe
“Report (Image)” Action

The Report (Image) action will generate a report in multi-page TIFF format. The picture below shows the default Report (Image) action, labeled “Multipage Image”, highlighted in the Report menu on the action bar.

'Multipage Image' option activates the Report (Image) action in the Report menu.

The report will be opened in the default image viewer associated with .tif extension.

TIFF report opened in Windows Photo Viewer.