Blog: Posts from May, 2012

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 May, 2012
Friday, May 4, 2012PrintSubscribe
Configuring a Check Box

The Discontinued field in the Products controller is a Boolean field. By default, Code On Time web application generator assigns Drop Down List style to fields of this type, which allows “Yes”, “No”, or “(select)” options to be selected. The “(select)” option represents null, “Yes” represents True, and “No” represents False.

'Discontinued' field with items style of 'Drop Down List'

However, this field is mandatory, and can only be in two states — True or False. It would be more convenient to the end user if this field was presented as a Check Box.

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

Discontinued field of the Products controller in the Project Explorer

Make the following changes:

Property New Value
Allow null values False
Code Default 0
Items Style Check Box

Press OK to save your changes. On the tool bar, click on Browse to generate the application.

When the application opens in your default browser, navigate to Products page. You will see that Discontinued field is now a check box.

'Discontinued' field now displayed as a Check Box

In the grid view, the Discontinued field is rendered as a check box as well.

Discontinued field rendered as check box in Products grid view

The text displayed to the right of the Check Box in form view can be changed using the Header Text property of the data field.

Switch back to the Design environment. In the Project Explorer, double-click on Products / Views / editForm1 / c1 – Products / Discontinued data field node.

Discontinued data field in the editForm1 data view of Products controller

Change the following property:

Property Value
Header Text This product is no longer available.

Press OK to save the data field, and press Browse on the tool bar. Select a record on the Products page. You will see the new Header Text is displayed to the right of the check box.

'Discontinued' check box data field with a custom Header Text

Friday, May 4, 2012PrintSubscribe
Activating a Stored Procedure With a Master-Detail Relationship

An output caching script can be activated with user-defined filters.

Filters explicitly exist in the configuration of master/detail pages. Frequently, custom result sets are produced with the master ID specified as a parameter of a stored procedure or web service. The output may be presented as a detail view in the user interface.

Let’s place a data view of customer order history produced by CustOrderHist stored procedure on the Customers page in Northwind sample.

Activate the Project Designer and right-click Customers / container2 node. Select New Data View option to create a new data view.

Adding a data view to a page container in a web app created with Code On Time application generator

Enter the following properties and click OK button.

Property Value
Controller CustOrderHist_Cache
View grid1
Activator Tab
Text Order History
Page Size 5
Filter Source view1
Filter Field #1 Customer ID
Auto Hide Container

The output cache controller CustOrderHist_Cache has its SQL Business Rules configured to execute the output caching script to capture the data rows produced by CustOrderHist stored procedure.

Click Browse button on the designer tool bar. A browser window will open. Navigate to the Customers page and select  a customer. Switch to the Order History tab to view the customer order history.

Selection of a master data row in a grid view causes execution of the output caching script. The stored procedure 'CustOrderHist' is invoked if more that 30 seconds have passed since the last selection of the master data row.

If the Order History tab is visible, then the output caching script will execute every time you select a customer in the master grid view or navigate to a master data row in the form view. The stored procedure CustOrderHist will be invoked by the script only if more than 30 seconds have passed since the last selection of the same master data row.

Selection of a master data row in a form view causes execution of the output caching script. The stored procedure 'CustOrderHist' is invoked if more that 30 seconds have passed since the last selection of the master data row.

Friday, May 4, 2012PrintSubscribe
Activating a Stored Procedure With User-Defined Filters

The stored procedure output caching script is configured to execute when an application requires a row count and there are no unexpired data rows in the output cache table matched to the current user.

This is fragment of the script that does the verification of the condition.

if @BusinessRules_RequiresRowCount = 1 
    and @CustomerID_FilterValue is not null
    and not exists (
        select 1 from CustOrderHist_Cache
        where CacheUserName = @BusinessRules_UserName and 
            CustomerID = @CustomerID_FilterValue and
            CacheExpires > getdate()
    )
begin
    . . . . .

The application framework automatically assigns values to the parameters @BusinessRules_RequiresRowCount and @BusinessRules_UserName. The value of the first parameter is set to “1” when a number of available rows must be calculated. The value of the second parameter is assigned to the name of the current application user.

The highlighted parameter @CustomerID_FilterValue is matched to the field CustomerID of the output cache controller. If the data is being filtered by CustomerID, then the user-specified filter value is assigned to the parameter. If there is no user-defined filter then the application framework will assign a NULL value to the parameter.

If you navigate to the dedicated page of the output  cache table CustOrderHist_Cache, then you will see no records there. The script specified in the SQL Business Rules of the data controller is  triggered but will not cause execution of there stored procedure since there is no filter.

Activate the search bar and enter “ANTON” in the CustomerID field. Notice that there will be no auto-completed values as you type the text.

Entering a user-defined filter value in Automatic Search Bar of a web app created with Code on Time application generator

Hit Enter key and the list of matched products purchased by the customer will show up.

The result of execution of the output caching script that invokes the 'CustOrderHist' stored procedure in the Northwind sample created with Code On Time web application generator

Try entering other customer IDs and activating search. For example, try “AROUT”, “BONAP”,  and “BLONP” values. Every time the relevant data rows are displayed.  You will also notice that the auto-completion kicks in as your type initial letters of the values.

Clear the filter and sort the customer order history by Product Name. You will see all records that are captured in the cache output table.

You can also initiate a filter directly from the context menu of the Customer ID column.

The context menu of the column in a grid view of a web application created with Code On Time

Select Customer# / Text Filters / Equals option and enter a customer ID.

Modal dialog allows entering a user-defined filter value in a web application created with Code On Time generator

Hit Enter key to apply the filter. The relevant data rows will populate the output cache table.

It does not matter to the output caching script what filter operation is selected in the context menu of the column Customer ID. You can choose Equals or Does Not End With and the stored procedure will be invoked by the script in both cases.

The chosen filter operation will affect the selection of data from the CustOrderHist_Cache table after the script has been executed. For example, if you choose Does Not Equal and enter a valid customer ID, then you will see the previously cached data rows. None of them will match the entered ID. In fact the relevant data rows have been inserted in the table by the output caching script. The filter operation Does Not Equal hides them from the user.

If you want to fine-tune the output caching script, then consider using the @CustomerID_FilterOperation parameter. The value of the parameter is a string representing the selected filter operation spelled without spaces. For example, the value of the parameter may be equal to “DoesNotContain” or “EndsWith”. The value is equal to NULL, if the field is not filtered by the application user. Use the filter operation as an additional condition for the activation of the stored procedure in the output caching script when needed.

If you activate a Customer ID filter on the page and add a new customer order of any product, then the subsequent filtering of the history by the same Customer ID will most likely reflect that. The caching timeout is set to 30 seconds. It will probably take longer to enter a new order and activate a filter. If you change the script to cache records for a longer period of time, then there will be a period of discrepancy between the cached data and the actual data records. It is up to you to figure the acceptable cache expiration that can be tolerated by business users and processes.