Friday, June 21, 2013






Videos outlining what is new in 
Alpha Anywhere powered by Alpha Five v12




UX ComponentEdit-combo and Auto-suggestEdit-Combo and Auto-Suggest controls now expose a new method to allow you to call Javascript to dynamically style the data shown in the list.Watch video   Watch video 2

Note: Also applies to the Grid component.
UX ComponentVery Basic Programming Concepts - The 'Hello World' ExampleMany books that teach programming languages start with the ubiquitous 'Hello World' example in which they teach you how to put some text on the screen. In this video we show you how you can write text to a label control on the UX component. The example is very simple, and you can think of it as the 'Hello World' example of the UX component.

The video then goes a little further and shows how data can be read from a List control to compose the message that is put in the label.

Watch Video - Part 1
Watch Video - Part 2
UX ComponentTutorial Explaining Panel Layouts, Panel Navigators and Panel Cards'Panels' are the essential building blocks for mobile applications. The UX Component builder allows you to add three types of Panels to your components - Panel Layouts, Panel Navigators and Panel Cards.

This video is a tutorial explaining the concepts behind these new UX component controls.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Watch Video - Part 4
Watch Video - Part 5
UX ComponentChart ControlCharts - You can now control data point colors at the individual data series level. For example, if a chart plots more than one data series, you can define data point colors for each data series in the chart.
Watch Video    Read Transcript
Download Component

Note: Also applies to Reports
UX ComponentPop-up Javascript WindowsPop-up Javascript Windows - You can now specify that pop-up Javascript windows should be docked to a side of the screen. Docked windows remain visible even when the page is scrolled.
An example of where docked windows might be useful is in a shopping application where the docked window shows the shopping cart and remains on the screen as the user scrolls on the page to add items to the shopping cart.
Another example would be to display instructions that must always be visible as the user scrolls the page.

Note: Also applies to the Grid component.

Watch video    Read Transcript
UX ComponentMobile Window Styles - Action Sheets and Panel WindowsUX Component - Specialized Window Styles for Mobile Applications - When building mobile applications a common pattern is to create 'Action Sheets' and 'Panel Windows'. These types of windows are easily created using the standard Javascript Window object in the Grid and UX component builders. When you are working in the Window builder a genie allows you to quickly configure the window so that it exhibits specialized behaviors.

Watch Video    Read Transcript
Grid ComponentImage UploadThe Image Upload action in Action Javascript now allows you to upload images to the New Record row. Previously, you could only upload images to existing rows. Also, you can now specify an image to show if there is no image associated with a record.

You can embed images directly in the HTML (as base64 encoded values) and you can scale images on the server before rendering the HTML.

Watch Video   Read Transcript

Discussion of significance of embedding images in HTML - Watch Video     Read Transcript
UX ComponentData Bound ImagesPreviously, in a UX Component that was bound to a table, you could not bind image fields to images in the table. This is now possible.

There are several important options available to you when you bind an image field to a table. You can specify that the image data should be embedded directly in the HTML (as a base64 encoded value), and you can scale images on the server before rendering the HTML.

Watch Video
Read Transcript


Images in Repeating Sections can also be data bound. Watch Video   Read Transcript
UX ComponentImage UploadPreviously, the UX Component did not support Image Upload. (Image Upload was only supported in the Grid Component).

Now, the UX Component has a powerful Image Upload feature. Watch Video

Images can even be uploaded to Image fields in Repeating Sections. Watch Video
UX ComponentImage Upload to an Image Control that is Not Data BoundWhen you upload an image in a UX component, you often are uploading to a 'data-bound' image control. However, it is not required that the Image control to which you upload be data bound. In fact there are many use cases where you want to upload an image and then in your AfterDialogValidate event handler, process the uploaded binary data as you see fit.

In this video we show how you can upload images to a non-data bound image control.

Watch Video - Part1
Watch Video - Part 2
UX Component - List ControlList Control - IntroductionThis List Control is a powerful new control type that can be added to the UX component. The List Control is extremely powerful and versatile. It is used extensively in applications that are designed for Mobile devices, but is also extremely useful in Web applications.

The List control has much of the functionality of a read-only Grid component.

In this video, we introduce the List control. In subsequent videos we will explore the full richness of his extremely versatile new control.

Watch Video    Read Transcript   
UX Component - List ControlList Control - .SetValue and .GetValue Methods of the UX ComponentThe List control is just like other data controls that you place on the UX component in that it submits a value (just like a textbox, radio button etc.) does when the UX component is submitted.

Also, the standard Javascript methods (.getValue() and .setValue() ) of the UX object can be used to set and get the 'value' of the variable that bound to the list.

Watch Video     Read Transcript
UX Component - List ControlList Control - Multiple Data Sources - SQL, DBF, Static Data, Custom (Xbasic) and JavascriptThe List control can be populated from multiple data sources, such as static data, SQL queries, custom Xbasic code, custom Javascript code, etc.

In this video we explore these different data sources for the List control.

Watch Video - SQL and DBF Data Source     Read Transcript

The 'Custom' data source allows you to define an Xbasic function that returns the data to be shown in the List control. In the this video we show how a call can be made to the Yahoo Web Service to retrieve stock price data which is shown in the List control.

Watch Video - Custom Data Source - Part 1       Read Transcript
Watch Video - Custom Data Source - Part 2       Read Transcript



UX Component - List ControlList Control - Columnar vs. Freeform Layout -The data shown in the List control can be displayed in either a columnar or free-form layout.

In this video we show how to use both columnar and free-form layouts.

You can switch at run-time from one layout to another layout. The video also shows how a 'Layout Picker' can be placed on the component to select the active layout at run-time.

The ability to specify more than one Layout for a List control is particularly useful for Mobile applications where you might want the appearance of the List to change when the orientation of the Mobile device is changed from portrait to landscape.

Watch Video   Read Transcript
UX Component - List ControlList Control - Flex Column WidthsA powerful feature of the List control is the ability to specify column widths using either absolute or relative dimensions. For example, you can specify that column one's width is 'flex(2)' and column two's width is 'flex(1)'. This means that column one will always be twice the width of column two and that the total width of the columns will automatically expand to fill the width of the List control.

Watch Video      Read Transcript  
UX Component - List ControlList Control - Multiple LayoutWhen you design a List control, you can specify multiple Layouts. A Layout is just the manner in which the data in the List is shown. You can switch from one layout style to another at run-time.

Watch Video     Read Transcript   

Download component
UX Component - List ControlList Control - Dynamic ImageYou can easily add images to the List. The particular image to be shown in any row is dynamically computed based on other data in the row. In this video we show how one icon is shown if the customer is from the USA and another icon is shown if the customer is not from the USA.

Watch Video     Read Transcript 

Important Note: Dynamic images should not be confused with 'data-bound' images, which are discussed in another video. In a 'data-bound' image, the image to show in the List is specified in one of the fields in the record that is the data source for the List.
UX Component - List ControlList Control - Custom Control ColumnsJust as the Grid component allows you to define a 'Custom Control' control type, the List allows you to define 'Custom Controls' to compute values to be shown in the List.

The 'custom control' is defined by an Xbasic function that will return the HTML to show in the List. The Xbasic function takes as its input an object that allows the function to see all of the data in the current row of the List.

In this example, we define a very simple Custom Control field for the List that combines data from the 'firstname' and 'lastname' columns in the List.

