Data Sources

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
Data Sources
Friday, June 15, 2012PrintSubscribe
Working with Picklists

Picklists are commonly used in web applications in order to allow a user to pick one item from a list of available options. These lists prevent duplication of similar values, such as alternate spellings. Picklists are physically different from database lookup fields since there is no foreign key relationship between the tables. The application generator automatically configures lookup fields. Developers can configure a picklist on any field in a web application.

For example, let’s look at the City and Country fields in the Customers edit form. Both fields are simple text boxes – the user can type any value.

City and Country fields rendered as simple text boxes.

Let’s convert both fields to picklists.

Creating Cities and Countries Tables

Start SQL Server Management Studio. In the Object Explorer, right-click on Databases / Northwind / Tables node, and select New Table option.

Create New Table in Northwind database using SQL Server Management Studio.

Give this table the following columns:

Column Name Data Type Allow Nulls
CountryID int No
CountryName nvarchar(50) No

Right-click on the CountryID column, and select Make Primary ID.

Set CountryID column as a primary key of Countries table.

Under Column Properties, change the following setting:

Property Value
(Is Identity) Yes

Press Ctrl+S to save the table. Give the table the name of “Countries”.

Create another table with the following columns:

Column Name Data Type Allow Nulls
CityID int No
CityName nvarchar(50) No

Right-click on the CityID column, and select Make Primary ID.

Set CityID column as a primary key of Cities table.

Under Column Properties, change the following setting:

Property Value
(Is Identity) Yes

Save the table, and give it the name of “Cities”.

Start Code On Time web application generator. Refresh, and add the two new tables to the web application.

Refresh the project to add the Cities and Countries tables.

Finish generating the application.

Populate the Tables

Next, populate the Cities and Countries table using the values currently existing in the Customers table. A full list of values can be found by activating the dropdown on the column header and clicking the “Filter…” option.

List of City values.

Insert all City values in the Cities table, and all Country values in the Countries table.

Populated Countries table using values extracted from Customers.

Converting Country and City fields into a Picklist

Start the Project Designer. In the Project Explorer, switch to the Controllers tab. Double-click on Customers / Fields / City field node.

City field of Customers controller in Project Designer.

Change the following properties:

Property Value
Items Style Lookup
Items Data Controller Cities

Press OK to save the field. Double-click on Customers / Fields / Country field node.

Country field of Customers controller.

Make the following changes:

Property Value
Items Style Lookup
Items Data Controller Countries

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

Navigate to the Customers page, and edit a record. The City and Country fields will be rendered as lookup links.

City and Country fields on Customers edit form are rendered as lookups.

Click on the link for City field, and a lookup modal window will display a list of cities.

Clicking on the City lookup link will activate a modal window displaying a list of cities.

Select a lookup item from the list. Save the record, and select the record again. Instead of CityName being inserted into the field, the CityID was inserted.

CityID inserted into the City field.

The same behavior occurs for Country lookup field.

CountryID of the lookup item inserted into the Country field.

This is happening because the primary key of the lookup is automatically used as the value of the selected record.

You can address this in two different ways.

Changing the Primary Key of the Lookup Controller

Switch back to the Project Designer. In the Project Explorer, right-click on Countries / Fields node, and select List option.

Show List of all Fields in the Countries controller.

Change the field properties:

Name Is Primary Key
CountryID No
CountryName Yes

You can repeat this procedure for Cities controller, or configure the lookup properties of the City field as explained next.

Specifying the Data Value Field and Data Text Field

In the Project Explorer, double-click on Customers / Fields / City field node.

City field in the Customers controller.

Make the following changes:

Property Value
Data Value Field CityName
Data Text Field CityName

Press OK to save the field.

The client library always uses Data Value Field and Data Text Field to determine which lookup field represents the key of the selected item, and which field represents the text. When the Data Value Field is not specified, then the value of the primary key field of the selected lookup item will become a lookup value. When the Data Text Field is not specified, the text will be derived from the first visible column.

Trying it Out

On the toolbar, press Browse. Navigate to Customers page and edit a record. Change the City and Country fields, save, and select the record again. The names of City and Country will be the values inserted into the respective fields.

City and Country Name values will be inserted into the fields.

This can be confirmed by checking the record in SQL Server Management Studio.

SQL Server Management Studio query confirms that the names were inserted into the City and Country fields.

Friday, May 11, 2012PrintSubscribe
Improving Efficiency of Output Cache Table

Custom result sets can be produced by stored procedures and web services. A quick look at the sample output cache table and output caching script will give you a few ideas about introducing optimization in the caching.

The datable table CustOrderHist_Cache stores cached output created by concurrent users in the process of interacting with the application. The highlighted columns are the actual output columns produced by the stored procedure.

Sample output cache table designed to work with Northwind.dbo.CustOrderHist stored procedure

The output caching script filters out the data by CacheUserName column to segregate the user-specific result sets. The performance will improve if the column indexed.

The same consideration applies to the column CachExpires.

A single index that includes both CacheUserName and CacheExpires will likely work well in most situations.

