User Interface

Labels
AJAX(112) App Studio(8) 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(184) 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
User Interface
Monday, February 23, 2009PrintSubscribe
Starting DataViewExtender in "New" Mode

The latest update to Data Aquarium Framework introduces two new properties, StartCommandName and StartCommandArgument. You can use these properties to start a DataViewExtender instance in the desired mode by forcing it to execute a command just before the view is rendered in a web browser.

Quick Sample

Create a new page ~/NewProduct.aspx in a project generated with our ASP.NET Code Generator.

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" 
    AutoEventWireup="true" CodeFile="NewProduct.aspx.cs" Inherits="NewProduct" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Header1Placeholder" runat="Server">
    New Product
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="Header2Placeholder" runat="Server">
    Northwind
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="BodyPlaceholder" runat="Server">
    <div id="Products" runat="server" />
    <aquarium:DataViewExtender ID="ProductsExtender" runat="server" 
        TargetControlID="Products" 
        Controller="Products" View="createForm1" 
        StartCommandName="New" StartCommandArgument="createForm1" />
</asp:Content>

If you were to omit two last attributes in DataViewExtender markup then a read-only view of the first record of your data controller command is displayed. The framework treats all views the same way - there is no magic in "createForm1" name. The client engine will simply select the first record and present it in a specified view.

A client-side command "New" must be executed to force a display of a new record in createForm1. New properties will do the trick.

image

Client-Side State Machine

Another great feature available to developers is the client-side action state machine.

Run sample described above and then create a new record. As soon as a record is inserted you will be redirected to the "grid" view of all products. The same happens if you press Cancel button.

Suppose you want to use Cancel button to simply reset the form to the original "new" state. Also you want to rename button OK to Save and have it display a newly inserted record in "preview" mode that will lead to some fictitious step 2. A new button Save and New will create a new record and switch to the "new" mode right after a new record is created.

Open ~/Controllers/Products.aspx and change action group with scope "Form" as shown below.

<actionGroup scope="Form">
    <!-- modified actions -->
    <action whenLastCommandName="Select" whenLastCommandArgument="editForm1" 
            commandName="Edit" />
    <action whenLastCommandName="Select" whenLastCommandArgument="editForm1" 
            commandName="Delete" confirmation="Delete?" />
    <action whenLastCommandName="Select" whenLastCommandArgument="editForm1" 
            commandName="Cancel" headerText="Close" />
    <!-- no changes -->
    <action whenLastCommandName="Edit" commandName="Update" headerText="OK" />
    <action whenLastCommandName="Edit" commandName="Delete" confirmation="Delete?" />
    <action whenLastCommandName="Edit" commandName="Cancel" />
    <!-- modified actions -->
    <action whenLastCommandName="New" commandName="Insert" commandArgument="ShowProduct" 
            headerText="Save" />
    <action whenLastCommandName="New" commandName="Insert" commandArgument="SaveAndNew" 
            headerText="Save and New"/>
    <action whenLastCommandName="New" commandName="New" commandArgument="createForm1" 
            headerText="Cancel" confirmation="Do you want to reset this form?"/>
    <action whenLastCommandName="Insert" whenLastCommandArgument="ShowProduct" 
            commandName="Select" commandArgument="createForm1"/>
    <action whenLastCommandName="Insert" whenLastCommandArgument="SaveAndNew" 
            commandName="New" commandArgument="createForm1"/>
    <action whenLastCommandName="Select" whenLastCommandArgument="createForm1" 
            commandName="Navigate" commandArgument="~/Default.aspx?ProductID={ProductID}" 
            headerText="Continue to Step 2"/>
    <action whenLastCommandName="Select" whenLastCommandArgument="createForm1" 
            commandName="Cancel"/>
</actionGroup>

You probably noticed that new attribute whenLastCommandArgument is used to filter actions and complements attribute whenLastCommandName.

Action Insert creates a new record and in a case of success will try to select an action that is matched to the last command and argument. Pairs command/argument with values Insert/ShowProduct and Insert/SaveAndNew will trigger automatic execution of commands Select/createForm1 and New/createForm1.

Server-side actions Insert, Update, Delete, and any custom actions are forcing the state machine to execute if command has been successfully completed and server code did not request redirect or client script execution.

Here is how the screen looks when you refresh ~/NewProduct.aspx.

image

Enter details of a new product and click Save button. Product review form is presented.

image

If you click on Continue to Step 2 then you will be redirected to a URL that looks similar to the one below:

http://localhost:50689/NewFeatures/Default.aspx?ProductID=140

Hiding View Selector

The "orange" view selector at the top may spoil your view workflow ideas. Modify the content Content1 as shown below:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
<style type="text/css">
    table.ViewSelector {
        display:none;
    }
</style>

The view selector will be hidden from users.

image

Thursday, November 27, 2008PrintSubscribe
Instant Details for Lookup Fields

Data Aquarium Framework provides powerful data lookup capabilities. We have extended them one step further by offering instant details for lookup fields.

