Reports

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
Reports
Monday, July 14, 2014PrintSubscribe
Map View, Master-Detail Pages, Custom Result Sets, Client-Side APIs

Code On Time release 8.0.6.0 introduces countless enhancements to Touch UI - the unified user interface of mobile and desktop applications created with our app generator. Developers can now select a default user interface model for the apps in all product editions. The two options are Touch UI and Desktop. Applications created with Unlimited edition support both user interface models simultaneously.

Notable enhancements include:

  • Support for exact and negative search in Quick Find. For example, “USA” –“ak” will yield a list of customers from the United Stated with the exception of those located in Alaska.
  • Map view is now available in Touch UI.
  • Complex Master-detail pages are now supported in Touch UI.
  • Custom result sets based on arbitrary SQL queries, stored procedures, and web services with automatic support for filtering and sorting can now be utilized in applications. The tutorials are coming up.
  • Client-side  API has been extended with the method $app.execute. This method allows easy selection of data on the client and execution of arbitrary commands.  The tutorials will become available shortly. This method is the core of the custom GUI development in http://cloudontime.com. It performs a function similar to REST API, but works in all product editions. REST API does not require client libraries of apps created with Code On Time. The new method $app.execute works only within application and cannot be used independently.
  • Client-side API has been extended with the method Web.DataView.search. This method allows activating search in a data view on the page with filter and sort expressions defined by a developer.

Touch UI apps created with Code On Time work on all devices with an optional ability to degrade user interface in Inernet Explorer 6-9.

Touch UI automatically creates complex layouts with tabs and any number of levels of master-detail relationships.

Touch UI supports complex tabbed layout in apps created with Code On Time

Map view works on all types of devices:

Map view is a core automatic feature of Touch UI applications created with Code On Time.

The following features and enhancements are included in this release:

  • Developers can choose user interface for Azure Factory, Web App Factory, and Web Site Factory projects in the Settings /Namespace, Framework and UI section.
  • All settings of Touch UI applications can be configured in the Settings / Features / Touch UI section of application configuration.
  • Map view style is now available in Touch UI applications.
  • End users can choose Form Label Alignment in an app.
  • End users can choose Position of List Labels  in an app as.
  • Touch UI applications offer 38 built-in themes.
  • Developers can now specify default themes for pages.
  • End users can control Display Density of application pages.
  • End users can choose page transitions in apps with Touch UI.
  • Fixed the bug causing SQL business rules not being executed on each row when multi-select is enabled.
  • Data controller "Execute" method has been refactored for improved processing of multiple selected rows submitted from the client.
  • Fixed the incorrect multi-value adaptive filtering of lookup fields in Desktop UI.
  • Touch UI now uses minified CSS stylesheets.
  • JQuery Mobile 1.4.3 framework is the core of the Touch UI applications.
  • Methods $app.execute and Web.DataView.search are now supported.
    The first allows server-side requests to SELECT/UPDATE/INSERT/DELETE data on the server. The second method allows passing "sortExpresson" and "filter" to a data view to sync data. Method $app.execute also supports "Report" action.
  • Quick Find filter now uses a system name "_quickfind_" parameter to enable filtering operations on the first field in the view.
  • User controls generated "First Time Only" now include a standard template for Touch UI.
  • EASE configuration will not assign "mailto" if the field already has a HyperlinkFormatString.
  • Added fix in Controller.Filter for fields that are shorter than the search query.
  • Added Quick Find support for "exact matches" and -negative results.
  • Fixed charts not rendering in reports due to view access not being validated.
  • Data views can be tagged as display-style-grid, display-style-list, display-style-listonecolumn, and display-style-map to force a specific presentation style on all devices.
  • Renamed “Device” property of pages to "User Interface". The valid values are "Touch UI" and “Desktop”.
Monday, June 16, 2014PrintSubscribe
Deployment: Installing Report Viewer 2012

If you have enabled dynamic and static reports for the app, then the Reports menu option is available in the user interface.

Report menu button in the local app.

Selecting any report option will cause the app to produce a PDF, TIFF, Excel, or Microsoft Word document with reporting data.

The various default reporting options.

If Report Viewer is not installed on the machine, any attempt to start the application will display the error message below stating that “Could not load file or assembly Microsoft.ReportViewer.WebForms…”.

Error message displayed when Report Viewer is not installed.

If you do not need reporting or have enabled it by mistake, then select your project in the app generator, choose Settings, select Reporting, and uncheck “Enable dynamic and static reports in my application”. Click Finish to regenerate the app. You may also consider refreshing all controllers to remove the reporting actions from the user interface.

If you do need built-in reporting in your app, then you need to install Microsoft Report Viewer on your deployment machine.

You will need the following files. It is advisable to download them on your personal machine and then copy them onto the server over Remote Desktop Connection (RDC).

  1. Microsoft Report Viewer 2012 Runtime
  2. Microsoft Web Platform Installer

Connect to your server via RDC. Copy the files into the Downloads folder of the server.

Installing SQL Server SQL Types

If SQL Server is not present on the server, then you will need to install Microsoft SQL Server 2012 CLR Types component.

