Pre-Release Notes for Alpha Anywhere (Alpha Five Version 12)

IMPORTANT: The pre-release builds are only available to customers with a valid Alpha Anywhere subscription. If your subscription has expired you will not be able to use the pre-release build.

If your subscription is valid and you download and use the pre-release build please keep in mind that if you do not renew your subscription after it expires your eligibility to use pre-release builds will end.

 

 

 

 

 


 

Build 6173 5375 15 OCT-2019 - 7:55 AM

 

 

 

The Features and Bugs Listed Below are for the current pre-release build. These features/fixes will be included in the next official Version 12 Update. These notes are for users who are testing the pre-release update.
 

This is not an official patch, so you should not deploy this update to a production environment.

 

This pre-release build is our internal, nightly build and it is made available to you for the sole purpose of testing the new features that have been added and the bug fixes that have been made since the last official release. We are making this pre-release available to you so that you can provide us with feedback on whether the changes we are making are working correctly and have not introduced new issues.

 

If you encounter any type of bug while using this pre-release build, please send information about the bug (including full instructions on how to duplicate the issue, and a test case that we can run on our own machines) to a5v12bugs@alphasoftware.com.

 

Please do NOT post bug reports concerning the pre-release build on the message board. Alpha Software engineers do NOT routinely monitor the message board and there is a good chance that your posting will be overlooked. Also, since your posting will be referencing unreleased code, it will only serve to confuse other users.

 

This pre-release build is not intended to be used in a production environment.

 

You can download the pre-release update using these links:

https://aapatches.s3.amazonaws.com/build6173/a5v12_build6173_full_patch.exe

https://aapatches.s3.amazonaws.com/build6173/a5v12_build6173_full_DL.exe

https://aapatches.s3.amazonaws.com/build6173/a5v12_build6173_AppServer.exe

https://aapatches.s3.amazonaws.com/build6173/a5v12_build6173_AppServer_patch.exe

https://aapatches.s3.amazonaws.com/build6173/a5v12_build6173_RTPLUS_patch.exe

 

https://aapatches.s3.amazonaws.com/build6173/a5v12_build6173_ApplicationServerIIS.exe

https://aapatches.s3.amazonaws.com/build6173/a5v12_build6173_ApplicationServerIIS_Patch.exe

 

 

https://msgboard.alphasoftware.com/alphaforum/showthread.php?112148-New-OpenSSL-and-SSLv3-Vulnerabilities

 

 

 

Videos

UX Component Weather Control The UX Component comes with a pre-build control for displaying weather for a particular city. The weather data comes from Accuweather.com and you are required to get an API key from Accuweather.com in order to use the control.

In this video we demonstrate how you can add a weather control to a UX component.

Watch Video

Date added: 2019-08-09
UX Component - List Control In-place editing By default, a List control is used to display data, not to edit data. It is possible to edit the data in a List using either a List Detail View, or using in-place editing.

In this video we show how you can configure a List to use in-place editing.


Watch Video

Date added: 2019-08-19
UX Component - List Control In-place editing - Dropdown Control In this video we show how a dropdownbox can be defined for in-place editing of data in a List.

Watch Video

Date added: 2019-08-19
UX Component  - List Control In-place editing - Dynamically changing choices in a dropdownbox at runtime. In this video we show how the choices in a dropdown box used for in-place editing can have the choices shown in the dropdown box dynamically changed at run-time.


Watch Video

Date added: 2019-08-19
UX Component  - List Control In-place editing - Putting all rows into edit mode. A common pattern when using Lists that allow in-place editing is to configure the List so that all rows in the List are in edit mode (rather than requiring the user to put individual rows into edit mode before making edits).

In this video we show how you can execute Javascript to put all of the rows in the List into edit mode.


Watch Video

Date added: 2019-08-19
UX Component  - List Control In-place editing - Free-form Layouts In place-editing in a List control can also be used in free-form List Layouts.

In this video we show a List that has a free-form layout and how in-place editing can be used.

Watch Video

Date added: 2019-08-19
UX Component - List Control Using in-place editing to edit data in a List based on a SQL table To edit data in a List that is based on a SQL database, the List/Detail View pattern is typically used. However, it is also possible to use in-place editing in a List and then persist the edits made to the List back to the SQL database.

In this video we show how a List that is based on a SQL database is configured to allow edits to the SQL database to be made using in-place editing in the List.

