Blog: Posts from October, 2010

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
Posts from October, 2010
Thursday, October 28, 2010PrintSubscribe
Form Navigator

User interaction with a list of data records typically involves applying filters and culminates in a selection of a record. Next, user will either change the record or return to the original list of records to make another selection.

How many times have you felt the need to advance to the next or previous record while the form is selected? Do one really need to use a grid to make a selection of another record?

Most applications do not support record navigation in a form. The reason is simple enough. The grid view manipulates pages of records using record count and absolute page indexes. The form view is using the primary key of a selected record to retrieve the data.

Code On Time applications now offer form navigator to offer both navigation and key-based selection in form views.

You can see the live demo at http://dev.codeontime.com/demo/websitefactory6/pages/suppliers.aspx. Sign in as admin/admin123% and select a supplier record. Navigation buttons with arrow icons are displayed above and below the record.

image

Click on the buttons to advance to the next and previous records. Form navigator automatically uses the filters and sort order of the grid view that has activated the form. Any detail views in master-detail relationships are also automatically refreshed.

The feature works in modal forms as well. You can try modal form navigation at http://dev.codeontime.com/demo/websitefactory1/pages/products.aspx.

image

The form navigator is activated automatically if more than one record is available in a grid view. Navigation arrows will disappear if a user is looking at a single record in a dataset or if a user is creating a new record.

If your application is using Override When, Filter, and Sort Expression view properties to create role-sensitive view filters then make sure that the same filter and sort expression is applied to forms that are used to edit data. Read more about role-sensitive views at /Documents/CB%20-%20Row-Level%20Security.pdf and http://www.youtube.com/watch?v=T5Eg0r6cAik&hd=1.

Monday, October 18, 2010PrintSubscribe
Bulk Import CSV, XLS, and XLSX

Code On Time applications now support bulk import of data files in CSV, XLS (Microsoft Excel prior to Office 2007) and XLSX (Microsoft Office 2007, 2010). The feature is easily activated from Actions menu in grid view.

Menu Actions with selected option Import From File is presented in the screenshot.

image

The next screen shot shows the initial state of the import dialog.

image

If you select the link “Download import file template” then a CSV template file download prompt will show up. Here is the sample import template opened in Microsoft Excel 2010.

image

Save the template to your hard drive and enter several sample values. The following screenshot shows five sample products. Notice that lookup values Supplier Company Name and Category Name are entered as text.

image

Click Browse to selected and upload the data file.

The Import dialog will present the field map that allows mapping fields from the spreadsheet to the fields in the data controller. Data file fields are displayed as static labels. Data controller fields are rendered as selectors. The import processor will try to automatically match the data file and data controller fields and have the data controller field names pre-selected. The dialog will indicate the number of records detected in the import file.

image

Click import to start the process. The file will be processed asynchronously. The prompt is displayed if the import process has started successfully. If the number of records is relatively small then chances are that the new records will show up in the grid view immediately after you dismiss the alert. If the number of records is large then the new records will start showing up if you refresh the grid view or the page.

image

Here is the list of imported records that were shown in the example. The import processor automatically matches foreign key field values to the corresponding text samples in the uploaded files.

image

Import feature  uses components from  System.Data.OleDb namespace to interact with the uploaded data files.

Download and install Microsoft Data Access Database Engine 2010 Redistributable components on your development machine and your server to allow OleDb components to read the contents of the uploaded import files. Notice that if you are using a 64-bit operating system then the corresponding database engine must be installed.

Bulk import feature requires a Premium subscription.

Several enhancements are planned for this feature already. Users will be able to specify an email address that will receive a message with the import log upon completion of the import file processing. Developers will also be able to write code in Shared Business Rules class to capture import progress.

Friday, October 8, 2010PrintSubscribe
Detecting Lookup Field Changes

Here is the screen shot of the New Products screen from the Northwind sample. Suppose you want to implement detection of value change in Supplier Company Name lookup that must result in clearing of Category Name along with resetting of Reorder Level field to 100.

image

Open your project and click Design button to activate the project designer. Select All Controllers tab and click on Products data controller. Click Edit button and enter ProductsBusinessRules in the Handler field in Business Rules section. Click Save to persist the changes.

image

Select the same data controller once more and click on Fields tab. Select CategoryID field and click Edit button. Select the check box in General section labeled “The value of the field is calculated by a business rule expression”. Scroll down to Dynamic Properties section and enter SupplierID in ContextFields. Click OK to save the changes.

image

From now on any changes to the SupplierID field in the client web browser will trigger a server side event that will be handled by methods in ProductsBusinessRules class. The class definition will be automatically generated once and will not be overwritten by the code generator in the future.

Now it is time to add the business logic that will react to the changes in the SupplierID fields.

The business rules class is located in ~/App_Code/Rules/ProductsBusinessRules.vb(cs) file.

The first example below is written in Visual Basic.NET. 

Here is how it implements the logic described at the top of this article.  Attribute ControllerAction on method ResondeTOChangeInSupplierID will ensure that the method is invoked in response to the system action “Calculate” when any of the fields specified in Context Fields property of CategoryID is changed in the client browser.

Notice that we are assigning text “(select)”  to the CategoryCategoryName field. This field is an alias for the CategoryID. You can also change any unrelated fields as well such ReorderLevel.

The last updated data field will be focused on the client.

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

Namespace MyCompany.Rules
    
    Partial Public Class ProductsBusinessRules
        Inherits MyCompany.Data.BusinessRules

        <ControllerAction("Products", "Calculate", "CategoryID")> _
        Sub RespondToChangeInSupplierID(ByVal supplierID As Nullable(Of Integer))
            If supplierID.HasValue Then
                UpdateFieldValue("ReorderLevel", 100)
            Else
                UpdateFieldValue("ReorderLevel", Nothing)
            End If
            UpdateFieldValue("CategoryCategoryName", "(select)")
            UpdateFieldValue("CategoryID", Nothing)
        End Sub
    End Class
End Namespace

The C# version of the same business rule is presented next.

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

namespace MyCompany.Rules
{
    public partial class ProductsBusinessRules : MyCompany.Data.BusinessRules
    {
        [ControllerAction("Products", "Calculate", "CategoryID")]
        public void RespondToChangeInSupplierID(int? supplierID)
        {
            if (supplierID.HasValue)
                UpdateFieldValue("ReorderLevel", 100);
            else
                UpdateFieldValue("ReorderLevel", null);
            UpdateFieldValue("CategoryCategoryName", "(select)");
            UpdateFieldValue("CategoryID", null);
        }
    }
}

The screen shot of the New Products  form just after the selection of a supplier is presented below.

image