Execute the Web Platform installer file by double-clicking on the “wpilauncher” file.

Executing the Web Platform Installer launcher executable.

When installation is complete, the Web Platform Installer will open. In the search box, type in “CLR” and hit Enter on your keyboard.

Installing MS System CLR types for SQL Server using Web Platform Installer 5.0.

Press Add next to the first item in the list, then press Install. Accept the license terms to proceed.

Installing MS System CLR types for SQL Server using Web Platform Installer 5.0.

Installing Report Viewer

Switch back to the Downloads folder. Double-click on the “ReportViewer” file.

Installing Microsoft Report Viewer 2012 Runtime.

Press Next, then accept the license to install Report Viewer.

This procedure will need to be done on both your development machine and your server.

Monday, June 3, 2013PrintSubscribe
Handling the “Report…” Action

Code On Time web applications support out-of-the-box reporting capabilities that require zero programming.

Standard Report Actions

All data views offer four standard actions that yield a different output.

  • Action “ReportAsPdf” will render the data presented to end users as a Adobe PDF document. The shorthand action “Report” will produce the same result. This type of report requires a compatible software installed on the client computer to view and print the report output. You can download free Adobe Acrobat Reader at at http://get.adobe.com/reader.
     
  • Action “ReportAsImage” creates a TIFF image file, which requires a compatible software installed on the client. TIFF format supports multiple pages and is a perfect alternative to PDF. The quality of output in PDF and TIFF formats is equivalent.
     
  • Action “ReportAsWord” renders a report as a Microsoft Word document with a high-quality output. In some instances, the output is less precise than the output produced by the action “ReportAsImage” and “ReportAsPdf”.
     
  • Action “ReportAsExcel” produces a Microsoft Excel spreadsheet that offer a lesser quality output due to rendering restrictions of Excel files.

If a user  requests a “Report...” action then a report is rendered on the server with the help of Microsoft Report Viewer. The output is streamed to the client browser. Typically a prompt is displayed before a compatible installed software viewer will be activated. Users also have an option to save the output locally. If a viewer is not installed on the client computer, then the prompt to save the file is the only option.

Code On Time web applications execute various server calls off-band to provide a smooth Web 2.0 user experience. Modern web browsers make sure to prevent all sorts of popups initiated by the scripts embedded in the web pages. The client library makes use of correct techniques to process reports on the server without triggering popup blockers.

Custom Report Action Handlers

Code On Time web applications created with version 6.0.0.19 or higher allow developers to perform custom processing of reporting actions in business rules. There are several reasons that may require an execution of  custom code that must precede or override the standard report rendering logic:

  • The data must be “prepared” before a report is rendered.
  • The report request must be logged.
  • An external report rendering engine is available. The custom code will redirect the report request to such an engine.
  • A special report preview page needs to be displayed.
  • A custom report building code must execute. The custom code replaces the standard report rendering logic.

To modify the behavior of the Report action, create a business rule and implement methods to handle the corresponding “Report...” actions.

Passing Action To An External URL

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Right-click on Customers / Actions node, and press New Action Group.

Adding a new action group to Customers controller.

Assign the following value:

Property Value
Scope Action Column

Save the new action group. Right-click on Customers / Actions / ag100 (ActionColumn) and press New Action.

Adding a new action to action group 'ag100'.

Assign these values:

Property Value
Command Name Report
Command Argument _blank

Press OK to save. Right-click on Customers / Business Rules node, and press New Business Rule.

Adding a new business rule to Customers controller.

Assign the following values:

Property Value
Type C# / Visual Basic
Command Name Report
Command Argument _blank
Phase Execute

Save the business rule. Press Browse on the toolbar to generate the business rule file.

When complete, right-click on Customers / Business Rules / Report, _blank (Code / Execute) – r100 node and press Edit Rule in Visual Studio.

Opening the business rule file in Visual Studio.

The file will be opened in Visual Studio. Replace the existing code base with the following:

C#:

using System;
using MyCompany.Data;