Watch Video

Date added: 2019-08-19
UX Component - List Control Data validation for in-place editing When you use in-place editing to edit data in List row you can use Javascript code to validate the edited data before it is saved.

In this video we show how a validation rule is added to check that the user enters a value into the City field.

Watch Video

Date added: 2019-08-19
UX Component - List Control In-place editing - Auto-suggest You can define an auto-suggest control for in-place editing. You can also dynamically filter the choices in the auto-suggest based on other data entered into the List row being edited.

In this video we show how an auto-suggest control that shows choices from a SQL database is defined. We then add a dynamic filter to the auto-suggest so that it only shows choices that are filtered by some previously entered data in the List row.


Watch Video

Date added: 2019-08-19
UX Component - List Control In-place editing - Displaying images in a pick-list for Edit-combo or Auto-suggest When you define the data to be shown in the pick-list for an edit-combo or auto-suggest control, you can include images. In this video we show how the pick-list for an edit-combo is configured to display images

Watch Video

Date added: 2019-09-09
UX Component - List Control In-place editing - Displaying multiple columns in a pick-list for Edit-combo or Auto-suggest When you define the data to be shown in the pick-list for an edit-combo or auto-suggest control, you can specify that multiple columns of data should be shown in the pick-list. You can also specify that when the user makes a selection from the pick-list that other fields in the List row you are editing should be filled in. In this video we show how this is done.

Watch Video

Date added: 2019-09-09
UX Component - List Control In-place editing - Enable/Disable controls When you are editing the data in a List row using in-place editing, you may want to dynamically enable/disable controls in the row.

In this video we show how you can define an enable event to dynamically disable controls in the List row you are editing.

Watch Video

Date added: 2019-09-09
UX Component - List Control Decode coded Values It is common when designing databases to use coded values for certain fields (i.e. a category field might have values of 1, 2, 3, etc. rather than Beverages, Condiments, Confectionary, etc.). When displaying the data in the List you might like to display the decoded value for each coded value. In this video we show how this is easily done.

Watch Video

Date added: 2019-10-05

 

 

 

Changes

Build 6160

twilio_send_sms() function - Now returns .f. if Twilio reports an error. Previously, this function only returned false if there was an error making the call to the Twilio endpoint.

Build 6143

UX Component - Live Preview and Working Preview - If you open a component (from (say) Web Project 'Project1') in the UX Builder then then you subsequently change the Web Control Panel to a different Web Project (say 'Project2'), without first closing the previously opened component, when you go to preview the component you will now get a warning saying that the current web project is different than the project in which the component was defined. The reason for displaying the warning is that the component will not run correctly if it loads any resources from the web project folder.

Build 6103

 

Web Security - The Web Security options dialog has been changed to a menu. This is purely cosmetic. There is no change in functionality.

 

 

Build 6072

UX Builder - Show line number in Controls list Property - This property has been removed from the Advanced section in the UX Builder properties page because line numbers can now be toggled by clicking on a button in the Controls toolbar

 

Features

 

Build 6173

UX Component - List Control - In-place Editing - Edit-combo and Auto-suggest - Pick List - Styling - You can now define several properties to control the styling of the pick-lists displayed for edit-combo and auto-suggest controls..

 

 

UX Component - List Control - In-place Editing - Edit-combo and Auto-suggest - Pick List - Height - You can now control the height of the pick-list window that is displayed for edit-combo and auto-suggest controls. You can use the special listHeight value to specify a value relative to the List height. For example: listHeight * .3

 

 

Build 6164

Xbasic - email_send_SendGrid() Function - You can now send email using the SendGrid service. The parameters for this function are identical to the email_send_SparkPost() function.

You can use the email_send_SparkPost() function to send email using the SendGrid service by prefixing your api key with sendgrid: For example:

 

dim key as c = "sendgrid:12345676878990"

dim ms as p

ms.send_to = "fred@acme.com"
ms.reply_to = "fred@acme.com"
ms.from_email = "fred@acme.com"
ms.from_name = "Sales" 'friendly name - optional
ms.subject = "Information You Requested"
ms.message_html = "Here is the <b>information</b> you requested."
ms.message_text = "Plain text version of the message"
pp = email_send_sparkpost(key,ms)

 

Build 6157

TransForm API Tester - Beta - You can now test TransForm API endpoints against the TransForm Beta site.

 