Navigate to http://dev.codeontime.com/demo/nwblob, select Products in the drop down in the left top corner and select any product. Notice that an arrow is displayed next to Product Name field. The view component has detected that Product Name is defined as a lookup field and displayed an instant details link.

image

Click on the arrow and a Details page for Manjimup Dried Apples product will be presented.

image

Notice that instant details arrows are also displayed next to Supplier Company Name field and Category Name field. Follow category name link and the next level of details is presented.

image

You can rename the category, change description or upload a new image. As soon as you save the changes or click on Close button you will returned back to the product instant details. Click Close button on products instant details and you are back on the page with the order details.

In just a few clicks you can jump straight to the details of the lookup data and make necessary adjustments or research. The same details preview is available when you jump to item details displayed in RSS data feeds of your ASP.NET web application.

Thursday, November 27, 2008PrintSubscribe
RSS Your Data

It seems that RSS feeds are everywhere. You find them on your computer desktop, in your favorite web browser bookmarks, email readers. Links to RSS feeds are sprinkled all over the web. Your cell phone and TV are likely able to show RSS feeds as well.

RSS feed can free your inbox from being flooded by various email notifications about events of interest that you might have subscribed to. Email notifications are "pushed" to your inbox by servers that host the data. RSS feeds are "pulled" from the servers by RSS reader applications on-demand. You control your RSS subscriptions by configuring the frequency of delivery, the number of items in a feed, and the size of the archive.

Data Aquarium Framework now supports View RSS Feed command option in all data views that have an action bar. Here is how the action group must be defined in a data controller descriptor file.

<actionGroup scope="ActionBar" headerText="Actions">
  <action commandName="ExportCsv" headerText="Export to Spreadsheet" 
        description="Analyze items with spreadsheet&lt;br/&gt; application." />
  <action commandName="ExportRss" headerText="View RSS Feed" 
        description="Syndicate items with an RSS reader." />
  <action />
  <action commandName="Custom" commandArgument="MyCommand" 
        headerText="My Command" description="Execute my custom command" />
</actionGroup>

Navigate to http://dev.codeontime.com/demo/nwblob and select Orders in the drop down in the top left corner of the page. Sort orders in descending order of order date and limit orders to those shipped via Federal Shipping.

Your screen will like the one below.

image

Select Actions|View RSS Feed option on action bar above the grid view.

image

An RSS feed will be displayed. Here is how the RSS feed looks when displayed in Microsoft Internet Explorer 7.0.

image

You can see this feed live at http://dev.codeontime.com/demo/NWBlob/Export.ashx?q=PHEgYz0iT3JkZXJzIiB2PSJncmlkMSIgcz0iT3JkZXJEYXRlIGRlc2MiIGU9IkV4cG9ydFJzcyI%2bPGY%2bU2hpcFZpYUNvbXBhbnlOYW1lOj1GZWRlcmFsIFNoaXBwaW5nPC9mPjwvcT4%3d.

The link looks cryptic for a reason. Parameter q in the URL specifies unique encoded query to retrieve an RSS feed from our hosted demo application and instructs the server to sort orders in descending order by order date and filter ship via field by Federal Shipping.

Click on link Great Lakes Food Market to see the details of the order on a standard details page automatically generated as a part of your ASP.NET application by our code generator, Code OnTime Generator. You can edit order details and return back to the feed by clicking on Close button.

image

Feed viewer capabilities depend on your web browser. Here is how the feed of employees is presented in Apple Safari.

image

Typically you can search the feed content and sort data in various ways. If there is a least on date field in your data view then the item publication date is defaulted to this field.

The real value of RSS will reveal itself when you subscribe to a feed.

For example, subscribe to the orders feed referenced above in Internet Explorer. If you are using Vista as operating system then it is likely displaying a side bar with various gadgets. Add Feed Headlines gadget to the side bar if you don't already have one. Configure the gadget to read the orders feed.

image

A list of order customer names will be displayed in the gadget.

image

If you select a customer name then order details are immediately displayed next to the gadget. If you click on a customer name then details of order will be presented. If you click on Orders|Orders link then a complete live RSS feed is displayed. The gadget will automatically scroll the list.

Add a new order to the database. Next automatic "pull" of RSS feed will show you a new order right on your desktop without any need to sign into a web application or sending an e-mail notification from the server. 

This may work great in various scenarios. Your information workers can create an unlimited number of data feeds by filtering and ordering any application data to their liking and viewing and subscribing to RSS feeds created based on the current data view that they see. New data that falls under the same filtering and sorting conditions will show up when the feeds are updated.

There are numerous RSS feed readers out there. Popular Email applications will also display RSS feeds and tell users when new feed items are available, which can make your business data more tightly integrated in everyday business processes.

Our powerful ASP.NET code generator, Code OnTime Generator, will instantly create robust AJAX applications based on Data Aquarium Framework. See a complete list of features of the framework at http://codeontime.com/productsae.aspx.