Watch Video    Read Transcript   
UX Component - List ControlList Control - Computed ColumnsThe List control allows you to define computed columns. A computed column displays a value that is computed from other data in the current row. Computed columns can be calculated server- side (in which case Xbasic functions can be used in the calculation), or they can be computed client-side (in which case Javascript functions can be used in the calculation).

To define a server-side computed column, you would actually define a 'Custom Control' as shown in the previous video.

In this video we show how a client-side computed column can be added to the List.

Watch Video      Read Transcript     
UX Component - List ControlList Control - Inserting Buttons into the ListIn addition to displaying data and images, each row in the List can include buttons. When clicked, these buttons execute Javascript code that you have defined.

When you define the Javascript that gets executed by the button, you can use Action Javascript or you can write you own Javascript code.

In this video, we show how you can place a button in the List and when the button is clicked, another UX component is opened, showing more data for the current row in the List.

View Video     Read Transcript   
UX Component - List ControlList Control - Working with Images - Data Bound ImagesThe images that you display in a list can be 'data bound'. For example, if the List control is populated from a SQL query, the table that you are querying might have image fields. The data in the image fields can either be binary data (i.e. the jpg or png data for an image), or a character field that contains the filename of an image.

This video shows how you can include data bound images in a List.

When working with data bound images, you have the option of actually embedding the image data into the HTML (as base64 encoded data). You can also scale the image on the server before rendering it.

Watch Video 1       Read Transcript
Watch Video 2       Read Transcript
Watch Video 3       Read Transcript
UX Component - List ControlList Control - Conditional Styling - Server Side and Client-sideThe data in the List can be conditionally styled at both the row level and the column level. For example, you might want to display a row in red if the 'AmountDue' is above a certain level. Or, you might want to display a particular field in bold if the value in some other field had a certain value.

Conditional styling can be computed either on the server or on the client. While the result of a server-side or client-side computation might be the same, the way in which it works is very different. In the case of server-side conditional styles, the computation is done on the server, and therefore the conditional expressions are Xbasic expressions. In the case of client-side conditional styles, the computation is done in the browser, using Javascript, and therefore you can use Javascript code in your expressions.

Another key difference between server-side and client-side conditional styles is that for server-side conditional styles, the style information is embedded into the data that is sent from the server to the browser. This makes server-side conditional styles slightly less 'efficient' than client-side conditional styles because the 'payload' (the amount of data sent from the server to the browser) is slightly larger.

Watch Video 1      Read Transcript 
Watch Video 2      Read Transcript

Download Component
UX Component - List ControlList Control - Client-side Conditional Styling - Using the onItemDraw EventDynamic, conditional styling, of the data shown in a List can also be done using the onItemDraw event in the List control. This is the most flexible and powerful way for applying dynamic, conditional styling, to a List because you have the full power of Javascript to express your 'conditional styling rules'.

The onItemDraw event fires after each row in the List has been rendered, and you can use this event to make any modifications to the data show in the row.

In this video we show how the onItemDraw event can be used to set alternating row colors, set the background color of a button and set the text on a button.

Watch Video    Read Transcript   
Download Component
UX Component - List ControlList Control - Conditionally Showing Items in a RowThe data in each row of the List can be conditionally shown or hidden. For example, in this video, we only show the button in the List row if the ContactTitle field is 'Owner'.

Watch Video    Read Transcript
UX Component - List ControlList Control - Pagination MethodsWhen you display a List that is based on a SQL or .dbf table, you can choose how many rows of data to show in the List. You can efficiently display a much larger number of rows in a List than in a Grid component. However, when working with tables with a very large number of rows, you will want to paginate the List and then provide a means for fetching additional rows of data from the server.

In this video we show two different pagination methods: Navigation Buttons - which allow you to put First, Previous, Next and Last buttons on the UX component to control the navigation in the list, and a 'Fetch More' row which appears at the end of the List. When you click on the 'Fetch More' row, more data is retrieved from the server. (In the next video we should a third navigation method - 'AutoFetchMore').

Watch Video     Read Transcript 
UX Component - List ControlList Control - Pagination - Navigation ButtonsWhen you turn on pagination for a List control and you set the Pagination Method to 'Navigation Buttons' you can define pagination buttons that operate 'page at a time' or 'record at a time' as shown in this video.

Watch Video   Read Transcript
UX Component - List ControlList Control - Continuous Scrolling - 'AutoFetchMore' Pagination MethodIn this video we demonstrate how the 'AutoFetchMore' pagination option can be used to give the illusion that the entire list has been loaded into memory.

In the video we show how even though only 20 rows of data are loaded into the list, it scrolls continuously as if the entire list has been loaded. That's because the 'AutoFetchMore' option automatically fires the Ajax callback to fetch more rows of data as you scroll toward the end of the data that is currently loaded.

Watch Video   Read Transcript
UX Component - List ControlList Control - GroupingYou can insert group breaks into the data that is displayed in a List control. The text shown in the Group Headings can be completely customized and can include summary data (showing for example, the count of the number of records in the group, or the total sales for the customers in the group).

(Note: Summary data only available for lists based on SQL data).

In addition, if the List is paginated and you are using buttons to navigate from page to page, you can indicate in the Group Heading if the group is continued from the previous 'page' of data.

Watch Video - 1     Read Transcript
Watch Video - 2     Read Transcript
UX Component - List ControlList Control - Grouping - Lookup Dictionary for Break ValueOften, when creating a List that has group breaks, the value in the break field is simply a code (e.g. 1, 2, 3) and is not really meaningful to display in the Group Header. Instead, you would like to display a meaningful value by 'looking' up the coded value in some 'dictionary'. In this video we show how this can be done.

Watch Video   Read Transcript
UX Component - List ControlList Control - Cascading ListsWhen you define multiple List controls on a UX component, you can specify that a List has a 'parent' List. If a List has a 'parent' List, the data shown in the List is automatically refreshed and filtered every time the current selection in the parent List is changed. There is no limit to the depth of cascading Lists that you can define.

In this video we show how you can define two Lists - one for Countries and one for Cities and how the data in the Cities list is automatically filtered when the selected Country changes. We then add a third list for Companies, showing the companies in the selected City.

Watch Video - Part 1  Read Transcript
Watch Video - Part 2  Read Transcript
UX Component - List ControlList Control - Methods - Populating List, Moving Data from One List to Another - Moving Rows Up and DownThe List control in the UX component is highly programmable. It has methods that allow you to add rows, insert rows, delete rows, move rows and reorder rows. In this video we give an extensive tour of some of the method available to you for programming the List control.


Watch Video - 1   Read Transcript
Watch Video - 2   Read Transcript
Watch Video - 3   Read Transcript   
Watch Video - 4
Watch Video - 5
Watch Video - 6

Download component used in this video.
UX Component - List ControlList Control - Server-side Searching - Search Part Style and Keyword StyleWhen a List is populated from a SQL or DBF data source, or a custom data source, you can perform server-side searches on the List data source in much the same way that a Grid component can have a 'Search Part'.

To create a 'search form' for a List, you place controls on the UX where the user will enter search criteria and then you add a button that makes an Ajax callback to create a filter expression from the submitted data. This can all be done automatically using Action Javascript.

To help you debug your searches, you can display the filter expression computed by Alpha Five from the data your submit in the search fields. You can also display the record count showing the number of records that satisfied the search condition.

In this video we show how server-side searching (filtering) is added to a List control.