Build 6155

UX Component - List Control - Decode Values - You can now specify that a field in a List is a coded value and that it should be decoded before it is displayed in the List. For example, you may have a field in the List called categoryId. This field may have values like 1, 2, 3, etc. When the List is rendered, you would like to display the decoded value for each of these values (e.g. Beverages, Food, Condiments, etc.).


Watch Video

 

In order to specify that a List field should be decoded, check the Decode value property on the Fields tab in the List Builder.

 

 

Once you check this property, a new property ( Decode lookup list ) is shown. This allows you to define the list of values (the decode list)  that will be used to decode the value when the List is rendered.

 

 

 

The decode list can be based on static or dynamic values or a Javascript function. If the decode list is based on dynamic values,  you can specify a database query, or a custom Xbasic function to get the values for the decode list.

The decode list is a CRLF delimited list of values of the form codedValue|displayValue

For example

1|Beverages

2|Condiments

3|Confections

 

If a value cannot be decoded, the coded value is displayed.

When the List data are refreshed, the decode list is also refreshed (assuming that the decode list was defined to be dynamic).

The decode list is stored as a property of the  List Object. For example, for a field called category, the decode list for this field would be stored in:

 

<listObject}.lookupvalue.category

Where <listObject> is a pointer to the List Object.

For example

var lObj = {dialog.object}.getControl('list1')

lObj.lookupvalue['category'] = [

    {value: '1', html: 'Beverages'},

    {value: '2', html: '<b>Condiments</b>'},

]

 

Notice that the html property can be any HTML markup that you want.

After you modify a field's lookupvalue property you must refresh the List using the <listObject>.refresh() method.

Contrast the Decode value feature with the Lookup Columns feature

The Lookup Columns feature is similar to the Decode value feature in that both allow you to display a decoded value for a coded value in the List. The Decode value feature is probably easier to use as you can define the decode list as part of your List definition and it does not add additional columns to the List as the Lookup Columns feature does.

 

 

Build 6148

 

UX Component - List Control - In-place Editing - Conditional Allow Edit - You can now define a Javascript function to determine if a particular field in the list should be editable when the List row is put into edit mode.

By default all of the fields that have their Allow edit property checked become editable when the row is put into edit mode. However, if you specify a Javascript function that returns false, then when the List row is put into edit mode, the field will not be editable.

You can specify global windows functions, functions defined in the scope of the UX component (e.g. {dialog.object}._functions.somefunctionname), or functions defined in the scope of the List control (e.g. [scope].somefunctioname);

 

 

 

 

UX Component - List Control - In-place Editing - Security Groups - You can specify that a particular field in the List should only be editable (using in-place editing), if the logged in user is a member of a particular security group(s). To define the Security Groups for a field, set the Security Groups property in the Fields pane in the List Builder. See image above.

 

UX Component - List Control - In-place Editing - Dropdown Window Width - You can now set the width of the picklist window for edit-combo and auto-suggest controls. The default window width is the width of the control.

Build 6141

Web Applications - Security Framework - Using Security Tables from a Different Project - When you enable the Security Framework for a Web Application you can specify if the security data (users, roles, etc.) should be stored in .dbf tables or in a SQL database. If you have previously used a SQL database for the security tables in another web project, you can now re-use those same tables.

When you are configuring the Security Framework for a Web Project, the Security Table Type property now has a new option. When you click the smart field for Security Table Type the dialog that is shown has a new option: Use 'SQL Database' from a Different Project.

 

 

UX Component - List Control Export to Excel - You can now customize field sizes and column headings when exporting the data in a List to Excel (using the List query as the data source). Previously, this option was only available if you used the data in the List as the data source.

IIS Server - A5W Page Caching - A5W page caching is only available running under IIS (which includes Alpha Cloud) and takes advantage of IIS kernel and user mode (web application) output caching. It allows the output (response) of an a5w page to be computed once and then cached making subsequent requests extremely fast since the response does not need to be recomputed.

Most a5w pages are dynamic by nature and won't benefit from caching since the response needs to be recomputed each time to reflect the current state of the data. However, some a5w page are the equivalent to being static or may only need accurate data for certain time spans. For instance, a stand alone login.a5w page will usually just have prompts and buttons and is the same for every user. This page can be safely cached after the first time it is computed. Another page may do a complex calculation that only needs to be updated every 30 seconds. The page caching can be set to keep the response in the cache for 30 seconds. After 30 seconds elapses the next request for that page will rerun the page and then cache that result for 30 seconds.

