Videos outlining what is new in
Alpha Anywhere powered by Alpha Five v12
UX Component | Edit-combo and Auto-suggest | Edit-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 Component | Very Basic Programming Concepts - The 'Hello World' Example | Many
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 Component | Tutorial 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 Component | Chart Control | Charts
- 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 Component | Pop-up Javascript Windows | Pop-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 Component | Mobile Window Styles - Action Sheets and Panel Windows | UX
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 Component | Image Upload | The
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 Component | Data Bound Images | Previously,
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 Component | Image Upload | Previously, 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 Component | Image Upload to an Image Control that is Not Data Bound | When
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 Control | List Control - Introduction | This
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 Control | List Control - .SetValue and .GetValue Methods of the UX Component | The
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 Control | List Control - Multiple Data Sources - SQL, DBF, Static Data, Custom (Xbasic) and Javascript | The
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 Control | List 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 Control | List Control - Flex Column Widths | A
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 Control | List Control - Multiple Layout | When
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 Control | List Control - Dynamic Image | You
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 Control | List Control - Custom Control Columns | Just
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 Control | List Control - Computed Columns | The
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 Control | List Control - Inserting Buttons into the List | In
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 Control | List Control - Working with Images - Data Bound Images | The
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 Control | List Control - Conditional Styling - Server Side and Client-side | The
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 Control | List Control - Client-side Conditional Styling - Using the onItemDraw Event | Dynamic,
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 Control | List Control - Conditionally Showing Items in a Row | The
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 Control | List Control - Pagination Methods | When
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 Control | List Control - Pagination - Navigation Buttons | When
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 Control | List Control - Continuous Scrolling - 'AutoFetchMore' Pagination Method | In
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 Control | List Control - Grouping | You
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 Control | List Control - Grouping - Lookup Dictionary for Break Value | Often,
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 Control | List Control - Cascading Lists | When
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 Control | List Control - Methods - Populating List, Moving Data from One List to Another - Moving Rows Up and Down | The
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 Control | List Control - Server-side Searching - Search Part Style and Keyword Style | When
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 Control | List Control - Server-side Searching -Specify an Explicit Filter | In
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 Control | List Control - Client-side filtering | Just
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 Control | List Control - Sorting Data - Server-side vs. Client-side | When
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 Control | List Control - Horizontal Scrolling | A
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 Control | List 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 Control | List Control - Snaking Column Layout using CSS and Media Queries | Rather
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 Control | List Control - 'RawData' Control Type | The
'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 Control | List 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 Control | List Control - Adding a 'Row Expander' to the List | A
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 Control | List Control - 'Row Expander' - Populating the row expander using an Ajax Callback | In
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 Control | List Control - Geography Searches | If
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 Control | List Control - Geography Searches - Mobile | Searching
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 Control | List Control - Freeform List Template - Pre-defined Templates | The
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 Control | List Control - Understanding Event Propagation When Clicking on Elements in a List Row | When
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 Control | List Control - Free-form Layout - Conditionally Hide/Show a Div in the Free-form Template | When
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 Control | Using a Custom List Control to Navigate the Current Record in a Data Bound UX Component | When
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 Control | List Control - Populate controls on a UX Component with Data from Current Row in a List Control | When
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 Control | Complex Example of Cascading List Controls | This
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 Control | Placing List Controls inside Panel Cards - Options To Fill or Not Fill the Panel Card | When
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 Control | Getting Data from the Selected Row in a List and Finding out the Row Number of the Selected Row | When
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 Server | Report Server | When
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 Component | Text Dictionary Tags | Previously, 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 Component | Locator icons for Panel Navigator | When
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 Component | In-control buttons for Textbox Controls | Textbox
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 Component | Deleting a Record in a Data Bound Component | In
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 Component | Fixed Position Content when Using Panels - 'PanelOverlay' Containers | Normally
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 Component | Understanding 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 Component | Tree Control | The
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 Component | Tree Control - Understanding how the tree control has a 'value' that can be set and read like other Data Controls | The
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 Component | Tree Control - How to Dynamically Repopulate on an Ajax Callback | The
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 Component | Menus - Displaying pop-up menus when the user clicks a button | When
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 Component | Populating Menus using a JSON String or an Xbasic Function | The
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 Component | Menus - 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 Component | Button List Control | The
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 Component | Button List Control - Setting the Active Pane in a Tab Control | A
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 Component | RadioButton and Checkbox Controls - Displaying as Button Lists | In
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 Component | Synchronous Script Execution | Ajax
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 Component | Integrated Login and Session Timeout Warning | Many
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 Component | Integrating a 'Change Password' feature when Integrated Login is Used | If
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 Component | Center 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 Component | Pop-up windows - Pointers | When
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 Component | Understanding the a5_xb_runGridComponent() Function | The
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 Component | Understanding the a5_xb_runGenericComponent() Function | The
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 Component | Understanding the a5_xb_runReport() Function | The
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 Component | Google Visualization Controls | You
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 Component | Lookup Grid - Dynamically Specifying the Name of the Lookup Grid at Run-time | The
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 Component | Testing on a Phone or Tablet | This 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 Component | Quick Panel Genie | The Quick Panel Genie allows you to quickly create complex Panel Layouts. Watch Video |
Reports | HTML Reporting | When
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. |
Reports | Using HTML Reporting in a Mobile Application | HTML
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. |
Reports | HTML Reporting - Reports with Bookmarks | When
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. |
Reports | Converting Free-form Reports to Layout Table Reports | There
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 Component | Map Control - Action Javascript Actions | New
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 Component | Drag scrolling In a Section of the Screen | Drag-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 Component | Advanced Export - Using Report Definition | Prior
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 - Mobile | Plot My Position on a Map | Integrating
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 - Mobile | Aligning 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 - Mobile | List Control - Automatically Changing the List Layout on an Device Orientation Change Event | The
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 - Mobile | Automatically Changing the Entire Layout of the UX Component on a Device Orientation Change Event | A
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 - Mobile | Conditionally Showing Content Based on the Device Orientation | A
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 Component | Styling Controls using Sub-Themes | When
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 Component | A 'behind the scenes' Look at Sub-Themes | This
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 Component | CRUD Operations (CReate, Update, Delete) in an Unbound UX Component | The
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 Component | Using CSS to Control Padding and Spacing | When
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 Component | How to Vertically Center Text in a Panel Header or Footer | This 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 Component | Spin List Control | The
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 Component | Tree Navigator - Applying the Grid Filter to the Tree Navigator | The
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 - Mobile | Accessing the Camera | A
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 - Mobile | Adding Custom Swipe Events to Panels | Swipe
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 Component | Storing Current Location when Saving Data to a Table | When
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 Component | Populate 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 Component | Image Upload - Creating Thumbnails of the Uploaded Image | When
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 Component | Panel Navigator - Overview of Different Methods of Navigating Panel Cards in a Panel Navigator | The
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 - Mobile | Using Absolute Position to Control the Placement of Elements | In
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 - Mobile | Split View | A
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 Component | Displaying Pop-Up Windows and Overlays using the 'Window' Container Sub-type | Displaying 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 Component | Dynamically Adding Panels to a Panel Navigator | When
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 |
Reports | Exporting Layout Table Reports to Excel - Live Excel Formulae | Layout
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 Component | Sample 'Notes' Application - Using CSS to Customize the Appearance of a List Control | The
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 Component | Automatically Displaying a 'Wait' Message on an Ajax Callback | In
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 - Mobile | How to Build PhoneGap Projects | Introduction to using PhoneGap to create you own native shell for a mobile application. Watch Video - iOS Watch Video - Android |
UX Component | Dynamically Re-populate a Checkbox Control that is Configured to Display as a ButtonList | Checkbox
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 Component | Chart Control - Resizing the Chart at Run-time | The
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 Component | Refreshing a UX Component That is Embedded Into a Parent UX Component | A
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 Component | How to Use Multiple Sub-Components when Designing a Mobile Application | When
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 |
Reports | Reports - 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 Component | Edit-combo and Auto-suggest | Edit-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 |
Reports | Chart Control | Charts
- 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 Component | Pop-up Javascript Windows | Pop-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 Component | Text Dictionary Tags | Previously, 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 Component | Menus - Displaying pop-up menus when the user clicks a button | When
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 Component | Populating Menus using a JSON String or an Xbasic Function | The
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 Component | Pop-up windows - Pointers | When
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 Component | Understanding the a5_xb_runGridComponent() Function | The
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 Component | Understanding the a5_xb_runGenericComponent() Function | The
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 Component | Understanding the a5_xb_runReport() Function | The
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 Component | Testing on a Phone or Tablet | This 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 Component | HTML Reporting | When
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 | HTML Reporting | When
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 - Mobile | Using HTML Reporting in a Mobile Application | HTML
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 |
Reports | HTML Reporting - Reports with Bookmarks | When
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 Component | HTML Reporting - Reports with Bookmarks | When
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 Component | HTML Reporting - Reports with Bookmarks | When
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 Component | Advanced Export - Using Report Definition | Prior
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 Component | Reports - 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) |