Watch Video - Part 1
Watch Video - Part 2
UX Component - List ControlList Control - Server-side Searching -Specify an Explicit FilterIn the previous videos, the user fills in search values into controls on the UX component and then when the search button is clicked, the data in those controls are submitted to the server where a filter expression is computed from the submitted data.

There may be situations where you would prefer to generate the filter expression yourself, rather than have Alpha Five generate the filter expression from the submitted data. This video shows how you can filter the data in the List using an explicit filter expression.

Watch Video
UX Component - List ControlList Control - Client-side filteringJust as searching in the List can be done server-side, or client-side, filtering of the List data can also be performed client-side or server-side. In previous videos, we have demonstrated how server-side filtering can be done.

In this video we show how client-side filtering can be used to filter the data in the List.

In the case of Lists that are based on static data, client-side filtering is the only option. In the case of Lists that are based on a Custom data source, client-side filtering will be must easy to set up than server-side filtering.

Watch Video
UX Component - List ControlList Control - Sorting Data - Server-side vs. Client-sideWhen you sort a List that is based on a SQL,  a DBF or a Custom data source, sort can be performed server-side or client-side. If you perform a client-side sort, no Ajax callback is required. However, for large lists, sorting the data client-side can actually be slower than sorting server-side.

There are several factors that you need to consider when configuring your List to use server-side or client-side sorting.

If you List is paginated, then you must use server-side sorting (because a client-side sort will only sort the currently visible page of data).

In this video we demonstrate the difference between client-side and server-side sorting and how server-side sorting is set up.

Watch video
UX Component - List ControlList Control - Horizontal ScrollingA List control is laid out vertically by default. However, in many applications, you might want a List control that is laid out horizontally. When you set a List control use horizontal layout, the list will scroll horizontally if there is more data than can be displayed in the List. All of the options for List pagination (e.g. FetchMore, AutoFetchMore, etc.) can still be used.

The 'Horizontal' scrolling option is only appropriate if the List layout is set to 'Freeform'. Horizontal layout is meaningless in the case of a Columnar List.

In this video we show how a List can be configured to scroll horizontally. We also show how the List can be paginated using both the FetchMore and AutoFetchMore pagination methods.


Watch Video
UX Component - List ControlList Control - Snaking Column Layouts'Snaking' layout displays the List data in a 'grid' of cells that flow from left to right, then top to bottom. For example, consider the 'products' page on Amazon.com when you search for a product. The number of 'cells' per row in the List depends on the List width and the size of each 'cell'.

The 'Snaking' layout option is only appropriate if the List layout is set to 'Freeform'. Snaking layout is meaningless in the case of a Columnar List. If there is more data than can be displayed at once, the list will scroll vertically. All of the options for List pagination (e.g. FetchMore, AutoFetchMore, etc.) can still be used.

In this video we show how a List can be displayed using a 'snaking' layout.

Watch Video
UX Component - List ControlList Control - Snaking Column Layout using CSS and Media QueriesRather than using the built-in 'snaking' layout option (as shown in the previous video), it is possible to set the List control layout to 'snaking' by using a custom CSS class for the List data item.

In this video we show how CSS can be defined that uses CSS media queries to set the number of columns in the 'snaking grid' based on the width of the List control.

While the technique shown in this video is certainly more complex than simply setting the layout style to 'Snaking' (as shown in the previous video), you get more control over how the snaking Layout is defined.

Watch Video
Download component used in this video.
UX Component - List ControlList Control - 'RawData' Control TypeThe 'RawData' control type returns the data 'as-is' from the data source. No HTML mark up is automatically added, as is the case when you choose the 'Label' or 'Image' control type. Use the 'RawData' control type when you want complete control over how the HTML for the field should be created. When you use the 'RawData' control type, you must put the HTML markup in the template.

For example, say you have a field called 'MyImage' that contains an Image URL. If you set the control type to Image, then in the template, you would simply place this placeholder: {MyImage}.

But, if you set the control type to 'RawData', the template would then be: <img src="{MyImage}" />

Watch Video
  UX Component - List ControlList Control - Populating Data Bound UX Component controls when the selection in the List is changed.A common use pattern is to put data bound controls on a UX component and a List control that is also bound to the same table. When the user makes a selection in the List you would like to populate the data bound controls with the selected record. Additionally, if the user makes an edit in one of the data bound controls and commits the change, you would want the corresponding row in the List to be refreshed.

(Contrast the techniques shown in this video with the build in behavior of the 'Primary Key Navigation List' as shown in video number FP11_DLGNAV1.)

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Watch Video - Part 4

Download component used in video.
UX Component - List ControlList Control - Adding a 'Row Expander' to the ListA common use case in a List is to be able to expand the current row to show additional information. The additional information can be pre-loaded, so that when the row is expanded, no callback is necessary to get the additional data, or the additional data can be fetched from the server using an Ajax callback.

In this video we show how a 'row expander' can be added to a List control to show some additional pre-loaded information for the current row.

Watch Video - Part 1
Watch Video - Part 2

Download component used in video.
UX Component - List ControlList Control - 'Row Expander' - Populating the row expander using an Ajax CallbackIn the previous video, we showed how a List control could have a 'row expander' that was populated with pre-loaded information. In this video we show how the List control's 'Row Expander' section can be populated with the results of an Ajax callback.

Watch Video - Part 1
Watch Video - Part 2

Download component used in video.
UX Component - List ControlList Control - Geography SearchesIf the List control is based on a SQL database that supports the Geography data type (SQL Server, MySQL, Oracle, DB2 all do), then you can perform 'geography' searches on the data in the List. For example, you can find all records that are within (say) 10 miles of your current location. The 'current location' can be automatically supplied by the device.

Alternatively, you might want to know which records are within a specified radius of a certain point (that you can specify by latitude/longitude value), or by address.

In addition, when the results of the search are displayed in the List you might want to group the data in 'logical' groups. For example, the first group might be 'Records within 1 mile of your current location', the next group might be 'Records between 1 and 5 miles from your current location' and so on.

In this video we show how this is easily done.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3

Download Component
(This component uses the sample SQL Server Airports database. You can download this database.)
UX Component - List ControlList Control - Geography Searches - MobileSearching data to show records that are near the current location of a mobile device is an extremely common need in mobile applications. For example, the well know iOS application, Yelp, shows all restaurants that are near you.

In this video we build on the example show in the previous video and we show how a simple mobile application can be build that does a 'geography' search on data in a List control.

Watch Video
UX Component - List ControlList Control - Freeform List Template - Pre-defined TemplatesThe List control allows for a great deal of flexibility in how the data in the List is rendered. You can configure the List to use either 'tabular' or 'free-form' layouts. For mobile applications, the 'free-form' layout is most commonly used. When designing a free-form layout, you can select from a list of pre-defined templates.

In this video we show how you can create a great looking List by selecting one of the pre-defined templates.

Watch Video
Download component
UX Component - List ControlList Control - Understanding Event Propagation When Clicking on Elements in a List RowWhen you have items in a List control row that have onClick events defined (such as a button or an image), and you also have defined events at the row level (for example, onClick, or onSelect), you might want to suppress the row level events from firing if you click on an element in the row that has its own onClick event.

This video shows how this is easily done.

Watch Video
Download Component
UX Component - List ControlList Control - Free-form Layout - Conditionally Hide/Show a Div in the Free-form TemplateWhen you create a List control with a free-form template, you might want to use Javascript (typically in the onItemDraw event) to conditionally show/hide elements in the List. This is easily done by putting the elements you want to show/hide in a div, giving the div an id and then using Javascript to show/hide the div.