Cache options for a page
The cache settings for a page can be reached by right clicking on the page in the Web Project Control Panel and then selecting Cache settings....


A dialog for selecting the settings will then be displayed:



NOTE: If a page or components on a page contains language tags and the language selection is based on the <culture> of the request the Page contains language tags option will need to be selected. This is needed so that different versions of the page will be cached for each language in use.

 

NOTE: A5W pages cannot be cached on POST requests

 

 

Xbasic - DECLARE, DECLARESTRUCT, UNDECLARE Commands are Deprecated - If you use these commands in an Xbasic script you will now received a warning.

 

Build 6129

UX Component - List Control - KanBan Layout - onBeforeMove Event - A new event is now available. The onBeforeMove event fires when the users tries to move an item from on category to another. If the event returns false, the move is cancelled.

 

 

UX Component - List Control - KanBan Layout - onMove Event - The variables that are available to your code when the onMove event fires have changed. The variables that are available are now:

 

 

 

SQL Query Builder - Format SQL - When you build a SQL statement using the SQL Query Builder, the SQL statement is formatted to help improve readability. However, in some cases it might be preferable to show the unformatted SQL statement. The builder now has a new option to turn SQL formatting off.

 

 

 

 

UX Components - Action Javascript - Menu - In-line Style and Class - You can now set the in-line style and class name for the menu shown by the Dropdown Menu action.

Here is how the menu renders when the in-line style sets the background color to pink:

 

 

Grid and UX Component - Advanced Search Control - Default Search Operator - You can now define a default search operator for the textbox control. Previously the default search operator was set to Equals.

 

 

 

 

 

 

 

UX Component - List Control - WHERE and ORDER BY Clause Arguments - You can now make a List component more versatile by defining the SQL statement using a special type of argument.

Normally, arguments are used to supply values in a where clause. For example:

Select * from customers where city = :whatcity

 

The List now supports a special type of argument that can supply the entire Where clause. For example:

Select * from customers :whereclause

 

The argument value for the Whereclause argument could be defined as:

where country  = :whatcountry

 

TIP You can also define the ORDER BY clause using an argument. For example:

select * from customers :whereclause :orderbyclause

 

IMPORTANT: The argument value for an argument that supplies a WHERE clause must start with WHERE. The argument value for an argument that supplies the ORDER BY clause must start with ORDER BY. To specify that there is no WHERE clause, set the argument value to WHERE none. To specify that there is no ORDER BY clause, set the argument value to ORDER BY none.

 

A use case for this feature could be a TabbedUI where you have buttons that show a UX component with a List.

The same component could be used for (say) 2 different buttons in the TabbedUI

In the first case the TabbedUI would define these argument bindings

In the second case, the TabbedUI would define these argument bindings

 

Classic Application Server - Reduced Memory when Serving Static Files - The Classic Application Server has been enhanced to serve static resources from disk more efficiently. File content is now streamed directly from disk to the client for maximum performance with minimal memory utilization. This can lead to a noticeably reduced server memory footprint on a busy server.

Classic Application Server - Caching of Gzipped Output - The Classic Application Server now automatically caches gzipped output when the request is a static file, such as a style sheet, plain HTML, or image file on disk. Gzip allows the response to be transferred to the client more quickly so generally improves application performance. However it can be CPU intensive on the server to perform the Gzip compression which may limit the perceived performance improvement. The addition of this change restricts any negative impact on performance to only the first request for a resource.
 

 

PhoneGap App Builder Genie - Android Only -  Added Option To Allow Clear Text HTTP Traffic - By default, apps built for Android using cli-9.0.0 with a target SDK API version of 28 (which is required to publish the app to the Google Play Store) will not allow clear text HTTP traffic. The PhoneGap Builder now automatically adds the required entries to the PhoneGap project config.xml file to allow clear text http traffic if the URL specified for Ajax callbacks uses the http:// protocol.

If the Ajax callback URL uses the https:// protocol, and you are using cli-9.0.0 and targeting Android SDK API version 28, you will see an option to Allow Clear Text HTTP Traffic. If you enable this option, the entries required to allow clear text http traffic will be added to the PhoneGap project config.xml file. This allows you to use use the http:// protocol in XHR requests to any web service that may be using the http:// protocol.

 