namespace MyCompany.Rules
{
    public partial class CustomersBusinessRules : MyCompany.Data.BusinessRules
    {
        [Rule("r100")]
        public void r100Implementation(string customerID, 
            string companyName, 
            string contactName, 
            string contactTitle, 
            string address, 
            string city, 
            string region, 
            string postalCode, 
            string country, 
            string phone, 
            string fax)
        {
            // Redirect user to another URL
            Result.NavigateUrl = String.Format(
                "~/Pages/Customers.aspx?CustomerID={0}&_controller=Customers" +
                "&_commandName=Select&_commandArgument=editForm1",
                customerID);
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System

Namespace MyCompany.Rules
    
    Partial Public Class CustomersBusinessRules
        Inherits MyCompany.Data.BusinessRules
        <Rule("r100")> _
        Public Sub r100Implementation(ByVal customerID As String,
                                      ByVal companyName As String,
                                      ByVal contactName As String,
                                      ByVal contactTitle As String,
                                      ByVal address As String,
                                      ByVal city As String,
                                      ByVal region As String,
                                      ByVal postalCode As String,
                                      ByVal country As String,
                                      ByVal phone As String,
                                      ByVal fax As String)
            ' Redirect user to another URL
            Result.NavigateUrl = String.Format( _
                "~/Pages/Customers.aspx?CustomerID={0}&_controller=Customers" + _
                "&_commandName=Select&_commandArgument=editForm1",
                customerID)
        End Sub
    End Class
End Namespace

Save the file. The business rule will use the ID of the selected customer to compose a URL relative to the application. The URL will open in a new browser window and will force the application to select a customer with the specified ID.

The new window will open if your have entered the command argument as “_blank” when defining the action in Project Designer. If action command argument has been left blank then the new URL will replace the page in the web browser. Users will have an option to return to the previous page using the browser’s Back button.

Switch back to the web app open in the browser window and navigate to Customers page. A new action button will be present in the leftmost column.

'Report' action in the leftmost action column.

Click on the Report button - a new browser window will open. You can see that the address bar is reflecting values from the selected customer.

New browser window opened with URL parameters from the previously selected customer.

Our web application is using its own capabilities to present the data with the help of data controller URL parameters. You can redirect the report action to a generic web request handler or to a web-enabled report server such as Crystal Reports or Microsoft SQL Server Reporting Services.

Overriding the Report Action

Switch back to the Project Designer. Right-click on Customers / Business Rules and press New Business Rule.

Adding a new business rule to Customers controller.

Use the following configuration:

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

Save the business rule. Right-click on Customers / Business Rules / ReportAsImage (Code / Execute) – r101 node, and press Edit Rule in Visual Studio.

Opening the business rule file in Visual Studio.

Replace the code base with the following:

C#:

using System;
using MyCompany.Data;
using System.IO;

namespace MyCompany.Rules
{
    public partial class CustomersBusinessRules : MyCompany.Data.BusinessRules
    {
        [Rule("r101")]
        public void r101Implementation(string customerID, 
            string companyName, 
            string contactName, 
            string contactTitle, 
            string address, 
            string city, 
            string region, 
            string postalCode, 
            string country, 
            string phone, 
            string fax)
        {
            PreventDefault();
            // return the same image in response to all "Report..." commands
            Context.Response.Clear();
            Context.Response.ContentType = "image/jpeg";
            Context.Response.AddHeader("Content-Disposition",
                String.Format("attachment;filename={0}.jpg", customerID));
            byte[] reportData =
                File.ReadAllBytes(@"C:\Users\Public\Public Pictures\Sample Pictures\Koala.jpg");
            Context.Response.AddHeader("Content-Length", reportData.Length.ToString());
            Context.Response.OutputStream.Write(reportData, 0, reportData.Length);
        }
    }
}

Visual Basic:

Imports MyCompany.Data
Imports System
Imports System.IO

Namespace MyCompany.Rules

    Partial Public Class CustomersBusinessRules
        Inherits MyCompany.Data.BusinessRules
        <Rule("r101")> _
        Public Sub r101Implementation(ByVal customerID As String,
                                      ByVal companyName As String,
                                      ByVal contactName As String,
                                      ByVal contactTitle As String,
                                      ByVal address As String,
                                      ByVal city As String,
                                      ByVal region As String,
                                      ByVal postalCode As String,
                                      ByVal country As String,
                                      ByVal phone As String,
                                      ByVal fax As String)
            PreventDefault()
            'return the same image in response to all "Report..." commands
            Context.Response.Clear()
            Context.Response.ContentType = "image/jpeg"
            Context.Response.AddHeader("Content-Disposition", _
                String.Format("attachment;filename={0}.jpg", customerID))
            Dim reportData As Byte() = _
                File.ReadAllBytes("C:\Users\Public\Public Pictures\Sample Pictures\Koala.jpg")
            Context.Response.AddHeader("Content-Length", reportData.Length.ToString())
            Context.Response.OutputStream.Write(reportData, 0, reportData.Length)
        End Sub
    End Class
End Namespace

Save the file.

This business rule takes control over the report rendering completely.

First, the method cancels out the default reporting logic at the very beginning by calling PreventDefault. The method uses the customer ID to assign the file name to the output. Next, it reads the file C:\Users\Public\Public Pictures\Sample Pictures\Koala.jpg and streams it out. If you are reproducing this sample on a Windows 7 computer then there is not need to change the code . Otherwise change the path to the image file accordingly.

In a real-world application you can produce any sort of output using custom code.

Switch back to the browser, navigate to Customers page and select a customer. Choose Report | Multipage Image on the action bar.

Triggering the ReportAsImage action from the action bar.

The custom method will execute and you will  be prompted to download the file AROUT.jpg.

Browser prompting to download a file.

Click Open and the default image viewer will start.

The koala image is displayed. The file name is inherited from the CustomerID.

If you select any other customer and choose the same action bar option then exactly the same image will be downloaded but the file name will reflect the primary key of the selected customer.

In a real-world applications you will likely stream other formats of output such as PDF or custom Microsoft Office documents using 3rd party reporting software.