It is important, however, that in each instance of the row, the div has a unique ID.

In this video we show the div is given a unique ID for each row in the List and how the onItemDraw event is used to control the visibility of the div.

Watch Video
Download Component
UX Component - List ControlUsing a Custom List Control to Navigate the Current Record in a Data Bound UX ComponentWhen a UX component has been 'Data Bound' you can navigate from record to record by clicking on navigation buttons, or (optionally) by moving the pointer in a slider control, or by clicking on a row in a special List control that shows the primary keys that were retrieved in the server-side 'Load Primary Keys' action.

When you configure the server-side action to load the primary keys for the table to which the UX has been bound, you can optionally specify that a List control should be shown where the user can see the primary key values and then click on a row in the list to fetch a particular record. This List control is a special 'system generated' list and it does not offer the full range of features that the standard List control offers.

In this video we show how a custom List control can be configured to act as a record navigator and how this custom List can be used in place of the system generated 'record navigation list'.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Download Component (Note: Before running the component you will need to edit the connection string and point to the sample Northwind database.)
UX Component - List ControlList Control - Populate controls on a UX Component with Data from Current Row in a List ControlWhen working with a List control, a common requirement is to populate other controls on the UX component with data from the current row in the List. This is easily accomplished using a built in action in Action Javascript.

This video shows how this is done.

Watch Video
UX Component - List ControlComplex Example of Cascading List ControlsThis video shows a more complex example of using cascading List controls and dynamically populating controls on a UX component from a database when a user clicks on a row in a List.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Download Component
UX Component - List ControlPlacing List Controls inside Panel Cards - Options To Fill or Not Fill the Panel CardWhen you place a List control in a Panel Card you can specify that the List should completely fill the Panel Card. In many cases this is likely to be the option that you want. But there are cases where you will want to place a List control on the Panel Card along with several other controls (including, possibly, other List controls). In this case you will not want the List control to completely fill the Panel Card that it is on. This video shows how this is easily done.

Watch Video
Download Component
UX Component - List ControlGetting Data from the Selected Row in a List and Finding out the Row Number of the Selected RowWhen you write Javascript code that goes against a List control you will often need to be able to get the value of columns in the selected row(s) of the List, or from arbitrary rows in the List.

In this video we look at the .selection and .selectionData properties of the List object and the List object's. getData() method, which are useful for getting information about the selected data in the List.

Watch Video - Part 1
Watch Video - Part 2
Application ServerReport ServerWhen a long running report is run in a web application, it can affect the throughput for other users because the App Server resources are tied up printing the report.

The Report Server allows you to offload report printing to a separate process, thereby improving the throughput for all users of your application. This video shows how throughput is improved when a report is printed.

Watch Video
UX ComponentText Dictionary TagsPreviously, language tags were used to internationalize a component. For example, by setting a control label to:
<a5:r>Label1</a5:r>
you could look up the string replacement for Label1 from a "Language Definition" that was stored as part of the component.

Now, in addition to the 'language' tag, a new type of tag is available, the 'text dictionary' tag can be used to lookup the tag definition in a SQL table - the 'Text Dictionary Table'. This makes it much easier to internationalize your application.

Note that text dictionary tags are not limited in their use to internationalizing applications. They can be extremely useful for displaying dynamic content in an application. The content shown in the application is retrieved at run-time by querying the SQL Text Dictionary database.

Watch Video - Part 1
Watch Video - Part 2

Editing Text Dictionary Entries
Watch Video

Note: Also applies to the Grid component.
UX ComponentLocator icons for Panel NavigatorWhen using a Panel Navigator, a common practice is to display small icons that represent your position in the navigator. For example, the icons indicate which Panel in the Navigator currently has focus.

Watch Video
UX ComponentIn-control buttons for Textbox ControlsTextbox controls can have 'in-control' buttons and icons. This is a very common pattern seen in mobile applications, but is also quite useful in desktop web applications.

Watch Video
UX ComponentDeleting a  Record in a Data Bound ComponentIn a UX component that has been bound to one or more tables, you can now delete a record from the primary table to which the UX component has been bound.

Watch Video
UX Component'Conditional Object' - Displaying a different set of controls on the UX component based on a condition.A common requirement when building a user interface is to display one set of controls in a region of the screen if a condition evaluates a particular value, another set of controls in the same region on the screen if the condition evaluates to another value, and so on.

Using the 'Tab control' , and configuring the 'method for selecting the active Pane' to 'Automatic', this is easily achieved.

Watch video
UX ComponentFixed Position Content when Using Panels - 'PanelOverlay' ContainersNormally all controls in a UX component are positioned 'relatively'. However, when using Panels, there may be situations where you would like some content to be positioned in a fixed position. This is easily achieved by placing the content into a Container and then setting the container type to 'PanelOverlay'. A 'PanelOverlay' always 'floats above' the rest of the content on the screen and has a fixed position relative to the top, left, bottom and right of the visible Panel.

Watch video

Download component
UX ComponentUnderstanding the 'Injectible Content' Container Type - Moving Controls To A Different Location on the Screen

Placing a search box in a List Header
By placing controls in container and then setting the container type to 'Injectible Content', you can easily move controls in a UX component from the location where they would normally render to a completely different location on the screen.

This technique is very useful when you want to put controls in the 'Data Header' section of a List control, as shown in this video.
Watch Video

Download components
UX ComponentTree ControlThe UX component supports a very powerful tree control. The tree can be populated statically (with a items defined at design-time), or dynamically by executing an Xbasic script that generates the tree values.

This video shows how you can add a tree control to a UX component and it shows the various method for populating the tree.

Watch video - 1
Watch video - 2
Watch video - 3
UX ComponentTree Control - Understanding how the tree control has a 'value' that can be set and read like other Data ControlsThe tree control is like other 'data' controls (such as textbox, radiobutton, checkbox etc). in that it is bound to a variable and by using the .getValue() and .setValue() methods on the variable, you can control the current selection in the tree.


Watch Video
UX ComponentTree Control -  How to Dynamically Repopulate on an Ajax CallbackThe tree control can be dynamically re-populated at any time by calling the tree object's .populate() method. In this video we show how an Ajax callback can be made to compute new data for the tree and how the Ajax callback sends back the Javascript commands to repopulate the tree.

Watch video

In this next example, we populate the tree with data from the Customers table in Northwinds.

Watch Video
UX ComponentMenus - Displaying pop-up menus when the user clicks a buttonWhen the user clicks on a button, you can display an pop-up menu with different choices. The menu can be arbitrarily complex, with multiple levels. Each node in the menu can execute a Javascript script when clicked. This video shows how Action Javascript can be used to define an action to display a pop-up menu.

In this video, the choices in the menu are defined at design-time using the Menu Builder. The Menu Builder provides an easy to use editor for constructing your menus. There are other ways in which the menu contents can be defined. These alternative methods (which are well suited to dynamically generating menu definitions) are discussed in subsequent videos.

Watch Video - 1
Watch Video - 2

Note: Also applies to the Grid component.
UX ComponentPopulating Menus using a JSON String or an Xbasic FunctionThe choices in the menu can be specified by a JSON string that defines the menu or by executing an Xbasic function that dynamically computes the menu choices.

In this video we show how these two options can be used.

Watch Video