Build 6101

UX and Grid Component - Lookup Grid - Right-to-Left Layout - When defining a Lookup Grid you can now specify that the Grid should be rendered right-to-left. This is done by adding a directive (<direction:rtl> ) as a prefix to the Window title property.

 

 

 

UX Component - List Control - In-place Editing - Calculated Fields - When you are editing the data in a List row, you can specify that the value in a particular field should be computed from other data in the List row. Your JavaScript code that computed the calculated value can reference the current (i.e. edited data) in the List row, the original data in the List row, or data from other rows in the List.

To define a calculated field, specify code in the control's calculated event.

For example, if the List has these columns: price, quantity and total, you might specify this code for the calculated event for the total field:

return Number(newData.price) * Number(newData.quantity)

 

Notice that the Number() function is used to ensure that the value for price (newData.price) is a numeric value.

The value for price is prefixed with newData (as opposed to oldData) to indicate that you want to use the current (edited) value that the user has typed into the price field. oldData.price refers to the value before the user made any edits.

 

 

UX Component - List Control - In-place Editing - Enable - You can dynamically enable/disable controls in the List row you are editing.

 

See video

 

To enable or disable a control while you are editing a List row, define an enable event. Your event can reference data in the row you are editing and also the original data (before edits were made). If your code returns false, the control is disabled. Otherwise the control is enabled.

When radiobutton and checkbox controls are disabled an opaque overlay is shown over the control to give a visual clue that all of the controls in the control group have been disabled.

 

 

UX Component - List - In-place Editing - CheckBox and RadioButton Control Types - You can specify that the data in a List column should be edited using either a CheckBox or RadioButton control. When you define the choices for these control types you can define a static list of choices. Each choice can define an optional stored value in addition to a displayed value. The individual radiobutton or checkbox controls can be rendered using a horizontal, vertical or snaking layout (multiple columns that snake from left to right, top to bottom within the defined width of the List column).

In the image below, the RadioButton control has been defined to use a vertical layout.

 

 

UX Component - List - In-place Editing - Edit-combo and Auto-suggest - Multi-column Pick List and Fillin Fields - When defining auto-suggest and edit-combo controls for in-place editing in a List you can specify that the Pick List that is displayed should have multiple columns. You can also specify that when a selection is made from the Pick List other fields in the List row you are editing should be filled in with values from the Pick List (the source fields for the fill in definition do not have to be displayed in the Pick List).

 

Watch Video

 

In the image below, the City field is defined as an edit-combo control and the Pick List shows two columns - City and Country. You can specify the column headings and the column widths. (See below).

 

 

To specify that the Pick List for an edit-combo or auto-suggest control has multiple columns, select the columns to display by setting the Fields to display property.

 

 

 

If you are displaying more than one field in the Pick List you can customize the template used to display the Pick List. Click the smart field for the Template property.

You can control the order in which the columns are displayed (by clicking on the Up and Down buttons) and you can set these properties:

 

 

 

When the user makes a selection from a Pick List you can fill in other fields in the List row you are editing. To define which fields should be filled in, click the smart field for the Fillin fields property.

 

 

 

Displaying Images in a Pick List

The image below shows a Pick List with two columns. The data in the second column is displayed as an image (this is done by setting the Column type to Image in the Template).

In the first row a built-in SVG image is displayed. In the second row an image referenced by a URL is shown and in the third row a built-in image is shown.

 

Watch Video

 

Build 5084

Reports - Printing QR Codes - To print a QR code on a free-form report, you must create a calculated field using the printQRCode() function. Previously, it was not possible to set properties for the bitmap size on the report and as a result, the QR Code bitmap was printed very small. Now you can set bitmap properties by right clicking on the object on the report and selecting the Best Fit option for the Display mode.

 

 

Build 6082

UX Component - List Control - In-Place Editing - Events - You can now define the following events for in-place editing controls

 

NOTE: Not all input-editing control types support the full list of events.

Build 6069

 

UX Component - List Control - onChange Event - A new event has been added to the List control. The onChange event fires whenever the List's value changes.

The List value is defined by the Return Value property in the List Builder. For example, assume that the Return Value is set to the Lastname field. If the user clicks on a row in the List that has a Lastname value of "Smith", the List value is "Smith". This is also the value that would be returned by the .getValue() method for the List.

 


 

Build 6058

 