The primary key column CacheID is provided to allow selecting data rows in the application user interface. Our sample result set could be changed to use the ProductName  and CustomerID as a compound primary key. It is possible since the stored procedure CustOrderHist produces a list of unique products purchased by a customer. In that case you can delete the CacheID column and simplify the output caching script.

Another area of optimization if the length of time the custom result set remains cached. Most applications will tolerate the data to be “stale” for at least a few minutes if not hours.

The output cache table may end up containing orphan cached data if users are not working with the app on a daily basis. It is a good idea to enhance the caching script with a simple delete statement that wipes out any cached data rows with the cache expiration overdue by a few days.

Friday, May 11, 2012PrintSubscribe
Activating a Stored Procedure With a Custom Search Bar

Application users can input parameters of a stored procedure or web service in a modal confirmation search dialog. This approach works best if a custom result set may be produced with default parameter values. Application automatically prepopulates the output cache table. Users can  adjust parameter values on demand by activating Search action with a modal confirmation.

For example, an application can use a stored procedure or a web service to produce the most recent data records without asking a user for an input. A user may need to review the historical records and will activate the search action on their own.

If the application users are always searching for data, then a more natural method of providing the input parameters for the output caching script is via an inline search bar.

Right-click the Region / Cust Order Hist Cache / container1 node in Project Explorer and choose New Data View option.

Adding a new data view to a page container of a Code On Time web appliction

Enter the following properties and press OK button to create the new data view.

Property Value
Controller CustOrderHist_Params
Sequence 1
Show Action Bar No
Show Action Buttons None
Startup Action Command Name New

Select Region / Cust Order Hist Cache / container1 / view1 (CustOrderHist_Cache, grid1) data view and change its properties as shown next.

Property New Value
Sequence 2

Save the changes. The Project Explorer tree will look as follows.

The sequenced data views in a page container of a Code On Time web application

The data controller CustOrderHist_Cache has already been configured to use the confirmation data controller CustOrderHist_Params when Search action is activated. The client library of application framework will detect the inline confirmation data controller instance and will use its values as parameters of the Search action.

Click Browse on the Project Designer toolbar and navigate to Cust Order Hist Cache page.

The startup action of the dv100 data view has its Startup Action Command Name set to New. This allows selecting a customer without any extra effort. The data view is also configured to hide the action bar and the form view action buttons.

A confirmation data controller CustOrderHist_Params is displayed 'inline' in a data view above the CustOrderHist_Cache data view

Select a customer and click on the search activator icon. The enhanced output caching script will detect the parameter value and use it to cache the output produced by the stored procedure CustOrderHist.

The output of the search action with an 'inline' confirmation data controller

Application users can perform Quick Find, adaptive filtering, paging and sorting of the search result without causing any additional stored procedure activity. The output caching script will automatically detect if the data has been cached for longer than 30 seconds and call the stored procedure to refresh the cached custom record set.

The data view dv100 (CustOrderHistCache_Params) #1 is configured to have no action buttons at runtime when forms are rendered. If you set the value of its Show Action Buttons property to Bottom, then the presentation of the form view will change.

The first data view display a form with automatically configured actions 'Insert when New' and 'Cancel when New' actions at the bottom. The actions are labeld 'OK' and 'Cancel'.

Buttons OK and Cancel are the actions Insert when New and Cancel when New. The actions are automatically created by the application framework since there are no action groups explicitly defined in the data controller CustOrderHist_Params.

Right-click the Region / Cust Order Hist Cache / container1 / dv100 (CustOrderHist_Params) #1 / Actions node in Project Explorer and  choose New Action Group option.

image

Create a new action group with the scope of “Form”.

Add an action to the action group ag100 (Form) with the following properties.

Property Value
Command Name Search
When Last Command Name New

The Actions node of the data view dv100 (CustOrderHist_Params) #1 will look as in the next screenshot.

A standalone 'Search' action configured in a confirmation data controller

Expand the node view1 (CustOrderHist_Cache, grid1) #2 and locate the action node a100 – Search .

Action 'Search' in an output cache data controller is configured to use another data controller to collect input parameters

Change its properties as follows.

Property New Value
Confirmation

_controller=CustOrderHist_Params
_shortcut=false

Note that you can also delete the _shortcut parameter. Its default value is false.

Generate the application and navigate to Cust Order Hist Cache page.  You will immediately notice the Search button below the parameter form. The Search action shortcut on the left of the Quick Find is gone. It has been replaced with the standard Advanced Search Bar activator.

The 'Search' action is rendered in a form view of an 'inline' confirmation data controller

The Search action defined in CustOrderHist_Params data controller does not have a confirmation. If the action is activated, then the client library of the application will contact every data view on the page with instruction to perform search. The data views will perform search if they do have an action that uses CustOrderHist_Params as a confirmation.

The Search action without a confirmation broadcasts the need to perform a search to all “interested” parties.

Now that the shortcut is hidden, it is possible for end users to take advantage of the advanced search bar to further refine the custom result set produced by the stored procedure CustOrderHist.

Advanced search bar allows further refinement of the custom result set produced by 'Search' action