Note: Also applies to the Grid component.
UX ComponentMenus - Advanced features - Menus can include forms, buttons, etc.Menus can be much richer than just a list of items. For example, menus can include forms, buttons, radio and check items, etc.

In order to create a menu that uses these advanced features, you must use the JSON method of populating the menu. This video gives a tour of the various options that are available.

Video1
Video2
Video3
UX ComponentButton List ControlThe Button List control is extremely useful in mobile applications. It displays a set of buttons in either a vertical or horizontal orientation. The user can select one or more buttons in the list.

The buttons in the Button List can either be statically defined at design time, or can be populated with the results of a database query.

In this video we show how the Button List can be placed on a UX component and how the choices in the Button List are defined.

Watch video - 1
Watch video - 2
UX ComponentButton List Control - Setting the Active Pane in a Tab ControlA common use for a Button List control is to use it to set the active pane in a Tab Control. This pattern is very similar to the way in which tabbed content is shown in iOS applications.

In this video we show how a Button List is used in a UX component with a Tab Control. By selecting a button in the Button List, the active tab pane is set.

Watch video
UX ComponentRadioButton and Checkbox Controls - Displaying as Button ListsIn mobile applications, the standard HTML radiobutton and checkbox controls are not optimal for touch events. The UX builder makes it very easy to use the Button List control instead of a the standard HTML controls.

In this video we show how this is easily done.

Watch Video
UX ComponentSynchronous Script ExecutionAjax callbacks execute 'asynchronously'. That means that if you have defined an Action Javascript script with a series of actions (such as 'open grid 1', 'open grid 2', etc.), the actions run in parallel, not sequentially. In many cases you will want the actions to run sequentially, and this video demonstrates how you can easily convert an Action Script from asynchronous execution to synchronous execution.

Watch Video

Note: Also applies to the Grid component.
Tabbed UI ComponentIntegrated Login and Session Timeout WarningMany developers use the Tabbed UI as the 'home' page for their applications. It therefore makes sense to integrate Login/Logout functionality directly into the Tabbed UI components.

In this video we show how easily Login/Logout functionality can be integrated into the Tabbed UI, eliminating the need for a separate Login component.

Another common requirement is to provide a user advance warning that their session is about to expire - allowing the user to 'do something' to extend the session. This functionality is now also built into the Tabbed UI.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Watch Video - Part 4
Watch Video - Part 5
Tabbed UI ComponentIntegrating a 'Change Password' feature when Integrated Login is UsedIf you are using the integrated Login feature in the Tabbed UI, you can allow the user to change their password by designing a UX component that allows the user to change their password, and integrating this UX into the TabbedUI.

Watch video
Tabbed UI ComponentCenter the Component on the Page (Horizontally)By default, the Tabbed UI consumes the full width of the browser window in which it is rendered. As the browser window is resized the Tab UI also resizes. But if you check the 'Center TabbedUI on page' property you can specify a width property.

Watch video
UX ComponentPop-up windows - PointersWhen a pop-up widow is displayed (for example to show a Grid, UX component, Report, Menu, etc.), you can specify that the pop-up window has an icon that 'points' to the element that opened the window.

Watch video

Note: Also applies to the Grid component.
UX ComponentUnderstanding the a5_xb_runGridComponent() FunctionThe a5_xb_runGridComponent() Function is a new technique for running a Grid component on an Ajax Callback or in a <<%a5..%> codeblock in a component. The video describes what the function does and how it is different from using standard Action Javascript techniques for running a Grid component.

Video 1
Video 2
Video 3

Note: Also applies to the Grid component.
UX ComponentUnderstanding the a5_xb_runGenericComponent() FunctionThe a5_xb_runGenericComponent() Function is a new technique for running a UX, or PageLayout component on an Ajax Callback or in a <<%a5..%> codeblock in a component. The video describes what the function does and how it is different from using standard Action Javascript techniques for running a UX or PageLayout component.

Watch video

Note: Also applies to the Grid component.
UX ComponentUnderstanding the a5_xb_runReport() FunctionThe a5_xb_runReportt() Function is a new technique for running a Report on an Ajax Callback or in a <<%a5..%> codeblock in a component. The video describes what the function does and how it is different from using standard Action Javascript techniques for running a Report.

Watch video

Note: Also applies to the Grid component.
UX ComponentGoogle Visualization ControlsYou can now easily use the Google Visualization API in a UX component. For example, in this video we show how to put a gauge and geomap on a UX component.

Watch video   Read Transcript
Download component
UX ComponentLookup Grid - Dynamically Specifying the Name of the Lookup Grid at Run-timeThe Lookup Grid feature is a powerful way of displaying the available options for a user to select from when filling in a field in a UX component. Previously the name of the Lookup Grid had to be specified at design time. Now, you can specify a Javascript function that will be called at run-time to return the name of the Grid to show in the Lookup Window.

Watch Video
UX ComponentTesting on a Phone or TabletThis video shows how you can test the component that you are designing on a remote device (e.g. a phone or tablet).

Watch Video

Note: Also applies to the Grid component.
UX ComponentQuick Panel GenieThe Quick Panel Genie allows you to quickly create complex Panel Layouts.

Watch Video
ReportsHTML ReportingWhen you add a Report to a Tabbed UI, or you display a report when a button is clicked, you now have the option of setting the 'initial view' of the report to HTML. HTML Reporting is significantly faster than PDF reporting because it does not use the Amyuni printer driver. Also, another significant benefit of HTML reporting is the ability to export the report to Excel or Word. You can also generate a PDF report from an HTML report if you still want a PDF version of the report.

In this video we show how HTML reporting can be used in a Tabbed UI and when a button in a Grid is clicked to show a report.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3

Note: Also applies to the Grid and UX Component.
ReportsUsing HTML Reporting in a Mobile ApplicationHTML Reporting is ideal for Mobile Applications because the HTML report can easily be displayed in one of the 'Panels' in a UX component.

In this video we show how a UX component with a Panel Navigator is built. The Panel Navigator has two Panel Cards. The first Panel Card has buttons to print various reports. The second Panel Card is used to display the HTML report.

Watch Video

Note: Also applies to the UX Component.
ReportsHTML Reporting - Reports with BookmarksWhen you design reports, you can turn on the 'bookmarks' and 'table of contents' features. The 'bookmark' feature creates a tree control of all of the 'bookmarks' in the report and allows you to navigate to any section of the report by clicking on a appropriate item in the 'bookmark tree', which is displayed to the left of the report itself. The 'table of contents' section, on the other hand, is shown before the first page of the report. You can also navigate to any particular section of the report by clicking on an entry in the table of contents.

In HTML reports, the 'bookmarks' tree is automatically rendered in a Panel as is shown in this video. In a mobile application, the Panel Card that contains the bookmark tree is automatically hidden if there is not enough space on the device. In the case where it is hidden, a button is automatically added to the Panel Header to reveal the bookmarks.

Watch Video

Note: Also applies to the Grid and UX Component.
ReportsConverting Free-form Reports to Layout Table ReportsThere are several advantages that Layout Table reports have over Free-form reports, especially when it comes to generating HTML output from the report, or exporting the report to Excel or Word. In this video we show how a free-form report can be converted to a Layout Table report automatically.

Watch Video
UX ComponentMap Control - Action Javascript ActionsNew actions have been added to Action Javascript to allow you to perform actions on a map control without having to write your own Javascript code.