UX Component - List Control - In-place Editing - Placeholder Text - You can now define placeholder text to be displayed in the input controls used for in-place editing.

In the image below, placeholder text is displayed in the input controls for Lastname and City in the new row

 

 

To define placeholder text for a field, set the Placeholder text property in the In-place Edit Control Properties dialog.

 

 

Build 6052

UX Component - List - SQL Database Source - Record Count - When a List control is based on a SQL data source, by default, the SQL query for the List data is executed two times. The first time is to get a count of the number or records in the List query and the second time is to get the actual List data. In some cases it may be undesirable to execute the SQL twice (for example, the query may actually modify the data using a trigger, or the query may be very expensive).

You can now instruct the List to not perform the initial query to count the records.

NOTE: In most cases turning off the count query will not be problematical. The main reason for the need to know the count of the records in the List is when the List is paginated and the pagination method is set to Navigation Buttons. If you don't have a count of the records in the List, it is not possible to compute the number of pages of data. In this case, AA uses a large number as a estimate of the number of pages of data.

 

 

Build 6051

UX Component - List Control - In-place Editing - The List control now supports in-place editing of data. Previously, the only way to edit data in a List control was using the List Detail View. In-place editing can be used in conjunction with the List Detail View.

 

To turn on in-place editing for List, check the Allow in-place editing property in the List Builder on the List Properties pane.

 

 

The image below shows a List control with the first row in List in edit mode.

 

You can configure the List to only allow one row at a time to be in edit mode, or you can allow multiple rows at a time to be in edit mode, as shown in the image below:

 

 

You can put a row into edit mode by clicking the Edit icon in the row.

You can add a new row of data to the List by clicking the New Record icon

The image below shows the List after the New Record icon has been clicked. Notice that an empty new row appears in the List immediately after the row in which the icon was clicked. The fields in the new row can have default values that are computed using Javascript.

 

 

You can save the new row by clicking the Save icon (the checkmark icon), or you can abandon the new row by clicking the Cancel icon (the X icon).

 

 

You can add the in-place edit icons to a List row by selecting the <In-placeEditingIcons> item from the list of Available Fields.

 

 

By default, you can also put a List row into edit mode by double clicking on the row. Once the row is in edit mode, a second double click will save the edits and return the List row to its 'non-editable' state.

If you use the double click method to put a List row into edit mode, then it is not required to add the <In-placeEditingIcons> to your List layout. However, without these icons, you will not be able to add a new row to the List unless you use some Javascript code.

Here is the Javascript code to add a new row to a List and to cancel the new Row:

 

var lObj = DLG1_DlgObj.getControl('list1')

//add a new row below row 1 (zero based)
lObj.editInPlaceAddRow(1);

//cancel the new row (zero based)
lObj.editInPlaceCancel(2);

 

 

You can configure whether double-click can be used to put a List row into edit mode and other List in-place editing settings by clicking the smart field for the In-place editing settings property.

 

 

When you click the smart field, the following dialog will open:

 

This dialog allows you to specify

The Javascript events fire before a List row goes into editing mode, when the edits in a row are saved, when a new row is added to the List, or when edits are cancelled. All of these events allow you to cancel the event by returning a false value.

NOTE: The Before add new row event could be used to set default values for fields in a new row, and the On edit save event could be used to define data validation, but, as described later, you can use define Default value and Validation code for each field in the List.

 

Defining In-place Editing Properties at the Field Level

Once you have turned on in-place editing for a List you can define in-place editing properties for each field in the List. To define in-place editing settings for individual fields, go to the Fields pane in the List builder.

 

 

For each field you can specify:

 

For example, the the image below, the City field has a validation rule that has been violated:

 

The validation rule for the City field was defined as:

 

if(newData.City == '') {
    return 'This is a required field.\nPlease enter a non-blank value.';
} else {
    return '';
}

 

 

Control Settings

Click the Control Settings smart field to open the In-place Edit Control Properties dialog (as shown below).

This dialog allows you to select the control type to be used for in-place editing and to set properties for each control type.

 

 

 

 

All of the available control types have a With property which defines the width of the control when it is placed in a free-form List layout.

NOTE: The width is not used for Column layouts because in a Column layout, the List column width defines the control width.

 

Each different control type exposes a different set of properties. Some of the control types (dropdown, edit-combo, auto-suggest) allow the user to pick a value from a list of choices. See Control Choices below for more details.

The Textarea control exposes these properties:

 

 

Control Choices

The Dropdown, Edit-combo and Auto-suggest control all display a pick list of choices for the user to select from.

This pick list can be based on:

 

You can define a filter for the choices. For example, you might only want the choices in a Dropdown to show cities in the USA.

For the Edit-combo and Auto-suggest you can also define a dynamic filter. A dynamic filter is a filter that is based on data that has been entered in other fields in the List row being edited.

For example, say you have defined an Edit-combo control to edit the City field. Say that the List also has a Country field. When you are editing a List row and you click the down arrow to display the list of choices for the City field you might only want to display Cities for the Country entered into the Country field.

 

Free-form Layout

You can you in-place editing in both Column List layouts and in Free-form layouts. In a free-form Layout you can specify the width of each control when the row is in edit mode.

 

Updating Data in a List Bound to a SQL Database

It is common to build List controls that are populated with data from a SQL database. You can easily use the List to make edits to the data in the SQL database by defining a Detail View for the List.

You might want to make these edits using in-place editing, rather than by entering edits into the List's Detail View.

Even though you intend to make edits using in-placed editing, you should still turn on the List's Detail View. However, you need not actually define any Detail View controls.

When you edit the data in a List row, an orange icon will appear in the edited List row to indicate the the List row has been edited, but not yet synchronized.

When you are ready to synchronize your edits you can click the Synchronize button (just as you would have had the edits been made in a standard List with Detail View).

 

Watch Video

 

 

How to Dynamically Change the Choices in a Dropdown Control Used for In-place Editing

The choices in a dropdown control can be dynamically changed at run-time using Javascript.

For example, in the code below, the choices for the Country field dropdown box are changed to 'alpha', 'beta', 'gamma'. In the case of 'gamma', a stored value of 'g' is defined.

var lObj = {dialog.object}.getControl('list1');
lObj._inplaceEditing.choices.Country = ['','alpha','beta',['gamma','g']];

 

Editing All Rows At Once

When a List is initially rendered, you might want all of the rows in the List be in edit mode (so that the user does not have to manually put a row into edit mode before making edits).

The following Javascript methods of the List can be used:

 

.editInplaceEditAll() - puts all rows into edit mode

.editInplaceSaveAll() - saved all rows with edits

.editInplaceCancelAll() - cancels edits in all rows that are in edit mode.

 

For example:

var lObj = {dialog.object}.getControl('list1');
lObj.editInplaceEditAll();

 

   

Build 6043

 

 

UX Component - Data Bound UX Component - Server-side Save Data Action - A refresh query after CRUD action has been performed is no longer executed if the After Submit action is not set to Edit Record Just Submitted. Depending on the speed of your database, this will result in a noticeable performance improvement.

 

Build 6035

 

UX Component - List Control - Refresh List Action -Ajax Failed - The Refresh List action now allows you to specify Javascript to call if the Ajax callback fails, or if the device is offline.

 

Build 6033

UX Component - Weather Control - The UX now has a new control type to display weather in a specified city.

 

Watch Video

 

Here is an example of how the weather control looks.

 

To add a Weather control to a UX, select the [More...] item in the Data Controls section of the UX toolbox. Then open the genie to configure the control. You will need to specify an API key, which you can get from Accuweather.com.

 

 

Xbasic - a5_accuweather_forecast() Function - Gets current weather conditions and a forecast for a particular city from AccuWeather. Requires an API key from AccuWeather. The result is returned as a JSON string.

c resultJSON = a5_accuweather_forecast as c (C apikey,C city )

Build 6027

UX Component - ViewBox Control - Local SVG - You can now define local SVG for a ViewBox. Previously, the local SVG had to be defined at the Component level, which meant that the ViewBox definition was not completely stand-alone.

 

Build 6023

 

UX Component - List and ViewBox Control - Custom Datasource - When you specify that the control has a Custom datasource, you can now define the Xbasic functions as part of the control rather than in the Xbasic Function Declarations section. By defining the Xbasic as part of the control, the control becomes 'self-contained' as is then easier to copy to other components.

 

 

Build 6021

UX Component - PhoneGap - PhoneGap cli-9.0.0 - Added support for the latest PhoneGap cli version.

The following articles may be of interest :

https://blog.phonegap.com/cli-9-0-0-support-has-been-added-to-phonegap-build-da92fff6d588