In this video we show how you can add a marker to a map.

Watch video
Watch video2

In this video we show how you can add bulk markers to a map. When the user selects a state from a dropdown box, we show how to put a marker on the map for each airport in the selected state.

Watch video
UX ComponentDrag scrolling In a Section of the ScreenDrag-scrolling is central to mobile applications. A common design requirement is to display long content in a scrollable section of the screen.

In this video we show how you can put content in a Container control and then turn on drag-scrolling for the Container.

Watch Video
UX ComponentAdvanced Export - Using Report DefinitionPrior versions of Alpha Five have supported exporting data from a Grid component to either Excel or Ascii files. The data was exported as a simple, unformatted table of raw data.

Now, a new type of export is available. You can use a Report Definition to specify the format for an export operation. Data can be exported to Excel, Word, Ascii, HTML or PDF.

Watch video

Note: Also applies to the Grid component.
UX Component - MobilePlot My Position on a MapIntegrating a mobile device's ability to return location information and a Map are common requirements in a mobile application. In this video we show how a button can be clicked to retrieve the current location of the device, and plot that location on a map control.

Watch Video - Part 1
Watch Video - Part 2
Download component used in video

Postscript: The actions shown in this video are now easier because the Action Javascript action to add a marker to a map now has a new option to use the device current location.

Watch Video
Download component
UX Component - MobileAligning Controls in a Panel Card - Using Containers and the Tab Stop Control.A common design requirement is to align control (for example buttons) in a Panel Card so that the control is always centered, left aligned, or right aligned, even after an orientation change.

If buttons are in a Header or Footer section, then the Tab Stop control can be used to align the buttons.

This video shows how this is easily done.

Watch Video
Download component
UX Component - MobileList Control - Automatically Changing the List Layout on an Device Orientation Change EventThe List control allows multiple layouts to be designed. For example, you might have one layout design that you would like to show when the device in in landscape mode and another when the device is in portrait mode.

In this video we show how you can automatically switch from one List layout to another when the device orientation is changed.

Watch Video
Download component
UX Component - MobileAutomatically Changing the Entire Layout of the UX Component on a Device Orientation Change EventA common design pattern in mobile applications is to have completely different screen layouts depending on the device orientation.

In this video we should how the Panel Navigator can be used to easily do this.

Watch Video
Download component
UX Component - MobileConditionally Showing Content Based on the Device OrientationA common design requirement in mobile applications is to automatically show or hide certain control based on the orientation of the device.

Typically in in the UX component, controls are shown or hidden automatically by defining client-side show/hide expression. In this video we show how the special system field - 'dialog.orientation' can be use to automatically show/hide controls when the device orientation is changes.

We also show how the onOrientationChange client side event can be used.


Watch Video
Download Component
UX ComponentStyling Controls using Sub-ThemesWhen you select a style for a component (for example 'iOS'), all of the controls (e.g. buttons, labels, etc) are styled in a certain way. The style definitions actually contain multiple different definitions for certain controls. For example, a button can be styled as a 'confirm', 'deny', 'navigate back', or 'navigate next' button, simply by selecting the appropriate 'sub-theme'.

It is also possible to add your own 'sub-themes' to a style definition.

In this video we introduce the concept of style 'sub-themes'.

Watch Video - 1
Watch Video - 2
UX ComponentA 'behind the scenes' Look at Sub-ThemesThis video is for advanced developers who are interested in how sub-themes are actually implemented. Knowing how sub-themes are implemented makes it very easy to add you own sub-themes to a component style.

Watch Video
UX ComponentCRUD Operations (CReate, Update, Delete) in an Unbound UX ComponentThe built-in Server-Side action to save data to table(s) when a UX component is saved is very powerful, but it requires that the UX component first be 'data bound'.

In some types of application you may want to submit some fields to one table and other fields to another table, and so on. In this case, you could not use the built-in server-side 'Save Submitted Data to Table(s)' action.

A new action in Action Javascript allows you to perform Update, Inserts and Delete operations against any table, without requiring that the UX be 'data bound'.

This video explains the 'Update, Insert or Delete data' action.

Watch video
UX ComponentUsing CSS to Control Padding and SpacingWhen a UX Component (that uses 'container width' layout mode, which is the default mode) is rendered, every control in the component is wrapped in a DIV with a class name of 'A5CWLayout'. This special class is essential to the way in which the controls all 'flow' from left-to-right, then top-to-bottom, creating powerful, 'fluid' layouts that automatically adjust to changes in the window size.

The default padding on the A5CWLayout class is set globally in a property in the UX builder. There are situations, however, as described in this video, where you would like to selectively control the padding on the A5CWLayout class.

NOTE: This video is aimed at users with an understanding of CSS selectors.

Watch Video - Part 1
Watch Video - Part 2

Download Component
UX ComponentHow to Vertically Center Text in a Panel Header or FooterThis video shows how you can apply one of the built in class names to vertically center text in a Panel header or footer.

Watch Video
UX ComponentSpin List ControlThe Spin List control is ideal for mobile applications. It is an alternative to a Dropdown control or an Edit-combo and can be used when the user must select from a pre-defined list of values.

Watch Video - Part 1
Watch Video - Part 2
Download Components
Grid ComponentTree Navigator - Applying the Grid Filter to the Tree NavigatorThe Tree Navigator is an ideal control to navigate the records in a Grid. A common requirement is to filter the records in the tree when the user applies a filter to the records in the Grid.

In this video, we show how this is easily done.

Watch Video
UX Component - MobileAccessing the CameraA common requirement in Mobile applications is to access the camera or photo library so that a picture can be taken and then uploaded to the server, where the picture will be stored in a binary field in a table, or in a folder on the server.

This is easily done using the built-in 'Image Upload' action in Action Javascript. There are two methods for accessing the camera. You can use HTML5 (if the browser on the native device support HTML5 camera access), or Cordova/PhoneGap (if your application is running in a native shell that uses Cordova).

This video shows how the Image Upload action in Action Javascript can be used to create a button to access the camera.

Watch Video
UX Component - MobileAdding Custom Swipe Events to PanelsSwipe gestures are extremely common in mobile applications. The ability to add your own swipe events to the various Panels (Panel Cards, Navigators and Layouts) in your application is critical in order to create an authentic mobile experience.

In this video we show how you can add your own swipe events to the Panels in a UX components.

Watch Video
UX ComponentStoring Current Location when Saving Data to a TableWhen you edit the data in a record using a UX component, a common requirement, especially in mobile applications, is to record the current location of the user who is editing the record.

This is easily accomplished by setting some properties in the 'Save Submitted Data to Tables' server-side action, as shown in this video.

Watch Video
UX ComponentPopulate Controls with Data from a Table - UX Component is not 'Data Bound'A common use case in a UX component is to populate certain controls on the component with data that is retrieve by doing a database query.

In this video we show how the 'Populate controls in an UNBOUND UX Component' action can be used to populate controls in a UX component with data from a table.

Watch Video
Download Component
UX ComponentImage Upload - Creating Thumbnails of the Uploaded ImageWhen you use the 'Image Upload' action in Action Javascript to upload an image (which, in the case of a mobile application is likely to have been obtained by using the camera on the device), you might want to automatically create thumbnail versions of the image that was uploaded.

This video shows how this is easily done by setting a property in the 'Image Upload' action in Action Javascript.