https://developer.android.com/distribute/best-practices/develop/target-sdk?source=post_page---------------------------

 

UX Component - List Control - Detail View - beforeCRUDExecute Event - Display Sync Progress -  The beforeCRUDEvent executes when a List with a Detail View is synchronized. The event fires before each CRUD operation is executed. Two additional parameters are now passed to the event: total and number. total is the count of the number of CRUD operations to be executed. number is the number of the CRUD operation about to be executed.

For example, assume you have a UX with two Lists, customers and orders. Assume that there is a parent-child relationship between the two lists and that the data are pre-fetched (so the UX will work offline). Now assume that the user edits two orders for the first customer and three orders for the second customer.  In total, there will be five CRUD operations needed to synchronize the data. The beforeCRUDExecute event will fire five times. The total parameter will be 5 each time the event fires, but the number parameter will cycle from 1 to 5, allowing you to display a progress bar while the data are being synchronized on the server.

Build 6019

UX Component - Bulk Operation - Starting with Build 5982, an internal change was made to the internal stored format for UX Components. While no change is needed on your part to run UX components build before 5982 with build 5982 or higher, you can optimize performance of these older UX components by editing them and resaving then with build 5982 or higher. When you resave the component, the internal stored format is updated to the newer format. You can also do this conversion using a Bulk Operation by selecting Edit, Bulk Operation, Update UX Components to V4.6.1. format.

It is recommended (but it is NOT required) that you perform this bulk operation and then republish your site.

 

NOTE: You will still be able to edit your UX components with older versions of the UX Builder after you run this conversion.

 

 

UX Component - Added optimization for the window resize event to not fire the event too often.

		
			

 

Bugs

Build 6164

UX Component - Absolute Layout Container - Background Image - Print as PDF - When using Action Javascript to print an Absolute Layout container as a PDF, the background image was not printing.

UX Component - Radio Buttons - Render as Button List - Get Value - The .getValue() method was not working when the radio button control was rendered as a button list.

 

Build 6147

AlphaDAO - Postgres - Timestamp Fields - Fixed an issue with timestamp fields which were being recognized as Date fields rather than Datetime fields.

Build 6137

 

printQRCode Function - Size Parameter - The size parameter in the function was not being honored if you had not set the flagUseGoogle parameter to .t.. When the flagUseGoogle parameter is set to .t., printing QR codes can be quite slow because each QR code is rendered by making an API call to Google. The default value for this parameter is .f., which makes printing QR codes very fast, as an internal library is used to generate the QR codes.

 

Build 6125

UX Component - TextBox and TextArea - Sub-themes - Sub-themes were not being honored.

Build  6120

UX Component - Repeating Section - Data Bound - Transactions - Fixed an issue when doing data entry of a new record in a data bound UX component with Repeating Sections. If the Server-side action to save edits had the Use Transactions flag turned on, a error would be reported when the user tried to enter a new record into the Repeating Section.

Build 6117

UX Component - Maps - Action Javascript - Add multiple markers to the map - Client-side Data - Fixed multiple issues when properties such as 'Overlay' were bound to client-side data.

 

Build 6087

HTML Editor - A5W Pages - Live Preview Pane - If you switched to the Live Preview pane in the HTML editor, the a5_application.a5i file was not created as it should have been.

Bugs 6085

Application Server - Security Framework - Fixed a regression introduced in a recent pre-release build. The regression prevented a user from logging in to the security framework.

Build 6068

UX Component - Signature Capture Control - Fixed a regression adding the Signature Capture control to a UX component.

UX Component - Component Builder - Fixed a regression that occurred when a text string in any label in the component contained the // characters.

Build 6062

UX Component - Tab Controls - Fixed a regression for UX components with deeply nested Tab Controls (i.e. Tab Controls within Tab Controls)

Build 6025

UX Component - Client-side Show/Hide Expressions - Fixed an issue that would result in a control that should have been hidden being shown. The issue would arise under the following condition: The control has both a server-side show/hide expression or server side security setting, and also a client-side show/hide expression and the component was pre-rendered (and server-side security was set to be applied client-side)

Build 6020

Application Server For IIS - Fixed an issue where server was trying to access a file in the c:\bugs folder.

UX Component - Ajax Callbacks - Chunked Responses - Fixed an issue that occurred when the chunked response was very large.

Tips