Watch Video
UX ComponentPanel Navigator - Overview of Different Methods of Navigating Panel Cards in a Panel NavigatorThe Panel Navigator is a fundamental building block of mobile applications. It is used to select the Panel that has focus. The Panel Navigator has several different methods for selecting the active Panel. These include: carousel, programmatic, tab buttons, tab band, list and orientation change.

In this video we demonstrate these different methods, and discuss the use case for each method.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Watch Video - Part 4
Download Components
UX Component - MobileUsing Absolute Position to Control the Placement of ElementsIn previous videos we have shown how you can center and right align buttons in the header or footer of a Panel using either the [TabStop] control, or by putting controls into Containers.

In this video we show how a button can be right aligned in a Panel Header by placing the button in a container and then setting the Container position to be absolute.

Watch Video
Download Component
UX Component - MobileSplit ViewA common design pattern in mobile application is the 'split view'. The split view divides the screen into two logical sections: A left-hand Panel that contains a 'menu' and a right-hand panel that contains the 'detail view'.

If the screen is wide enough (for example, when the device is in landscape mode), the menu panel and the detail panel are both shown. But if the screen is not wide enough (for example, when the device is in portrait mode), the menu panel is automatically hidden (i.e. 'docked').

In this video we should how to create a UX component that is configured to show a 'split view'.

Watch Video
Download Component
UX ComponentDisplaying Pop-Up Windows and Overlays using the 'Window' Container Sub-typeDisplaying content in pop-windows (also sometimes called 'overlays') is a common requirement in web and mobile applications.

This is easily done by wrapping the content you want to show in the pop-up window in a container with a sub-type of 'Window'.

In this video we show several examples of how this technique is used to show pop-up lists, maps and forms.

Note: In addition to the techniques shown in this video, you can also use the  'Open a Pop-Up Ajax Window/Overlay' action in Action Javascript to display content in pop-up windows.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Download Component  (Note: Before running the component you will need to edit the connection string and point to the sample Northwind database.)

Contrasting the technique shown in this video with the 'Open a Pop-up Ajax Window' action in Action Javascript.
Watch Video
UX ComponentDynamically Adding Panels to a Panel NavigatorWhen you create a UX component that uses a Panel Navigator, you typically define the Panels (Cards, Layouts and child Navigators) that this Panel Navigator controls at design-time.

However, it is possible to dynamically add new Panels to a Panel Navigator at run-time by calling the .addPanel() method of the Panel Navigator object. Similarly, you can remove Panels from a Panel Navigator at run-time.

In this video, we show how this is done.

Watch Video - Part 1
Watch Video - Part 2
Down Component
ReportsExporting Layout Table Reports to Excel - Live Excel FormulaeLayout Table reports can be exported to Excel. When you design the Layout Table Report you can set properties in the report definition so that when the report is exported, the Excel file has live formulas in it.

In this video we show how a simple report with a calculated field in a column, a calculated group summary value and a calculated report summary value can be exported into a 'live' Excel spreadsheet.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
UX ComponentSample 'Notes' Application - Using CSS to Customize the Appearance of a List ControlThe sample Notes application is an advanced example of how CSS and Javascript can be use to completely customize the appearance of a List control in a UX component. In this video we show how the List control that shows the notes in the sample Notes application was customized.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Watch Video - Part 4
Watch Video - Part 5
Watch Video - Part 6
Watch Video - Part 7
Watch Video - Part 8

Download Component
UX ComponentAutomatically Displaying a 'Wait' Message on an Ajax CallbackIn mobile applications, where network connections are often slow, it becomes important to let the user know that there will be a delay while an Ajax callback completes. This is easily done with a global setting in the UX Component.

Watch Video
UX Component - MobileHow to Build PhoneGap ProjectsIntroduction to using PhoneGap to create you own native shell for a mobile application.

Watch Video - iOS
Watch Video - Android
UX ComponentDynamically Re-populate a Checkbox Control that is Configured to Display as a ButtonListCheckbox controls can be configured to display as ButtonLists. This is ideal for mobile applications where a standard checkbox control is not commonly used. In many applications it will be necessary to dynamically repopulate the choices in the Checkbox control (i.e. the ButtonList).

In this video we show how this is easily done by performing a query on a SQL database to dynamically populate the choices in the ButtonList.
Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Download Component
UX ComponentChart Control - Resizing the Chart at Run-timeThe Chart control in a UX component is a server-side control. That means that a bitmap of the chart is generated on the server and the bitmap is sent to the client. Because it is a server-side control, it is not possible to use Javascript to resize the control at run-time, as is possible with other control types.

In this video we should how the .refreshChart() method has been enhanced to allow size information to be passed back to the server, so that when the chart is refreshed, its size can also be changed.

Watch Video
Download Component

A practical use case for this functionality is in mobile applications where a chart is displayed in a Panel and you would like the chart to fill the Panel and to automatically resize itself on an orientation change. In this video we show how a chart can be resized automatically when the orientation of a device is changed.

Watch Video
Download Component
UX ComponentRefreshing a UX Component That is Embedded Into a Parent UX ComponentA common pattern when building large UX components is to break the component up into smaller pieces and then embed a child UX component into a parent UX component using the [Embedded Object] control on the UX Component toolbox.

When you use this technique, you may want to refresh the child UX component when certain values in the parent UX component change. In this video we show how this is easily done.

Watch Video - Part 1
Watch Video - Part 2
Download Components
UX ComponentHow to Use Multiple Sub-Components when Designing a Mobile ApplicationWhen designing a large mobile application some developers tend to design a single very large UX component. However, a better approach is to break the component into multiple sub-components.

In this video we show techniques for dividing a UX component into multiple sub-components.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
Watch Video - Part 4
Watch Video - Part 5
Download Components
ReportsReports - Using the IN Clause in the Report Filter - Understanding 'Array Arguments'When you use Action Javascript to display a report, you specify the report filter. In the case of reports that are based on SQL data sources, you can now use the SQL IN clause in your filter expression. When you use the IN clause, the arguments you pass into the SQL statement must be configured as an 'array argument'.

In this video, we show how you can easily configure the Action Javascript to display a report to use an IN clause and how you can make your argument into an array argument.

Watch Video
Download Component (Requires a connection string called 'Northwind' to sample Northwind database)

Note: Also applies to the Grid and UX Component.
Grid ComponentEdit-combo and Auto-suggestEdit-Combo and Auto-Suggest controls now expose a new method to allow you to call Javascript to dynamically style the data shown in the list.Watch video   Watch video 2
ReportsChart ControlCharts - You can now control data point colors at the individual data series level. For example, if a chart plots more than one data series, you can define data point colors for each data series in the chart.
Watch Video    Read Transcript
Download Component 
Grid ComponentPop-up Javascript WindowsPop-up Javascript Windows - You can now specify that pop-up Javascript windows should be docked to a side of the screen. Docked windows remain visible even when the page is scrolled.
An example of where docked windows might be useful is in a shopping application where the docked window shows the shopping cart and remains on the screen as the user scrolls on the page to add items to the shopping cart.
Another example would be to display instructions that must always be visible as the user scrolls the page.

Watch video    Read Transcript
Grid ComponentText Dictionary TagsPreviously, language tags were used to internationalize a component. For example, by setting a control label to:
<a5:r>Label1</a5:r>
you could look up the string replacement for Label1 from a "Language Definition" that was stored as part of the component.

Now, in addition to the 'language' tag, a new type of tag is available, the 'text dictionary' tag can be used to lookup the tag definition in a SQL table - the 'Text Dictionary Table'. This makes it much easier to internationalize your application.

Note that text dictionary tags are not limited in their use to internationalizing applications. They can be extremely useful for displaying dynamic content in an application. The content shown in the application is retrieved at run-time by querying the SQL Text Dictionary database.

Watch Video - Part 1
Watch Video - Part 2

Editing Text Dictionary Entries
Watch Video
Grid ComponentMenus - Displaying pop-up menus when the user clicks a buttonWhen the user clicks on a button, you can display an pop-up menu with different choices. The menu can be arbitrarily complex, with multiple levels. Each node in the menu can execute a Javascript script when clicked. This video shows how Action Javascript can be used to define an action to display a pop-up menu.

In this video, the choices in the menu are defined at design-time using the Menu Builder. The Menu Builder provides an easy to use editor for constructing your menus. There are other ways in which the menu contents can be defined. These alternative methods (which are well suited to dynamically generating menu definitions) are discussed in subsequent videos.

Watch Video - 1
Watch Video - 2
Grid ComponentPopulating Menus using a JSON String or an Xbasic FunctionThe choices in the menu can be specified by a JSON string that defines the menu or by executing an Xbasic function that dynamically computes the menu choices.

In this video we show how these two options can be used.

Watch Video
Grid ComponentPop-up windows - PointersWhen a pop-up widow is displayed (for example to show a Grid, UX component, Report, Menu, etc.), you can specify that the pop-up window has an icon that 'points' to the element that opened the window.

Watch video
Grid ComponentUnderstanding the a5_xb_runGridComponent() FunctionThe a5_xb_runGridComponent() Function is a new technique for running a Grid component on an Ajax Callback or in a <<%a5..%> codeblock in a component. The video describes what the function does and how it is different from using standard Action Javascript techniques for running a Grid component.

Video 1
Video 2
Video 3
Grid ComponentUnderstanding the a5_xb_runGenericComponent() FunctionThe a5_xb_runGenericComponent() Function is a new technique for running a UX, or PageLayout component on an Ajax Callback or in a <<%a5..%> codeblock in a component. The video describes what the function does and how it is different from using standard Action Javascript techniques for running a UX or PageLayout component.

Watch video
Grid ComponentUnderstanding the a5_xb_runReport() FunctionThe a5_xb_runReportt() Function is a new technique for running a Report on an Ajax Callback or in a <<%a5..%> codeblock in a component. The video describes what the function does and how it is different from using standard Action Javascript techniques for running a Report.

Watch video
Grid ComponentTesting on a Phone or TabletThis video shows how you can test the component that you are designing on a remote device (e.g. a phone or tablet).

Watch Video
Grid ComponentHTML ReportingWhen you add a Report to a Tabbed UI, or you display a report when a button is clicked, you now have the option of setting the 'initial view' of the report to HTML. HTML Reporting is significantly faster than PDF reporting because it does not use the Amyuni printer driver. Also, another significant benefit of HTML reporting is the ability to export the report to Excel or Word. You can also generate a PDF report from an HTML report if you still want a PDF version of the report.

In this video we show how HTML reporting can be used in a Tabbed UI and when a button in a Grid is clicked to show a report.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
UX ComponentHTML ReportingWhen you add a Report to a Tabbed UI, or you display a report when a button is clicked, you now have the option of setting the 'initial view' of the report to HTML. HTML Reporting is significantly faster than PDF reporting because it does not use the Amyuni printer driver. Also, another significant benefit of HTML reporting is the ability to export the report to Excel or Word. You can also generate a PDF report from an HTML report if you still want a PDF version of the report.

In this video we show how HTML reporting can be used in a Tabbed UI and when a button in a Grid is clicked to show a report.

Watch Video - Part 1
Watch Video - Part 2
Watch Video - Part 3
UX Component - MobileUsing HTML Reporting in a Mobile ApplicationHTML Reporting is ideal for Mobile Applications because the HTML report can easily be displayed in one of the 'Panels' in a UX component.

In this video we show how a UX component with a Panel Navigator is built. The Panel Navigator has two Panel Cards. The first Panel Card has buttons to print various reports. The second Panel Card is used to display the HTML report.

Watch Video
ReportsHTML Reporting - Reports with BookmarksWhen you design reports, you can turn on the 'bookmarks' and 'table of contents' features. The 'bookmark' feature creates a tree control of all of the 'bookmarks' in the report and allows you to navigate to any section of the report by clicking on a appropriate item in the 'bookmark tree', which is displayed to the left of the report itself. The 'table of contents' section, on the other hand, is shown before the first page of the report. You can also navigate to any particular section of the report by clicking on an entry in the table of contents.

In HTML reports, the 'bookmarks' tree is automatically rendered in a Panel as is shown in this video. In a mobile application, the Panel Card that contains the bookmark tree is automatically hidden if there is not enough space on the device. In the case where it is hidden, a button is automatically added to the Panel Header to reveal the bookmarks.

Watch Video
UX ComponentHTML Reporting - Reports with BookmarksWhen you design reports, you can turn on the 'bookmarks' and 'table of contents' features. The 'bookmark' feature creates a tree control of all of the 'bookmarks' in the report and allows you to navigate to any section of the report by clicking on a appropriate item in the 'bookmark tree', which is displayed to the left of the report itself. The 'table of contents' section, on the other hand, is shown before the first page of the report. You can also navigate to any particular section of the report by clicking on an entry in the table of contents.

In HTML reports, the 'bookmarks' tree is automatically rendered in a Panel as is shown in this video. In a mobile application, the Panel Card that contains the bookmark tree is automatically hidden if there is not enough space on the device. In the case where it is hidden, a button is automatically added to the Panel Header to reveal the bookmarks.

Watch Video
Grid ComponentHTML Reporting - Reports with BookmarksWhen you design reports, you can turn on the 'bookmarks' and 'table of contents' features. The 'bookmark' feature creates a tree control of all of the 'bookmarks' in the report and allows you to navigate to any section of the report by clicking on a appropriate item in the 'bookmark tree', which is displayed to the left of the report itself. The 'table of contents' section, on the other hand, is shown before the first page of the report. You can also navigate to any particular section of the report by clicking on an entry in the table of contents.

In HTML reports, the 'bookmarks' tree is automatically rendered in a Panel as is shown in this video. In a mobile application, the Panel Card that contains the bookmark tree is automatically hidden if there is not enough space on the device. In the case where it is hidden, a button is automatically added to the Panel Header to reveal the bookmarks.

Watch Video
Grid ComponentAdvanced Export - Using Report DefinitionPrior versions of Alpha Five have supported exporting data from a Grid component to either Excel or Ascii files. The data was exported as a simple, unformatted table of raw data.

Now, a new type of export is available. You can use a Report Definition to specify the format for an export operation. Data can be exported to Excel, Word, Ascii, HTML or PDF.

Watch video
UX ComponentReports - Using the IN Clause in the Report Filter - Understanding 'Array Arguments'When you use Action Javascript to display a report, you specify the report filter. In the case of reports that are based on SQL data sources, you can now use the SQL IN clause in your filter expression. When you use the IN clause, the arguments you pass into the SQL statement must be configured as an 'array argument'.

In this video, we show how you can easily configure the Action Javascript to display a report to use an IN clause and how you can make your argument into an array argument.

Watch Video
Download Component (Requires a connection string called 'Northwind' to sample Northwind database)