Release Notes for Alpha Five V9 Update

Build 2095-3264 10-Mar-2009

New Browse - You can download the 'test' version (which includes the new Browse code) by clicking on the appropriate link.

IMPORTANT: If you have not tested your applications with the new Browse, we recommend that you do so as soon as possible as we will soon make this the new browse code the official release.

Download Patch with New Browse

Download Runtime/Run Engine with New Browse

 

Active Link Tables - Join, Subtract Intersect Operation - Trying to run one of these Operations using Active Link tables would sometime give an error message.
Active Link Tables - Copy Operation - Block Size - If the Active Link Table Block Size was set to a non-zero value, some records would not get copied correctly when copying an Active Link table to a native table.

AlphaDAO - Export - Under some circumstances, exporting data from a native table to a remote database would fail.

Form Layouts - Combo Boxes - Typing the first letter of a choice in the combo box did not always correctly synchronize with the first choice in the combo box that matched the letter that was typed.

Form Layouts - Query by Form - If you specified that Alpha Five should use a different form when you entered into QBF mode, then when you dismissed the QBF Form, Alpha Five would not repaint the parent form correctly.

Form Layouts - Frames - Simple Style - Right Justification - Was not working properly.

Web Applications - Operations - If you defined a operation to be run from an .a5w page, and you used the [PathAlias.ADB_Path] alias in the Xbasic, and if you set your preferences to resolve aliases at run-time, the Operation would fail when executed from the web page.
Email Reader - Was hanging after completing reading email.

Browse Layouts - Resizing Columns - When you resize a browse column, if you make the column narrower than the column title, the title is now clipped. Previously, it overflowed into the adjoining column.


 

Build 2085-3260 10-Mar-2009

Bugs

remove_blank_lines() Function - This function had previously been implemented in Xbasic. In the last update, it was converted to a native C++ function. In doing so, a bug was introduced in that it did not remove trailing blank lines from the string. This broke a number of Alpha Five features, such as Xdialog Genie - List View - using a Set as the datasource, Web Security - Users and Groups dialog box, etc.

Features

<form>.Close() Method - This method takes an optional argument which sets the value of a flag. If the argument is omitted the default value of the flag is .F. If the flag is .F., then when you use this method to close the form, Alpha Five will display a warning prompt if the data in the Form is dirty. If the flag is .T., then Alpha Five will close the form without warning, even if the data is dirty. A user requested a way to reverse the behavior so that if the optional argument was not supplied, the default would be to close a dirty form without warning. This can now be done using a new a5.system_mode_set() command.

Example:

a5.system_mode_set("close_flag_default","true")

To revert to the standard behavior:

a5.system_mode_set("close_flag_default","false")

 

.a5systemSettings File - You can now place a file called <DatabaseName>.a5systemSettings (e.g. Alphasports.a5systemSettings) in the same folder as the .adb file. This file can contain a CRLF delimited list of a5.system_mode_set() commands. When the database is opened, the a5.system_mode_set() commands in this file are executed, allowing you to tailor settings for a particular database.

 

 

Build 2077-3259 10-Mar-2009

 

Bugs

ActiveX Objects - In some cases, Xbasic that passed arguments by reference to ActiveX objects was not working correctly.

Forms - Subforms - Expressions - Say you had designed a form for the 'InvoiceItems' table and had defined font and color equations, such as "Qty > 100". If you then designed a form for a set that linked InvoiceHeader=>InvoiceItems and embedded the form that you had designed into the form for the set, the color and font equations would have stopped working because in the context of the set, the correct expression would have been "InvoiceItems->Qty > 100". Now, font and color equations are automatically fixed up when a form is embedded into another form.

Import -  Ascii Import - Skipping First Column  - If you defined an Ascii Import Operation, and you skipped the first column in the imported file, you would get an error.

Report Sorting - Multiple Levels of Grouping - Long Fields - If you had multiple levels of groupings in a report and each grouping field was 'large' (e.g.  say Character 100), then the report would fail to sort properly because the sorting expression that was generated exceeded the maximum key length. Now, Alpha Five intelligently trims the fields when constructing the sort expression for the report.

Field Rules - Lookups - Coded Lookups - Mapped Tables - Under some circumstanced, if a mapped table was used as the data source for a coded lookup, the coded value was not correctly displayed.

Xbasic Debugger - Large Scripts - Opening the debugger for a very large script will now be significantly faster.

Field Rules - Certain types of field rule were getting lost after you changed a table's structure.

Field Rules - Event Rules - OnWroteField and CanWriteField Events - If a field had a Lookup field rule and if the field's value was set by making a selection from the lookup window (as opposed to typing in its value directly), the OnWroteField and the CanWriteField events were not firing.

<Form>.Close(.t.) - The .close() method takes an argument. If the form is dirty and you execute the .close() method with the argument value set to .f. (the default value), then Alpha Five displays a warning message. However, if the argument is .t. the warning should have been suppressed (and the form should close, despite the fact that there were unsaved edits in the current record). Alpha Five was not suppressing the warning if the flag was .t.. This is now fixed.

Tables - Rename - Indexes - When you renamed a table, its indexes were removed.

Features

PNG Images - You can now add PNG images to the Code Tab of the Control Panel. Alpha Five will support transparent backgrounds on these images when you use them on forms, buttons etc. To support transparent backgrounds, you must add the PNG image to the Control Panel. When you place an image on a form, Alpha Five gives you the option of selecting an 'internal' image, or an image filename. You must use the 'internal' option to get transparent backgrounds on PNG images to work. The 'filename' option will not support transparent backgrounds.

 

Build 2055-3258 26-Feb-2009

Bugs

Forms - Summary Calculated Fields - As a result of an optimization added in build 2053-3256 summary fields were not being recalculated when you navigated from record to record under certain circumstances. This is now fixed.

Grid Components - AlphaDAO - Searching for values that contain a single quote (e.g. O'Hara) is now working correctly.

Build 2053-3256 26-Feb-2009

Bugs

Forms - Summary Calculated Fields - Under some circumstances, Forms with a lot of summary calculated fields were slow because Alpha Five was recalculating the summary values more often than was necessary. This is now fixed, and the performance of these Forms is now substantially improved.

Letters - Letter.Print() and Letter.Preview() - These methods were not honoring the 'order' argument.

Forms - Buttons - 'Pre-Defined Actions' - When you place a button on a Form, you can select from a category of 'Pre-defined' actions which mirror all of the actions on the Form menus. When you selected one of these actions, you could not edit the action subsequently.

Import Operation - Ascii - Under certain circumstances, the Import Ascii operation was not working correctly.

Application Server - SSL - The Application Server will now check to see if SSL is enabled and the SSL certificate, chain file or private key file are within the webroot. This is a dangerously insecure configuration and, if detected, the server will refuse to start.
E-mail - 'SmarterMail' Server - Sending e-mail using the 'SmarterMail' Server is now supported. Typically an SMTP server tells the client about its abilities upon connecting, but SmarterMail does not. Alpha Five had been relying on the server for this information and since SmarterMail didn't reveal that it supported authentication, Alpha did not attempt to authenticate. Alpha Five is now able to attempt authentication and fall back gracefully on a server that does not support it, which enables emailing through SmarterMail.

File.From_Blob() and File.To_Blob() - Long Extensions - Under certain circumstances, if you specified filenames with 'long' extensions (i.e. more than 3 characters), the extra characters in the extension were ignored.  One symptom of the bug was when you tried to use the Application Server to upload a file called (for example) 'mydocument.docx', the file would be saved to 'mydocument.doc'. This is now fixed.

Layouts - Drag and Drop List - Calculated Fields - Duplicate Entries - If you had defined calculated fields at the table or set level and then you edited the calc field in the Layout editor a new copy of the calculated field would be saved with the layout, resulting in a duplicate appearing in the Drag and Drop list. This is now fixed.

Layouts - Exponent Numeric Fields - Did not support the same formatting options as Numeric fields. This is now fixed.

Script Editor - Auto-Complete  - Table.Open() - When you type "table.open(" in the script editor, the auto-complete bubble help allows you to either right click, or press control down arrow to get available choices for a function operand. In the case of the second argument in table.open(), right clicking on the 'table_open_mode' parameter worked, but pressing Control Down arrow did not work. This is now fixed.

Xbasic Explorer - When you expand a node in the tree, focus is now given to the top entry on the node that was just expanded. Previously focus remained on whatever entry had focus before you clicked on a node to expand it.

E-mail Reader - A bug in retrieving emails that caused the email headers to occasionally be misinterpreted has been fixed. Previously, email sent using DomainKeys could cause incorrect values to be extracted for fields such as To and Subject.

E-mail - When you define your e-mail settings (i.e. your 'Profile'), there is a button that allows you to verify your settings. If you had specified that authentication was required, Alpha Five would incorrectly report an error. This is now fixed.

Netmailer - Authentication - Netmailer jobs were not running if your email server required authentication. This is now fixed. To get the fix, you must install an updated version of Netmailer. Use the original download link in your Netmailer order confirmation e-mail to download an updated version of Netmailer. (You cannot use this updated version of Netmailer with older versions of Alpha Five).

Field Rules - Lookup - Mapped Tables - If a Field Rule lookup was defined in which the lookup table was a mapped table that joined two or more individual tables, and the lookup filled in multiple fields, fields that were filled in from a child table in the mapped lookup table were not correctly filled in under certain circumstances.
 

Features

File.FileName_Parse() Method - Two new flags are available. 'U' for the UNC machine name and 'S' for sub-directory. Using 'US' together is equivalent to the existing 'P' flag.

Sending E-mail in a Web Application - An alternative to email_send() - The email_send() function, which is commonly used in Desktop applications to send e-mail, relies on profiles for information about the mail server. The following example code shows how you can use low-level Xbasic commands to send e-mail without relying on stored e-mail profiles.

 

vTo = "addressee@mycompany.com"
dim pm as P
dim ps as P
dim email_result as l
vMessageStr = "here is may messsage."
flag = email_smtp_open(ps, "mail.mycompanymailserver.com", 25, "myuserid", "mypassword")
if flag = .f. then
        'report an error to the user
        end
end if
pm._to = vTo
pm.from = "me@mycompany.com"
pm.from_alias = "Your Name"
pm.subject = "Subject"
pm.attachments = ""
pm.html_message = "<HTML>Here is my message</HTML>"
email_result = email_smtp_send(pm, ps, .f., .f.)

 

if email_result <> .t. then

    'report an error to the user

end if
email_smtp_close(ps)



Layouts - Drag and Drop List - Calculated Fields - Alpha Five allows you to define Calculated fields at the table, set and layout level. Previously, the Drag and Drop list showed a flat list of calculated fields, making it impossible to know where the calculated field had been defined. Now, the list shows where each calculated field was defined. If a field is not qualified, then it is a local calculated field (i.e. defined in the layout).

 


 

Build 2005-3252 2-Feb-2009

Bugs

Lookups - In certain cases, making a selection from a Lookup window (displayed by a Lookup Field Rule) would cause an error.

Bitmaps - Importing bitmaps into the Code pane of the Control Panel could hang Alpha Five.

Deleting Records - In Browse Mode, right clicking on a record and selecting 'Delete record' would sometimes fail to delete the record (bug was not present in build using the 'New Browse').

 

Build 1997-3250 29-Jan-2009

Bugs

Grid Linker, Tabbed Grid Linker, Maintenance and Login Components - A bug that was introduced in a recent patch when placing these components in an .a5w page has been fixed.

Build 1995-3248 28-Jan-2009

Features

Forms - Checkbox and Two-State Button Controls - You can now define a different label to display next to the control depending on the control's state. Previously the control displayed the same text for both the control's true state and its false state. To define different labels for the true and false state, display the Properties Dialog for the control and set the control text to '<Auto>'. This will enable two additional controls on the dialog where you can set the True label and the False label.

Bugs

Grid Components - Lookup Fields - Lookup fields were broken in the last two updates.

 

Build 1991-3247 26-Jan-2009

Bugs

If you installed build 1984-3245, you should install this build as it fixes a number of issues that were introduced in build 1984-3245. These issues were primarily related to the way in which Xbasic classes are instantiated. Not all users were affected by this.

Build 1984-3245 23-Jan-2009

Bugs

Active-Link Tables - Delete Operations - In some cases, after a Delete Operation had run, Alpha Five did not report back the correct number of records that had been deleted.

<table>.LogicalRecord_Set() Method - Was not skipping over deleted records.

Browse Layout - Ellipses - If you had formatted a column to show ellipses, the ellipses were also being shown in the New Record row.

Form Layouts - AlphaSports 'Customer' Form - Multi-state Buttons - Were not working correctly (in the 'New Browse' build).

Web Application - Grid Component - If the Grid used column spacers and had summary fields, the summary fields did not appear in the correct columns. Also, it was not possible to create a Grid with a single field that was defined as a Custom control.

Features

Import - Ascii Import - If your ascii file includes currency values with leading $ signs, previously Alpha Five would import these as character values. Now, it ignores the $ sign and imports as numeric.

Action Scripting - Run Saved Operation Action - The default comment that is generated now specifies the type and name of the operation.

 

Build 1938-3239 24-Dec-2008

Lookup Field Rules - Under certain conditions, lookup field rules were not filling in related fields.

Active Link Tables - A bug was introduced in build 1927-3238 that broke active-link tables.

New Browse - You can download the 'test' version (which includes the new Browse code) by clicking on the appropriate link.

Download Patch with New Browse

Download Runtime/Run Engine with New Browse

 

 

Build 1927-3238 24-Dec-2008

Bugs

Grid Component Builder - Cosmetic error in the builder, introduced in previous update, has been fixed.

VISTA - Printing - Under Vista, if you printed more than one copy of a report, you would get twice as many copies as you requested. This is now fixed.

Features

  Version() Function - New Flags - The version() function can now take the following new flags:

 

ON Operating System name (e.g. "Windows XP")
OV Operating System Version Number (e.g. "5.1")
OB Operating System Build Number (e.g. "2600")
OS Operating System Service Pack (e.g. "3.0")
OP Platform (Workstation, or Server)

 

Build 1923-3234 22-Dec-2008

 

Web Applications - Grid Components - Under certain conditions, Grid components with detail views and images could show the wrong image on the Grid or show an error in the detail view image field. This only occurred if the same image field was used in both views. This has been fixed.

Web Applications - Grid Components - Image Reference Fields - Fields in Grid components formatted as "Image File Reference" have a property to specify an image path. If an image path or path alias was not specified, the system would attempt to find the linked image using the path of the current open database if the image file reference value did not have a full valid path. If no database was open, the image was not found. The system now defaults to the path in the [PathAlias.ADB_Path] alias if the image path property is not assigned.

Lookup Field Rule - Auto-popup - The option to automatically popup the lookup window when a field got focus was not working consistently.

Field Rules - Default Value - At end of enter, set default value if field not touched by user Option. This option was not working correctly.

Forms - Modal/Modeless Data Entry - Some additional situations were corrected in which the Modal/Modeless data entry state of a Form layout was changed after opening a lookup table.

Build 1917-3232 19-Dec-2008

Forms - Sets - Tab Order - In a form that is based on a set, it is possible (although illogical) to set the prompt order so that a field from a child table is the first field in the prompt order. Doing this, however, could cause a problem when you enter a new record - especially if there are any required fields in the parent table of the Set. The reason is that if focus goes to a field in a child table, the new parent records is immediately saved - before the user has a chance to set values in any of the required fields - and so you immediately get an error message telling you that a required field was not filled in. Now, if you have set a child field to be the first field in the prompt order, this is only honored when editing an existing records. When creating a new record, the first field in the prompt order is set to a field from the primary table.

Field Rules - Required Field Rules - Under certain circumstances, it was possible for the 'required field' error message to be displayed twice instead of once. Also, when you save a record, the required field rule for the field with focus is evaluated first. Previously the required field rules were evaluated in alphabetical order.

Forms - Modal/Modeless Data Entry - Under certain circumstances, the Modal/Modeless data entry state of a Form layout was changed after opening a lookup table.

Active-Link Tables - Append Operation - A bug when appending from an active-link table into a native table has been fixed.

Invalid Key Length Error - When you specify an order expression in an Alpha Five query, if the order expression key length was too long, Alpha Five would generate an error message. Now, it automatically truncates the key and no error message is generated.

Build 1901-3220 - 11-Dec-2008

 

Browse - Starting with build 1869-3218, the Browse object was based on new code that we had been working on for some time. This new code makes Browse more maintainable and sets the stage for future enhancements. Unfortunately, the new Browse code has introduced some new bugs. We are working as quickly as possible to address these issues, but in the mean time we are reverting to the old Browse code.

Once we have completed further testing on the new Browse code, we will include it in an update.

Until the new Browse code becomes the 'official' update, we will release two versions of each update - an 'official' update that does not include the new Browse code, and a 'test' update that does include the new browse code.

Build 1898-3223 - 10-Dec-2008

Bugs

Mapped Table - Could not select rows using the mouse.

Forms - Query by Form (QBF) - Was not refreshing the display with the result of the query.

Browse - Events - OnRowChange event - Is now firing correctly.

Build 1896-3222 - 9-Dec-2008

Features

AlphaDAO - Excel 2007 and Access 2007 File Format - AlphaDAO can now work with Excel 2007 and Access 2007 files. You can import, export and update data in these file formats.

Embedded Browse - An embedded browse on a Form layout now supports a Resynch() method. For example:

topparent:browse1.resynch()

Previously, .resynch() was only supported at the top level. e.g.

topparent.resynch()

Bugs

Browse - The new Browse object, released in build 1869, did not support browsing on a set with one-to-many  links. It only showed one instance of each parent record, regardless of how many child records a parent record had. This is now fixed.

CSS Style Sheet Builder - Was inserting unnecessary white space in the css file when the file was saved.

Build 1888-3221 - 4-Dec-2008

Form Layout - Memo Fields - Opening the Pop-up Editor - When you click the pencil icon on a memo field, the pop-up memo editor is displayed. If the record was already in change mode, and the memo field did not have focus, then it required two clicks to open the pop-up editor.

Form Layout - Tree Controls - Bitmaps -  The Properties Dialog Box gave the impression that tree controls with bitmaps could be defined. Alpha Five does not support bitmaps in tree controls on Forms. Now, the 'Define Bitmap' button is always disabled for Tree controls. If you want to define a tree control on a form that contains bitmaps, you must define an Xdialog that contains a tree control with bitmaps, and then embed the Xdialog on the Form.

Form/Browse Layouts - Show All Command and Quick Filter Command - As a result of the changes for the new Browse (introduced in Build 1869) these commands did not work correctly in certain circumstances.

Build 1884-3220 - 2-Dec-2008

Bugs

New Browse - This update fixes several bugs in the new Browse object that was released in the previous patch.

Active-Link Tables - Shadow Databases - If a Shadow Database was refreshed, the active-link tables in the Shadow Database were not correctly refreshed.

Bugs

Query Flag - The 'P' Flag - A new flag has been added for Queries. If you get a pointer to the same table that a Browse or Form layout is based on, the 'p' flag causes a query to be run without notifying the attached 'view' (i.e. Form or Browse layout) that the query has changed. As a result, the data in the Layout is not refreshed to reflect the new query.

For example, from the Interactive window, using AlphaSports (after the 'CustomerBrowse' browse has been opened):
 

DIM t as p

'get a pointer to the same table instance that the browse is based on
t  = customerbrowse.table_get()

t.query_create("","bill_state_region='ma'") ' Browse will show records with 'ma' after this command

 

'Now press the 'Show All' button on the toolbar so that Browse is again showing all records.
t.query_create("p","bill_state_region='ny'") ' Browse ignores this query
 

 

The reason for adding this new flag is to allow users to avoid the need to save/restore the index when a script needs to do a query on the same table instance as the Form or Browse layout, but does not want the Browse or Form layout to use the query in the current view.

Build 1869-3218  — 25-Nov-2008

Bugs

Network Optimization - Active Link Tables - Was not copying the dictionary files for the active-link tables to the shadow database.

Layouts - Anchor - Resize - If a Form Layout contained an object that was anchored to the sides of the Layout, if that object had rounded corners, it was not resized when the Layout was resized.

AlphaDAO - toString() Method - When calling the .toString() method to convert a resultset to a string, if the method was called from a resultset object, crlf characters were inserted between rows. But if the method was called from a connection object, Alpha Five was using line-feed characters. It now uses crlf.

Form Layout - Dropdown Tree Control - Enter did not allow you to navigate from a dropdown tree control to the next control on the form, and the onChange event was not firing when the selection in the control was changed.

Layout - Calculated Fields - Previous() Function - Improvements in the way that calculated fields that use the Previous() function are implemented.

Features

Web Applications - Publishing - When you publish an .a5w file, if a file with name of <filename>.ajax.a5w exists, it will also be automatically published. For example, say you publish a file called "orders.a5w", if a file called "orders.ajax.a5w" exists, it will also be published.

Web Applications - AJAX - FireFox - FireBug - (Advanced Users Only) Many users who develop AJAX web applications in Alpha Five use the Firebug extension in Firefox to debug Ajax callbacks. In this release we have added support for high order characters in Ajax applications (previously, if you sent an Ajax response to the browser with a high order character in it, the high order characters were garbled). As a result of this change, the "Post" tab in Firebug no longer shows the variables that were submitted to the server in a cleanly formatted list. This is a bug in Firebug. A new Xbasic function - fbug() - can, however, be used to quickly format the data in the Post tab.

Here is how the data now appears in the "Post" tab in Firebug:


To use fbug(), simply copy the contents of the "Post" tab to the clipboard, then go the Alpha Five Interactive window and type:

fbug()

 

Browse - For the last several months we have been working on re-writing the internals of the Browse object to make it easier to maintain, and to set the foundation for further enhancement. This release now includes the new Browse object. We have tested the new Browse object extensively, but in the event that you find an incompatibility between the new Browse object and the old object, please report your findings at a5v9bugs@alphasoftware.com.

Active-Link Tables - Field Rules - Optimization - If you have defined a Table Lookup Field Rule for a field, when the lookup window is popped up, Alpha Five will search in the lookup window for the record that matches the existing entry in the field (if any). If the lookup table is a .dbf file, finding the existing record in the lookup table that matches the existing entry in the field is very quick.

However, in the case where the lookup table is an active-link table, Alpha Five will open the lookup window, and then start searching in the background for the record in the active-link table that matches the entry in the field.  If the active-link table is very large, this background search might take some time and might result in the lookup window feeling 'un-responsive'.

A new flag has therefore been added to the active-link definition to turn off the background search after the lookup window is opened. There is no user-interface to set this property. You must edit the <tablename>.dbp file manually and insert this text into the file:

<AllowAutoFind=.F.>

For example, here is how a portion of the .dbp file will look after you make the edit:

<BlockSize=50>

<AllowAutoFind=.F.>

<AllowUpdate=.T.>
<AllowInsert=.T.>
<AllowDelete=.F.>

 

Build 1847-3216 - 14-Nov-2008

Bugs

Table.Send() Function - Failed if the table did not have memo fields.

Field Rules - Always Required - Was being enforced when you tabbed out of a required field, but not when you saved a Form.

Build 1836-3213 - 11-Nov-2008

Bugs

Active-Link Tables - Parameters - Database Compact - When compacting a database that has active-link tables, some of which have parameters in their SQL Select statements, Alpha Five no longer prompts for parameters.

Mapped Tables - If a mapped table joins a table to itself, it can now be zipped. Previously, Alpha Five would generate an error.

Application Server - A security problem in the Application Server that could potentially allow access to files outside of the web root has been resolved. The Application Server now fully recognizes absolute URIs in HTTP requests and handles them properly. The Application Server no longer forces the client to resend a request that was received without a session ID. A number of cases where a malicious request could cause the Application Server to crash have been fixed.

Build 1821-3212  — 1-Nov-2008

Bugs

E-Mail Send and E-Mail Receive Functions - A change in the previous update broke these two functions. This is now corrected.

Active-link Tables - Field Rules - Calculated Field Rule - Calculated field rules now work correctly with active-link tables.

Form Layouts - Radio Button Controls - Improvements in the behavior of radio button controls on Form layouts.

 

Build 1817-3212  — 30-Oct-2008

Bugs

Active-Link Tables - Override Field Definitions - If you changed the field definition of an active-link table, changing a numeric, or date field to a character field, the active-link table was not properly populated. This is now fixed.

Active-Link Tables - Append Operation - Append Unique Option - The 'Append Unique' and the 'Append Unique, Replace Existing' options are now supported for Append Operations involving active-link tables.

Sets - 'Include Parent Only If No Matching Child' Option - Under some circumstances, a set that was defined using the 'Include Parent Only If No Matching Child' option could not be opened.

Calculated Fields - A_CASE-> Prefix - Under some circumstances, field names from the primary table in a Form would would be prefixed with 'A_CASE->' in the calculated field definitions.

date_is_in_this_week() Function - This function was not implemented. It is now working correctly.

Layouts - Date Fields - Read-Only - It was possible to change the value in a date field that had been set to read-only by opening the pop-up calendar and selecting a new date in the calendar. This is now fixed.

Forms - Anchors - If you anchor a control to the sides of a form, then when the form is stretched, the control is also stretched. This works correctly if the form dimensions are in inches, but was failing if the form dimensions were in centimeters.

Features

Xdialog - Icon and Cursor Images - You can now display icons (.ico files) and cursors (.cur files) in an Xdialog using the {Image} command. You can also use the 'imageresource' object to alias the icon and cursor filenames. For example, assume that you have an icon file called 'c:\images\icon1.ico' and a cursor file called 'c:\images\cursor1.cur'.

ui_dlg_box("Show Images",<<%dlg%

{image=c:\images\icon1.ico};

{image=c:\images\cursor1.cur};

%dlg%)

 

Now, using the 'imageresource' object to alias the image names:

ir = imageresource.get()

nm = ir.GetBitmapNameMap()

nm.set("icon1","c:\images\icon1.ico")

nm.set("cursor1","c:\images\cursor1.cur")

ui_dlg_box("Show Images",<<%dlg%

{image=icon1};

{image=cursor1};

%dlg%)

 

Active-Link Tables - Delete Operation - If you define a Delete Operation on an Active-Link table, Alpha Five will execute the operation on the server (if possible), rather than on the client. This will result in the Operation being executed significantly faster.

Xdialog - {nosizethumb} Command - If an Xdialog is made resizable (by including the {Stretch} command, the bottom right corner of the Xdialog window will show the resizer icon. If you want to prevent the resizer icon from appearing, you can include the {nosizethumb} command.

Active-Link Tables - Queries - When you query an active-link table, Alpha Five automatically tries to optimize the query and execute it on the server if possible. When you create an active-link table, you can override field definitions, so, for example, the 'customer_id' field might be defined as a numeric field in the SQL table, but as a character field in the local active-link table. If you overrode the field type of a field in an active-link table, then when Alpha Five converted the filter expression to execute on the server, it did not correctly take into account the fact that the field types might be different in the local active-link table and on the server. This is now fixed.

*gunzip_text() and *gunzip_blob() Functions - These functions are now implemented to unzip text or blobs that were previously compressed using the *gzip_text() and *gzip_blob() functions.

Build 1772-3208  — 7-Oct-2008

Features

Forms - Data and Time Fields - Type-In Fields - Disable Pop-up - In Version 9, if you place a date or time field on a form, then, when the field gets focus, Alpha Five automatically shows an icon to the right of the edit control to open a date or date/time picker. Some users have requested that this automatic display of the icon be suppressed. There is now a new setting which can be made using Xbasic to turn off the automatic display of this icon. The command is:

a5.system_mode_set("Show_Calender_Icon_For_Type-In_Fields", "No")
 

The default value for this setting is Yes.

Typically, the above command would be placed in your application's autoexec script.

Locale Neutral Date and Time Formats - In the US, date variables in Xbasic are specified using this syntax:

{m/d/y}

For example:

{12/31/2008}

In most other countries, date variables in Xbasic are specified using this syntax:

    {d/m/y}

For example:

{31/12/2008}

 

Xbasic now supports a new, locale-neutral date and time format, using this syntax:

{yyyy-m-d}, or {yyyy/m/d}

For example:

{2008-12-18}

{2003-2-1 3:40pm}

Bugs

Application Server - The SSL cipher change that was made in the last patch introduced a problem that prevented an SSL server which did not specify a specific SSL cipher suite from starting up.

Application Server - Xbasic Exception - Occasionally, on certain machines, when executing a .A5W page, the server would respond with an error message "Xbasic Exception". Simply refreshing the page would solve the problem. The cause of this occasional error message has been identified and fixed.

Application Server - SSL - Keep Alive - If both SSL and Keep Alive were enabled, the server would start to slow down.
Application Server - Keep Alive - The Application Server setting for maximum Keep Alive requests per connection is now properly enforced.
Backup - Retain Previous Backup - Archived Files- If the previously created backup files had their archive bit set, then when creating a new backup, Alpha Five would ignore these files when calculating the sequence number for the next backup file.

Forms - PageDown or PageUp- If you had edited a record, but not yet saved the edits, then pressed PageDown or PageUp to navigate to another record, Alpha Five was not saving the record.

Forms - Embedded Browses - In certain situations, a field in an embedded browse on a form could not be edited until a field in the parent table had first been edited.

Browse - Numeric Fields - Cursor Position - If you gave focus to a numeric field (i.e. a right justified field), the flashing cursor was displayed outside the cell. This cosmetic problem is now fixed.

HTML Editor - When you delete a component from an .a5w page (while you are on the WYSYWIG pane of the editor), then save the page, some special clean up code is run to remove the Xbasic commands that load and run the component that you deleted. However, if you close the HTML editor without first saving the page, a dialog comes up asking if you want to first save the page. If you select Yes at this prompt, the page is saved, but the clean up code was not being run. This left orphaned Xbasic code in the .a5w page that resulted in slower page loads (because the page was still running the components, even though they were no longer being displayed).

Build 1744-3207  — 23-Sep-2008

Bugs

Form and Browse Layouts - Calculated Fields - Under certain circumstances fieldnames in calculated field expressions would get qualified with the 'a_case' table prefix. I.e. 'firstname' would become 'a_case->firstname'. If you have experienced this problem, you must edit your calculated field definitions and remove all references to 'a_case->'. (A simple search and replace is all that is required. You can copy the calculated field definitions into an editor, fix them, and then paste the edited definitions back into the editor.)

Features

Ascii Import - UTF 8 - The Import Properties dialog box now has a new option, 'Assume all extended characters are UTF8 encoded'. Checking this option will allow you to correctly import ascii files that are UTF8 encoded, even if the files are not marked as UTF8 encoded. To display this dialog, click the 'Import Properties' button that is on the Import Builder window.

 

Build 1734-3205  — 18-Sep-2008

Bugs

Field Rules - Calculated Fields - Time Fields - Fixed a problem where an expression that correctly returned a Time value for a Time field resulted in an error message.

Field Rules - Lookup Field Rule - Display as Dropdown - Fixed a problem when resizing the lookup window.

Web Applications - Date Picker - Internet Explorer V6 - Fixed a problem with the date picker that was only apparent in Internet Explorer V6.

Features

Application Server - SSL- Ciphers - You can now optionally set the SSL ciphers used by the Application Server. The setting is on the SSL tab of the Application Server Control Panel.

If left blank, it uses the default cipher suite provided by your libeay.dll and ssleay.dll files. The format for the cipher list is specified in the OpenSSL documentation for ciphers(1) and is the same format used by Apache so you can use the string recommended by McAfee in your vulnerability report (ALL:-ADH:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP).
 

 

Build 1724-3203  — 13-Sep-2008

Bugs

Forms and Browse Layouts - Toggling Between Form and Browse View - When you toggled between form and browse view (using the F8 key), Alpha Five was not displaying the same record.

Build 1722-3202  — 12-Sep-2008

Bugs

Application Server - Zero Byte Files - The Application server would hang if it opened a file with zero bytes.

Web Applications - Grid Linker - Firefox 3 - Firefox 3 was not able to display a Grid Linker correctly. This is now fixed. The problem resulted from the use of a double dash (i.e. -- ) inside the body of an HTML comment, which apparently all other browsers, but not Firefox 3, handle correctly.

A5_split_url() Function - Previously, this function would truncate the query string if it contained a ? within it. It now returns the full query string, even when it contains a question mark within it.
Browse Layouts - Ellipses Formatting - If you turned on the ellipses formatting option for Browse columns (to show ellipses for columns that are too narrow to display the full contents of the field), any column that contained a '&' character did not display properly.

Mapped Tables - Self Link - If a mapped table was constructed with a table that was linked to itself, when you checked if the mapped table was in use, it always reported True. This meant that the mapped table could not be backed up, or sent via Alpha Five's built in email tools. This is now fixed.

Form Layouts - OnSave and CanSave Event - If you tab into an embedded Browse on a form, the current record that you are editing is automatically saved. However, the Form's OnSave and CanSave events were not being triggered.

Forms - Summary Fields - Certain Form layouts with a large number of summary fields were slower to load than in previous version of Alpha Five. This is now fixed.

Active-Link Tables - Oracle - Some  issues related to updating active-link tables based on Oracle backends are now resolved.

Features

Form Layouts - Tree Controls - The tree control on a form layout now supports background colors and colors on the font used in the tree control.

{removeleadingspaces} Xdialog Command - You can use this command anywhere in the body of an Xdialog if you want to automatically remove any leading spaces in the Xdialog body. The command must be on its own line. This is useful if you want to use indentation in your Xdialog body to make it more readable. If you use indentation in creating the Xdialog body string, but don't use this command, the indentation will mess up the layout of your Xdialog.

Form Layouts - Hotspots - Fields - Placing a hotspot over a read-only field is now supported.

RTF Memo Fields - Default Font - If you set the default font for a RTF Memo field (in View, Settings), the default font was only honored if you edited the RTF Memo field using the popup editor. Now it is also honored if you type text directly into the memo field.

Zip Database  and Send Database Command - Web Project Files - These commands include a checkbox option to include Web Project Files. Previously, the checkbox always defaulted to unchecked. Now, Alpha Five remembers the last state of the checkbox every time the Zip Database or Send Database dialog is opened.

a5_DefaultValue_Set() Function - Allows you to store a value in the registry. The value is stored in the following key location:

HKEY_CURRENT_USER\Software\Alpha Software\Alpha Five 9.0\preferences\DefaultValueForVariable

 

a5_DefaultValue_Set("Company","Alphasoftware, Inc.")

 

a5_DefaultValue_Get() - Allows you to read a value from the registry that was previously set using the the a5_DefaultValue_Set() function.

dim companyName as c

companyName = a5_DefaultValue_Get("Company")

 

Visual Foxpro - AlphaDAO - Alpha Five can now connect to Visual Foxpro tables subsequent to Version 2.6. Visual Foxpro files that are Version 2.6 or earlier are the same as native Alpha Five Files, and can be used directly (by simply clicking the green + icon on the toolbar and adding the files to the Alpha Five Control Panel). However, for files after Version 2.6, it is necessary to use AlphaDAO to create passive-link or active-link tables in order to work with the Foxpro tables.

To access a Foxpro table using AlphaDAO, you much first create an ODBC DSN, then when you build your AlphaDAO connection string, select the ODBC option and also select ODBC as the language.

Posting Operation - Improved Error Message - A Posting Operation will fail if you try to post a value that is too large for the field field that contains the value. However, it can also fail in a more subtle way. You can post a value to field that is an input into a calculated field. The value that you post to the field might be OK, but the resulting calculated value might be too big for the defined size of the calculated field. Alpha Five now displays a much improved error message:

 

Table Queries - Arguments - You can now use arguments (i.e. the SQL::Arguments object) when you use Xbasic to query .dbf tables. For example:

dim t as p

dim i as p

t = table.open("customer")
dim args as sql::arguments
args.add("whatState","ca")
i = t.query_create("","bill_state_region = :whatState","",args)

 

 

'Using the 'query' object:
dim args as sql::arguments
args.set("whatState","ny")
t = table.open("customer")
query.filter = "bill_state_region = :whatstate"
query.order = ""
query.arguments = args
i = t.query_create()
?t.BILL_STATE_REGION
= "NY "
 

Using SQL::Arguments in a query is an alternative to the following Xbasic patterns:

dim t as p

dim i as p

t = table.open("customer")
i = t.query_create("","bill_state_region = \"Ma\""))

 

 

'Using the 'query' object:

dim whatState as c

whatState = "NY"
t = table.open("customer")
query.filter = "bill_state_region = " + s_quote(whatState)

query.order = ""
i = t.query_create()
?t.BILL_STATE_REGION
= "NY "
 

 

Report Layouts - Detail Section Flow - Left to Right, Top To Bottom - Report layout have always allowed you to create multi-column layout that flow from top to bottom, left to right (much like the layout of a newspaper). However, you have not previously been able to create reports where the data in the Detail section flows from left to right, top to bottom (in the same way as the data in a mailing label is presented).

Now, using the Report, Properties, Band, Label Properties command, you can display the following dialog box, which allows you to flow the data in the report's Detail Section from left to right, and then from top to bottom.

 

Table.External_Record_Content_Get() - Using variables in Filter - Alpha Five will now expand variables in the filter expression. For example:

statename = "NY"
?table.external_record_content_get("customer","lastname+'-'+bill_state_region","","bill_state_region = var->statename")
= Feld -NY
Dubi -NY
Phillips -NY
Carr -NY
Barber -NY
Bernstein -NY
Baker -NY
Jones -NY

 

The above syntax is equivalent to:

statename = "NY"
?table.external_record_content_get("customer","lastname+'-'+bill_state_region","","bill_state_region = " + s_quote(statename))
 

Build 1634-3197  — 31-Jul-2008

Bugs

Forms - On-Key Event - If a form had a sub-form on it, on-key events defined at the parent form level were not being processed.

Field Rules - Table Lookup Rule - Display as Dropdown Option - If the lookup rule specified the name of a saved Browse Layout, the drop down window was not inheriting many of the display properties of the saved Browse layout. Also, if the lookup rule used a default layout, the lookup window now inherits the font setting from the parent control on the Form or Browse.

Update Operation - Time Fields - Under certain circumstances, an Update Operation on an time field would generate an error message saying that the update expression was the wrong data type, even though it returned a Time value.

Report - Preview - If you switched from color or monochrome mode, controls that had a color attribute other than black did not display correctly. This was just as cosmetic error as they would print OK.

Form and Browse Layouts - Records, Update Command - Native Tables - Now tells how many records will be updated before the update is performed. This is consistent with how the command behaved in V8.

Field Rules - Table Lookup - When you used an active-link table as the data source for a lookup field rule, on large active-link tables, it was slow opening the lookup window. This is now fixed.

Form Layouts - Combo Boxes - The data in the combo box now honors the vertical alignment property of the parent control.

Features

js_escape() Function - Escapes a string so that it safe to use in an AJAX application response. CR-LFs, CRs, and LFs are converted to \n, and single quotes are converted to '\'.

XML Parser - Will now ignore any metadata at the start of the XML.

Browse Layouts - Stand-alone Layouts - If you set the title.show_titles property using the Object Explorer while the Browse Layout is in design mode, then  you save the Browse, the property will be saved and when you next open the Layout in Run mode, the Browse Titles will not be visible. (Note: For embedded Browses, the show title property can be set directly from the Browse Object Properties dialog, and it has always been possible to turn off titles for embedded Browses).

 

Build 1600-3196  — 11-Jul-2008

Bugs

HTML Editor - Color Picker - Some users have reported that the color picker is not working. The a5controls.dll file was updated in a recent patch. The patch install program should be reregistering this control. If you find that the color picker is not working for you, manually reregistering a5controls.dll should solve the problem. To manually reregister this control, go to the command window and navigate to the folder where Alpha Five is installed. Then type:

regsvr32 a5controls.dll

If you are running under Vista, you might need to temporarily turn off UAC.

 

Application Server - Apache Mod - The combination of the Application server running with the Apache Mod was broken in a recent update. This is now fixed.

Passive-Link and Active-Link Tables - The option to create multiple tables at once was broken by the change to the WaitDialog in the previous update. This is now fixed.

Build 1593-3195  — 8-Jul-2008

Bugs

Table.External_Record_Content_Get() Function - Under some circumstances, using this function would strip indexes from a table.

Form Layouts - Clock and Calendar Supercontrols - When you opened a form that contained these supercontrols, the controls would be set to readonly.

Features

WaitDialog - By default, whenever you call a WaitDialog method to set the text or percent on the WaitDialog, the ui_yield() function is called internally. Under some circumstances you might want to manually call the ui_yield() function. You can now set a .autoRefresh property on the WaitDialog so that it does not automatically call ui_yield(). If you set this property to .f. you must insert ui_yield() calls in your script to update the WaitDialog. The default setting for this property is .t.

Dim x as waitdialog

x.autoRefresh = .f.

 

<Tbl>.data() Method. Table objects now have a new method to read data from the table.  <tbl>.data(fieldname) gets the value of the specified field from the current record.

t = table.open("customer")

ui_msg_box("",t.data("firstname"))

 

'The above code is a shortcut for this:

t = table.open("customer")

f = t.field_get("firstname")

ui_msg_box("",f.value_get())

Build 1581-3191  — 2-Jul-2008

Bugs

Record_add() and record_update() Functions  - These functions now support the new UUID field type.

Browse - PageUp key was not working correctly.

Features

Wait Dialog - The wait dialog has been rewritten and its performance has been improved. It is now centered when it is initially opened.

Using Xbasic to Manipulate Named Connection Strings - You can use Xbasic functions to manipulate (create, edit and delete) named connection strings. The following new functions have been added for working with named connection strings:

A5_ConnStringOperation() Function - Create, edit and delete named AlphaDAO or ADO connection strings.

Syntax:

a5_ConnStringOperation(C conn_mode ,C name ,C operation [,C library [,C data ]])

Where:
 

conn_mode Either 'AlphaDAO' or 'ADO' depending on the type of named connection string you want to edit/create/delete.
name Name of the named connection string.
operation 'Save' or 'Delete'. If you use 'Save' and a connection string with the specified name exists, the existing named connection is replaced. If there is no existing named connection, and new named connection is created.
library Leave blank if the connection strings are to be stored in the current Database library. Otherwise you can specify the filename of another Database library (e.g. the .alb file)
data The connection string.

 

Example:

 

'Create a connection string called 'MyNewConnectionStrng'

dim cs as c

cs = "{A5API=MySQL,Server='svr2',Port='3306',UserName='sam',Password='αμπ',Database='db1'}"

a5_connstringoperation("AlphaDao","MyNewConnectionString","save","",cs)

 

a5_ConnStrings_List() Function - Gets a list of the saved AlphaDAO or ADO named connections.

Syntax: C names =  a5_ConnStrings_List as c ([C Mode  [, C dictionary]])

Where:

dictionary Dictionary (i.e. .alb file) where the connections are stored. Enter a blank value to get named connections in the current database.
mode 'ADO', or 'AlphaDAO'



?a5_ConnStrings_List("AlphaDAO")
Adventureworks
Alphasports
Northwind
 

 

a5_GetNamedConnectionString() Function - Get the explicit connection string for a given name.

Syntax: C Explicit_Connection_String = a5_GetNamedConnectionString(C Named_Connection_String [, C type])

 

Where:

Named_connection_string Named connection string to resolve
type 'ADO', or 'AlphaDAO'

 

Example:

?a5_GetNamedConnectionString("Northwind")
= "{A5API=Access,FileName='C:\northwind\northwind.Mdb',UserName='Admin'}"
 

Build 1577-3192  — 30-Jun-2008

Bugs

Table.External_Record_Content_Get() Function - Failed if the filter expression was specified as a null string, rather than ".t.". This bug caused the New Form and New Browse genie to fail. This is now fixed.

Build 1574-3191  — 28-Jun-2008

Bugs

Printing - After printing or previewing a layout, the table(s) that the layout were based on were not being closed.

Application Server - Server Settings - The Server Settings were previously stored in the Registry. Now, they are stored in an XML file. The location of this file can be determined from the following expression:

A5_GetInstallationApplicationDataFolder(.t.) + "\ApplicationServerConfig.xml"

 

This change means it is now possible to run multiple Servers (each installed in a different location) on the same physical machine (on different ports), because each will have their own settings file.

(Note: a5_GetInstallationApplicationDataFolder(.t.) returns a unique folder name for each installation of Alpha Five on a machine.)

As a result of this change, you should check your Server Settings for 'gzip' and 'Keep alive' to make sure that they are set to the desired options.

 




 

Build 1565-3191  — 22-Jun-2008

Features

Fonts - Menus - You can now define custom font settings for all menus in Alpha Five. Select View/Settings/System Fonts and select the 'Menus' category.

AlphaMailer - Will now work if you are located behind a proxy server.

Bugs

Browse - A recent patch introduced a bug in browse where the up arrow and mouse wheel would not scroll up to previously viewed rows. Also, a bug was introduces which caused buttons in Browse Controls to fail. Both issues are now fixed.

Crash on Exit - Under some circumstances, on exiting from Alpha Five, it would report a crash. This is now fixed.

Field Rules - Case Convert - 'Word' Option - Did not work correctly if 'Check exceptions' was selected.

Application Server - On some machines, some users were unable to start the Application Server. This is now fixed.

AlphaDAO - Insert - The previous update introduced an error in AlphaDAO when inserting new records into a SQL table.

Build 1561-3190  — 22-Jun-2008

Bugs

 

Xdialog - Buttons - A bug was introduced in build 1557-3189 that resulted in certain buttons on Xdialogs getting broken. Clicking on the button did not invoke the button's OnClick event. Many different functions in Alpha Five were impacted by this bug and if you had installed build 1557-3189, then this update is an essential update.

Web Components - Grids - Shorttime Fields - If you had previously built a Grid component in V8 that used shorttime fields, the component did not display data from the shorttime fields. This is now fixed.

HTML Editor - Page Properties and Table Properties Dialog Boxes - Color Picker - Under certain conditions, the color picker on these dialogs did not work.

Build 1557-3189  — 20-Jun-2008

Features

Action Scripting - Xdialog Genie - Check-Box List Box - Previously this control type did not let you set the control height. It always defaulted to 5 lines high. You had to convert to Xbasic to adjust the height.

a5_show_html() Function - Now allows you to specify an optional parameter to display a WSIWYG and SOURCE tab and to specify the default tab.

UI_Get_Password() - Now highlights the default password so that the user can start typing and immediately replace the default value. This is consistent with the behavior of this function before it was rewritten using Xdialog in a recent update.

Web Applications - Grid Component - ADO and AlphaDAO - Images - If the SQL table on which you were building a Grid component contained binary fields with images, you did not have any control over how Alpha Five interpreted the binary data. You can now specify a 'format' parameter for the Image control type in the Grid that lets you specify if the data in the field is a BMP, JPEG or OLE BMP image.

Bugs

 

Browse Layouts - Browse Controls - When you placed a button in a browse layout to open another Form, if you chose the 'Dialog' option, the generated code did not include the necessary command to close the target form. If you have previously placed a Browse Control to open a Form in Dialog mode on your Browse, you should delete it and reselect it (this will cause Alpha Five to regenerate the Xbasic).

Crash on Exit - Occasionally, when exiting Alpha Five, you would get a crash.

Forms - Report Preview Supercontrol - Tabs - If you placed a Report Preview supercontrol on a pane of a tab object, the control would be visible regardless of which tab page was selected.

Forms - Find by Form - Active Link Tables - Would give a 'Record not found' message, even though the record had been found.

Forms and Browse Layouts - HTML Bubble Help - Was limited to a width of 600 pixels even though the user interface allowed you to specify a larger value.

Multi-state Buttons - Even if no button had been selected, the first button was shown as being selected.

Table.External_Record_Content_Get() Function - If the content expression contained a UDF, the function would fail.

 

Build 1534-3188  — 9-Jun-2008

Bugs

a5_add_fields_to_table() Function - Failed if the table had shorttime fields.

Features

AlphaMailer - This release adds a major new feature. AlphaMailer is an on-line service for sending our e-mail broadcast messages. For details, select Help, What's New in V9. You will see 'AlphaMailer' listed in the left hand column.

 

Web Applications - Reports - SQL Named Datasources - Previously named datasources could not be used in SQL Reports that were used in Web Applications.

Httpdate() function - Takes a date, time or character input (containing a date/time value) and formats it as a HTTP/1.1 formatted date. If no value is passed in, uses the current time.

?httpdate(now())
= "Wed, 04 Jun 2008 19:41:23 GMT"

?httpdate({6/9/08})
= "Mon, 09 Jun 2008 04:00:00 GMT"

?httpdate("03/29/2006")
= "Wed, 29 Mar 2006 04:00:00 GMT"

?httpdate("03/29/2006 03:35")
= "Wed, 29 Mar 2006 07:35:00 GMT"

dim tt as t
?httpdate(tt)
= "Wed, 04 Jun 2008 19:43:09 GMT"

?httpdate({})
= "Wed, 04 Jun 2008 19:43:10 GMT"

?httpdate("")
= "Wed, 04 Jun 2008 19:43:11 GMT"




Application Server - Caching of Internal Resources - Some of the resources in a V9 web application are 'internal' resources. I.e. there is no physical file in the webroot the corresponds to the requested resource. Examples are all of the built-in images in Alpha Five (which are used in a web application using the special .a5image syntax - See Help, What's New in V9) and many of the Javascript files (such as the Alpha Five Ajax Forms Library). The Application Server now implements caching logic for these internal resources. This will result is less network traffic and smoother loading of certain pages.

For example, testing the demo Web Application that ships with V9, and navigating through all of the pages in the 'What's New in V9' section, there was a 77% reduction in the number of bytes transferred (from 688K to 156K) after the resources had been cached.

So how is it done?

The Application Server now sets a Last-Modified date on built-in resources, such as the AJAX JavaScript files and internal images. This allows the browser to tell the server that it has a copy of the file with date X on subsequent requests and if the server's copy is the same, then a response is sent back just telling the browser to use what it already has. This saves the bandwidth of sending the same data that the client already has. (For date "X", Alpha Five uses the system.aex time stamp, which means the browser will continue to use its cached resources until the server is updated with a new system.aex file.)

In the case of resources unlikely to change at all, such as the internal .a5image images, the server also sets an Expires date that is 90 days in the future. When the browser sees this, it doesn't even contact the server to validate what it has in the cache, it just uses the local copy. So in addition to saving the bandwidth of the resource itself, the round-trip as a whole is eliminated and the resource is immediately loaded from local storage.

An Expires date is not set on the AJAX library files however because it would mean clients would need to manually have their caches cleared when these system Javascript files are updated, or they would continue to use the old copies without ever referring back to the server.  

 

Build 1522-3187  — 2-Jun-2008

Bugs

Web Applications - Grid Component - AlphaDAO - Select Statement with 'GROUP BY' Clause - If you tried to apply a filter to a Grid that had a 'GROUP BY' clause, you would get an error.

Web Applications - Path Aliases - <array>.Populate_from_table() - As a result of the change made to alias handling in build 1510-3184, this function did not work if you were resolving path aliases at run-time, and if you had a database open (not possible in the stand alone Application Server, but likely when building/testing applications using the full version of Alpha Five). As a result of this, when you tried to run the Sample Web Application that ships with Alpha Five, you would get an error when the main menu page was loaded.

Http_download() function - Did not send the query string in the URL to the target site. Also, this function is now more robust and will work on certain sites that previously failed.

Application Server - A bug in TCP/IP sockets that caused incomplete data to be returned has been identified and resolved. This primarily affected the Application Server when both HTTP Keep-Alive and SSL were enabled, resulting in 400 and 501/505 errors, but it may have also intermittently impacted other socket-based functionality.

Ui_get_password() Function - This function was implemented in Xdialog in build 1510-3184. At that time, support for the Enter key to close the dialog was dropped. This is now fixed.

Build 1514-3186  — 30-May-2008

Bugs

Web Applications - Security Framework - A recent update broke the ability to delete users from the Users table in the Security Framework.

Web Applications - Security Framework - Login Dialog - If the user tried to access a page for which they did not have sufficient credentials, they would be redirected to the Login dialog. After logging in, they should have been redirected back to the original page. This was not working correctly.

Features

Forms and Xdialog - HTML Form Supercontrol - Accordion and Tabs - You can now set the initial open panes in an accordion, and the selected pane in a tab control. You can now also use Xbasic to set and get the open pane(s). For more information, select Help, What's New in V9, Supercontrols, HTML Form Supercontrol, Alpha Five HTML Controls. In the case of the accordion, see the section 'Setting and Getting Open Panes using Xbasic'. In the case of the tab, see the section 'Setting and Getting Open Pane using Xbasic'.

Build 1510-3184  — 28-May-2008

Bugs

Web Applications - Path Alias - File.exist() Function - If you use the new option (introduced in build 1510-3184) to resolve path aliases at run-time, the file.exist() function would fail on a filename that used an alias. Now, file.exists("[alias]\filename") - will work correctly.

Lookups - Forms opened as Dialogs - If you opened a form as a modal dialog and then made a selection from a drop down lookup, after you had made the selection, the form would no longer have focus. This meant that you first had to click on the form before you could tab out of the field.

HTML Editor - Javascript in <Script> Tag - Previously, if you had defined some Javascript code in a <script> tag in your HTML or A5W page and you then switched to WYSYWIG view and then back to Source view, the formatting and comments in the Javascript would be lost. Now, all formatting and comments in the Javascript is correctly retained when you switch tabs.

Web Applications - Calendar Control - The month selector was not working correctly in certain situations.

 

Build 1510-3184  — 28-May-2008

Bugs

Mapped Tables - Browse Layouts - Previously, it was not possible to customize the properties on a column in the Browse Layout editor.

Mapped Tables - Quick Filter, Quick Filter Exclude - These commands did not work on a Mapped Table.

Mapped Tables - Shorttime - Did not correctly display Shorttime fields.

Active-Link Tables - Intersect Operation - Performing an Intersect Operation using Active-Link tables is now working correctly.

Sets  - Duplicate - If you right clicked on a Set in the Control Panel and selected the 'Duplicate Set' option, the Set would be duplicated. However, if you immediately tried to edit the structure of the duplicated set, you would get a 'Set in use' error when trying to save the edits. You had to close the Database and then re-open it before you could edit the duplicated Set. This is now fixed.

Active-Link Tables - Web Applications - <array>.initialize_from_table(), lookup() and table.external_record_content_get() failed when used in a Web Application and the Server did not have a Database file (.adb file) open.

Forms - Embedded Browse - Row selectors - Under certain circumstances, even though the 'Show row selector' property in an embedded browse had been turned off, when the form was run, the row selector would show. This bug only happened if the Embedded Browse defined HTML Bubble help for one or more columns. This is now fixed.

Forms and Browses - Clock and Calendar Supercontrol - Did not honor the 'modal' data entry setting. If the layout was set to 'modal' data entry, the Supercontrols still allowed you to edit the value in the bound field. Note that if a clock or calendar Supercontrol is bound to a variable (i.e. not to a field from the layout's underlying table), it is always 'modeless' (even if the layout itself) has been set to 'modal' data entry.

AlphaDAO - Oracle - Was sometimes leaving connections open. Now supports table names with quote characters in the name.

Pack Tables - If you packed tables by right clicking on the table in the Control Panel you would get an meaningless and benign error message after the operation completed.

Passive-Link Tables - Override Field Definitions - If you used this option when creating a Passive Link table, you could not subsequently edit the field overrides.

Embedded Browses - Border Style - Rounded Corners - If you set the border style of an Embedded Browse to use one of the rounded corner styles, then you could not edit the Embedded Browse when you put the Form into Design mode. (Work around was to use the Object Explorer to change the Embedded Browse border style to use square corners.)

Lookup() Function - Did not work if the return type of the expression was a Time value.

Web Applications - Grid - Deleting Records - If you defined an updateable Grid, but did not have any editable controls in the Grid, and you then deleted a row (other than row 1), you would get an error.

Web Applications - Grid - Shorttime Fields - Were not displayed correctly.

Forms - HTML Form Supercontrol - Accordion - Fixed problem placing the Accordion control into an HTML Form supercontrol.

Table.External_Record_Content_Get() - Under certain circumstances would return an incorrect set of records.

Features

Web Components - Navigation System - The Navigation System Builder now allows you to specify a Javascript function for each node in the menu system. This is very useful if you want to initiate AJAX callbacks from menu items in the Navigation System. You can also now assign an explicit ID to each node in the menu system. This allows you to use Javascript to hide/show menu items. For example, the following Javascript functions can be used to hide/show menu items:

 

function hideMenuOption(ctrlId){var tid=$($(ctrlId)).parentNode;if(tid==undefined);else{tid.parentNode.style.display = 'none';}}


function showMenuOption(ctrlId){var tid=$($(ctrlId)).parentNode;if(tid==undefined);else{tid.parentNode.style.display = 'block';}}
 

function setMenuOptionOn(ctrlId){var tid=$($(ctrlId)).parentNode;if(tid==undefined);else{var cn=tid.className; if(cn.match('NavSys')!=null);$scn(tid,cn.replace(/Off/,'On'))}}
 

function setMenuOptionOff(ctrlId){var tid=$($(ctrlId)).parentNode;if(tid==undefined);else{var cn=tid.className;if(cn.match('NavSys')!=null);$scn(tid,cn.replace(/On/,'Off'))}}
 

Set Editor - Active Link Tables - MySQL - Previously, building a set on very large active-link tables that were based on MySQL tables was slow. This is now significantly faster.

Image File Reference Fields - Relative Paths - If the filename of the image is a relative filename, Alpha Five will now treat the filename as relative to the location of the .dbf file. Previously, it used the system 'current folder'. For example, assume that you have a table that is stored in 'c:\mydata'. You have a sub-folder called 'c:\mydata\myimages' where you store all of your images. If a particular record has an image filename of 'myimages\picture1.jpg', Alpha Five will now be able to find the image.

Form Layouts - Radio Buttons - Transparent Background - Button objects on Form Layouts now support transparent backgrounds.

Web Applications - Filenames - Resolving Aliases -  When you build a web application that uses filenames for Alpha Five Objects (i.e. .dbf files, .ddd and .set dictionary files, etc.), the typical convention is to use an alias for the file path in the filename. For example, the Xbasic in a typical .a5w page, or event handler in a component might look like this:

t = table.open("[PathAlias.ADB_Path]\customer.dbf")

 

Currently, this alias is replaced at publish time, using the definition for the alias that is stored in the publishing Profile. So, assume that you have defined a profile called 'Server1', and you defined the folder for [PathAlias.ADB_Path] to be "c:\datafolder",  then at publish time, all references to this alias will be replaced by "c:\datafolder".

Now, you can choose not to resolve aliases at publish time, but instead resolve them at run-time, based on the information in the a5_application.a5i file. The a5_application.a5i file gets published automatically every time you publish any files. The a5_application.a5i file contains a section in it that defines the physical path for each alias. For example, a typical entry in the a5_application.a5i might look like this:

 

Dim _aliases_ as c
_aliases_ = <<%txt%
[PathAlias.ADB_Path]|C:\DataFolder

[PathAlias.Northwind]|C:\MDBFiles

%txt%

 

The huge advantage of resolving aliases at run-time (rather than publish time), is that by simply making a single change in the a5_application.a5i file, you can point your entire application at a different set of files and reports.

Starting with this version, path aliases are now not resolved at publish time. To take advantage of this change, you must re-publish your application. If you want to continue resolving path aliases at publish time, you can still do so by going to View, Settings, Preferences, Web Publishing, Alias Resolution and selecting the 'Publish Time' option.

Ui_get_password() Function - This function is now implemented in Xbasic/Xdialog. Previously this was a native C function. The text is in the text box is now always masked with an asterisk character. The password_character argument is now ignored. i.e. it is always an asterisk.

Index Files - .CDX Files -  Index Files are now flushed to disk more aggressively than in the past. This will improve index stability in situations where a user might exit Alpha Five unexpectedly (such as turning off a machine without first properly exiting), or when working on a network with high write latency.

AlphaDAO Export - When you export data from native Alpha Five tables to a SQL Database, the Export builder has always allowed you to define the CREATE TABLE SQL statement used to create the target table in the remote database. Now, a new builder is available to help you create a custom CREATE TABLE SQL statement.

 

Build 1479-3182  — 13-May-2008

Bugs

Layouts - Editing - Copying and Pasting Controls - Some properties were not being copied when you copied and then pasted a control while editing a Layout.

Active-Link Tables - Override Settings - In the active-link table definition, if you clicked the 'Override Settings' button and changed a field type from Memo to Jpeg, Bitmap, or Linked Image, the override did not work - the active link table used a standard Memo field type. This is now fixed.

Layouts - Embedded Browses - Titles - Printing - Previously, if you printed a Form with an Embedded Browse, the column titles on the Embedded Browse did not print.

Web Applications - Mapped and Active-Link Tables - Publishing - The .dbp file was not being published.

Features

Security - Logon Dialog - Cancel Button - The Alpha Five documentation incorrectly states that if the user clicks the Cancel button at the Logon Dialog, that Alpha Five will close. In fact, Alpha Five does not close - it just returns to the 'No Database Open' state and allows the user to select another database. A  new option is now available when you set up your Database security. You can now specify that Alpha Five should close if the user clicks the Cancel button.

Mapped Tables - Web Applications - A5W pages can now use mapped tables. Previously, mapped tables could not be used in the Xbasic code in a .a5w page.

Embedded Browse - Down Arrow - If you gave focus to a column (other than the first column) in an Embedded Browse, and then pressed down arrow repeatedly, Alpha Five would switch focus to the first column when you went passed the the last visible row in the window. Now, Alpha Five will remain on the same column as the Embedded Browse scrolls to bring an additional row into view.

Build 1471-3180  — 9-May-2008

Features

Action Scripting - New Action - Refresh data in active-link tables - Refreshes the data in an active-link table.  This action is equivalent to the 'Refresh all rows' menu command that appears on the 'Form' or 'Browse' menu when using a Layout that is based on an active-link table. 

This example describes a typical scenario in which this action would be used: Assume you have Form that is based on active-link tables. You have a button on the Form that opens another Form that is based on the same active-link tables. In this second Form, you add some new records and you edit some of the existing records, then you close the second Form to return to the original Form. None of the changes to existing records, or new records are visible in the original Form because the active-link table was populated before the changes were made. The 'Refresh data in active-link tables' can be used to cause the Form to re-populate the data in the active-link tables, thus making the edits and new records visible to this form.

Browse Layouts - Smart Fields - Button Position - A previous update introduced a new command to position the button that pops-up Memo and RTF Memo editors. This command now also controls these buttons in Browse layouts. (See Form Layouts - Memo and RTF Memo Fields - Button Position )

<tbl>.get_cursor() Method - Allows you to get a 'cursor' for an open table. A 'cursor' is just a pointer to an open table that can be navigated independently of the base table. When you move the pointer in a cursor, you do not change the record that the base table pointer is pointing to.

Syntax:

tCursor = <tbl>.get_cursor()

 

Example:

 

dim t as p

dim tc1 as p

dim tc2 as p

t = table.open("customer")

tc1 = t.get_cursor()

tc2 = t.get_cursor()

 

'The cursors can each have their own order. Has no impact on the base table

tc1.order("Firstname")

tc2.order("Lastname")

?t.recno()

=1

?tc1.recno()

=23

?tc2.recno()

=34

tc1.fetch_next()

?tc1.recno()

= 56

'Notice how we have moved the record pointer in the first cursor, but

'it has had no effect on the base table (which still points to record 1)

?t.recno()

= 1

 

 

The primary motivation for this method is to allow you to use Xbasic to get a pointer to the table that an Embedded Browse is based on, and then to safely loop over the records in that table and manipulate the data in that table. If your Xbasic loop used the table pointer itself, rather than a cursor, your script may not work reliably. This is because you have no control over events that cause the Browse to repaint, and when the Browse repaints, it might move the record pointer.

 

Example. The 'Invoice' Form in AlphaSports is based on the Invoice.set. This Form has an embedded browse that is based on the 'invoice_items' table. You want to write a script that will loop through all of the records for the current invoice, increasing the quantity by one.

Here is code that could be inserted in a button on the Invoice form:

 

dim tbl as p
dim t as p

'get a pointer to the SAME table instance that the embedded browse is based on.

'Note: Could also have done: tbl = Browse1.table_get()
tbl = table.get("invoice_items")

'Get a cursor on the table instance
t = tbl.get_cursor()

 

t.fetch_first()
while .not. t.fetch_eof()
    t.change_begin()
    t.quantity = t.quantity + 1
    t.change_end(.t.)
    t.fetch_next()
end while
 

You might ask, "Why do I have to go to the trouble of getting a cursor? Why can't I just write code that uses the same table pointer that the Embedded Browse uses?". The reason is that the script shown below will not work reliably.

The reason is this: You have no control over when the Browse will repaint. When the Browse repaints it affects the record that the table pointer is positioned on. So, if your script is using the same table pointer that the Embedded Browse is using, then the code in your loop that positions the record pointer will be impacted every time the Browse repaints during the course of your loop. The Browse will be repainted every time the message box is dismissed.

 

'This code is NOT safe (could result in Browse repaint errors)

dim tbl as p
tbl = table.get("invoice_items")

 

tbl.fetch_first()
dim count as n = 0
while .not. tbl.fetch_eof()

    count = count + 1

    ui_msg_box("Notice","Editing item number: " + count)
    tbl.change_begin()
    tbl.quantity = t.quantity + 1
    tbl.change_end(.t.)
    tbl.fetch_next()
end while
 

Bugs

Reports - HTML Objects - If you set the ambient font for an HTML object using the Object Properties of the HTML Object, the ambient font was not honored when the Report was printed.

FTP - A bug was introduced in the last patch that affected the FTP Object. As a result of this, publishing a Web Project using FTP did not work.

Active-Link Tables - Field Rules - Lookups - Improvements have been made in the performance of active-link tables when used as the data source in a Field Rule Table Lookup.

Behaviors

Version("K") Function - Previously this function could be used to tell if a full version or a runtime version of Alpha Five was running. This function now returns the same value regardless of which version of Alpha Five is running (because the Runtime/Run Engine and Full version are all based on an identical set of executables). To determine if a runtime version is running, you must now use the a5_is_runtime() function.

Built-in Images for Web Applications - Syntax Change - Previously, the 'What's New in V9' document stated that the syntax for built-in images included a forward slash before the virtual 'images' folder. This has been changed. A leading slash should not be used. The change was necessary in order to make built-in images work when the Security Framework is enabled. For example, here is the correct syntax to show the built-in $a5_open image:

<img src="images/$a5_open.png.a5image" >

 

To get an updated version of the sample web applications that ships with Version 9, click the link below. This will update the sample pages so that they do not generate code with a leading slash in the virtual image name.

http://downloads.alphasoftware.com/A5v9Download/a5v9_SampleWebAppUpdate.exe

Important: After installing the update, you will need to create a new instance of the Sample Web Application by selecting the 'Sample and Tutorial Databases' button at the Welcome Screen. Then open the Sample Web Applications database and from the Web Application Control Panel, click the 'Publish' button, then the 'Clear Publishing History' button. Then republish the application.

 

Build 1465-3178  — 6-May-2008

 

Form Layouts - Supercontrols - Tab Objects - If a Clock or Calendar Supercontrol was placed on the first pane of a Tab Object, it remained visible when other Tab Panes were selected.

Expression Builder - Field Value - When you open the Expression Builder, the Field Value command allows you to insert a value from any field in the current table or set. This dialog did not properly display values from Active-Link tables. The dialog has now been rewritten to use an embedded Browse object to display data from the underlying table.

Security - Master Password - Encrypt Tables - When you set the Master Password for a Database, Alpha Five allows you to encrypt the password. If you checked this option, and then you encrypted tables in your Database, the tables would not be correctly decrypted the next time you logged on to your Database.

If you have a Database in which this has happened, the following code shows how you can decrypt the tables. Once you have decrypted the tables, you can encrypt them again using this update.

'Assume that the master password you had set was 'alpha', and that the table

'was 'customer'.

dim tbl as p

tbl = table.open("customer",FILE_RW_EXCLUSIVE,"","alpha")
tbl.decrypt()

tbl.close()

 

Field Rules - Table Lookup - Multiple Fill-in Fields - Under some circumstances, not all fields would be filled in when making a selection from a lookup table.

Application Server - Security - The Security Framework allows you to define certain file types  (e.g. extensions) that will always be allowed even if a security setting of 'Allowed' has not been explicitly set for a particular file. Alpha Five comes pre-configured to allow file types such as .js, .css, .jpg etc. Previously, it did not accept file types that has more than a 3 letter extension, and it was not pre-configured to allow .a5image. The 3 character limit is now removed and the .a5image file type is now allowed. The .a5image file type is a virtual file type used by Alpha Five to serve up any of Alpha Five's built-in images. (See the section 'Using Built-in Alpha Five Images in Web Pages' in the What's New in V9 document.)

IMPORTANT: If you have an existing Web Project (such as the sample web applications that ships with Alpha Five), you must go to the Web Control Panel, click on Web Security, then Page Security, then click the 'File types always allowed' button and explicitly set the permission for the .a5image file type.

Active-Link Tables - Field Rules - Templates - If an active-link table displayed '(Null)' in an empty field, and if that field had a template defined in Field Rules, the template did not work properly. This is now fixed.

Features

Active-Link Tables - Null Value Fields - In an active-link table has a null value in a field, by default it displays '(Null)' in the field. Now, in the active-link builder, you can set a new property, 'Show blank if Null'. If set to true, then fields that contain null values will display a blank value.

Sql_get_Values() Function - Can be used to get a list of values from a field in a table in a remote database. Allows you to set a limit on the number of returned values. You can also set a flag to specify that only unique values should be returned.

Syntax:

c Values = sql_get_values(Connection as A, table as c, fiilter as c, result_expression as c [, flagDistinct as L [, Limit as n [, flagDescendingOrder as L [, arguments as sql::arguments ]]]])

 

Where:

Values A CRLF delimited string of data from the remote table or query. CRLFs in the data are encoded as '\cr\lf'.
connection An explicit AlphaDAO connection string, or a named connection string. (e.g. ::name::myconnectionstring), or a pointer to an open connection.
table The name of the table in the remote database from which to return data.
filter A filter expression to determine which records in the remote table to find. The filter expression must use SQL syntax and must use portable AlphaDAO functions. For example, strings must be single quoted, the AND,  OR and NOT operators are not surrounded by periods. The filter expression can use arguments. For example, customerid = :whatcustomerid. If table_or_sql_statement is a SQL SELECT then filter is meaningless and must be set to a null string.
result_Expression A expression to determine what values gets returned. The expression can be as simple as a single column name in the remote table, or it can be a complex expression. The expression must be written using portable AlphaDAO syntax.
flagDistinct Default for this if .f.. Specify if only unique values should be returned.
Limit Default for this is 1,000. Specify the maximum number of values to return.
flagDescendingOrder Default for this is .f.. Specify if values should be returned in descending order.
arguments If the filter expression includes arguments, you must supply argument values using a SQL::arguments object.

 

Behaviors

Toolbars with Custom Icons - The Alpha Five toolbar editor allows users to use custom icons of any size. However, Alpha Five implements an optimization in the toolbar logic to prevent any 'flickering' when changing from one window (which has one toolbar) to another window (which has a different toolbar). Flickering would be caused by slight differences in height between the toolbars that might result from using an icon of (say 12x12 on one toolbar and 12x13 on the other toolbar). Because of this optimization, toolbars that use icons that are bigger than 12x12, but smaller than 32x32 will cause the larger icons to be clipped at the bottom of the icon.

If you want to use custom icons in your toolbar that are in this range, you should turn off Alpha Five's toolbar optimization logic. You can put the following Xbasic in your application's Autoexec script:

ws = xdialog::windowstylecollection.get()
cb1 = ws.FindStyle("ControlBar")
ch1= cb1.FindFormat("horizontal")
ch1.upperHeight = ch1.normalHeight
 

Build 1457-3177  — 1-May-2008

Bugs

Web Applications - Grid Component - If a Grid component had a Detail View, and if the Detail View had a custom control, but the Grid view did NOT have a custom control, the component would generate an error.

Web Applications - .a5i File - If you published the security files only (but no components, or  pages), then Alpha Five would create and publish an incomplete .a5i file. As a result of this, components that were based on named connection strings would no longer function.

Drop-down Windows - Auto-Closing - There were some places in which drop-down windows in Alpha Five were not being automatically closed when the parent window was moved. You could see this by opening the Invoice form in Alphasports, opening the drop-down window for the 'Payments' field, and then, while this window was open, moving the Invoice form window. This is now fixed.

Layout Editors - Nudge Feature - When you are working in any of the Layout editors, you can hold down the shift key and then use the arrow keys to do micro adjustments to the position of the selected object(s). If guidelines were turned on, the micro adjustments behaved erratically.

Layouts - Supercontrols - Printing - If you set the 'Printable' property for a Supercontrol to False, the change was not saved. When you printed a Layout that contained a Clock or Calendar Supercontrol, it did not print correctly. This is now fixed.

Features

Web Applications - New Ajax Examples - The Alpha Five Ajax Javascript Library now includes Tab, Accordion and Window objects. When you install an Update to Alpha Five, the sample web application that ships with V9 is not updated. To get a fresh copy of this sample application (which contains pages demonstrating the new features), you can download this installer:

http://downloads.alphasoftware.com/A5v9Download/a5v9_SampleWebAppUpdate.exe

Important: After installing the update, you will need to create a new instance of the Sample Web Application by selecting the 'Sample and Tutorial Databases' button at the Welcome Screen. Then open the Sample Web Applications database and from the Web Application Control Panel, click the 'Publish' button, then the 'Clear Publishing History' button. Then republish the application.

 

AlphaDAO Connection String Builder - The AlphaDAO connection string builder now allows you to edit existing connection strings.

GUID Data Type - Alpha Five now supports GUIDs as an intrinsic Xbasic data type (designated as type 'K'), just as Character, Numeric, Logical, Time, etc. are intrinsic Xbasic data types. Support for GUID data types is important for Active-Link tables as some SQL databases use GUIDS for primary keys.

You can DIM a variable as a GUID, (e.g. DIM varname as K), or you can use the curly bracket notation to specify a value of type 'K' (just as curly bracket notation is used to specify a Date value).

 

The following Interactive window session shows examples:

'DIM a variable as a GUID
dim g as k

'Use the built-in Function to create a GUID value
g = api_uuidcreate()
?typeof(g)
= "K"
 

'Use curly bracket notation to create a GUID value
g2 = {f5ab3018-496a-419f-af71-6c19fec1252b}
?typeof(g2)
= "K"
 

g2 = {clearly-not-a-valid-guid}

ERROR: Constant operator is not recognized

 

New Field Type in Alpha Five Tables - The Table Editor now allows you to create a new field type - UUID. A UUID field can only contain a valid GUID value. A GUID (Globaly Unique Identifier), is a string of numbers that is unique. Because it is a unique value, it is a perfect choice for a table's primary key. If you use Xbasic to create tables, you can create UUID fields by specifying the type as 'K'.

Is_GUID_format() Function - Returns .t. if the variable passed in is a valid GUID format. This function can check variables of type K or C. If a variable of type C is passed in, the value can either be enclosed in curly brackets, or not. GUID values are often shown in curly brackets.

*guid_create() Function - Returns a GUID variable of type 'K'. Contrast this with the api_uuidcreate() function in previous versions. This function also returns a GUID, but it returns a variable of type C.


Field Rules  - Lookups - Column Titles - Previously, when Alpha Five displayed a lookup window for a Table Lookup field rule, or a dropdown window (in which column titles were displayed), it used the actual field name as the column title, and not the display title as defined in Field Rules. Now, if a display title has been defined in Field Rules, this title is used.

Forms - Embedded Browses - Modal Data Entry - Assume you have a Form that contains an embedded browse and has been set to use Modal data entry. If the embedded browse had Lookup field rules, then after entering a new record in the embedded Browse, the form would return to Modal data entry, rather than allowing continuous enters.
 

Import - Classic Import - The Import Genie and Import Builder now allow you to create HTML Memo and Image File Reference fields when importing data.

 

Form Layouts - Memo and RTF Memo Fields - Button Position - In Version 9, the button that pops-up the Memo and RTF Memo editor is positioned outside of the control. In Version 8, the button was positioned inside the control. Some users have expressed a preference for the Version 8 style. You can control where the button appears through Xbasic. (You can put the command in your application's Autoexec script).

To revert to V8 (and older version) style:

a5.System_Mode_set("field_popup_button_position","inside")
 

To use the V9 style:

a5.System_Mode_set("field_popup_button_position","outside")



Browse Performance - Networks - Large Tables - Some users have reported that when viewing a Browse, or a Form with an Embedded Browse, the Form or Browse seems slow compared with previous versions of Alpha Five. The issue only occurs when the data is being viewed over the network. There is no performance issue when the data is local.

There are significant differences between the Browse in V9 and previous versions of Alpha Five. A major advantage of the V9 Browse is that the position of the slider on the vertical scroll bar is truly proportional to the position of the current record within the current query. Also, the size of the vertical slider is proportional to the percentage of the records in the current query that are visible.

In V8 and previous versions, the vertical slider's position was only meaningful if the data was in record number order, and the size of the slider was never meaningful.

In order to get accurate information about the slider position and size, Alpha Five must read the table's index more frequently. On a large table, over a slow network, this can result in a performance degradation.

You can now use an Xbasic command to set a 'threshold' over which Alpha Five will revert to the V8 logic for the browse scrollbar. If the browse you are viewing has more than the 'threshold' number of records in the current view (i.e. query), Alpha Five will revert to the logic used in Version 8 and prior versions. To use the V9 logic, you set the threshold to 0 (the default value). To use the V8 scrollbar logic all the time, set the threshold to 1.

If you set the threshold to a value that is greater than 1, then the V8 logic will be used if there are more than the 'threshold' number of records in the current query. For example, if you want to revert to the old scroll bar logic if the current view has more than 100 records, set the threshold to 100.

If you experience a performance issue on your network, you can experiment with this command to determine the threshold value that is right for you, and you can put the command in your application's Autoexec script.

To set the threshold, use the a5.system_mode_set() function to set the value of the new index_pseudo_position_cutoff property. You can use a5.system_mode_get() to read the value of this property.

 

Examples:

Read the current value of the property:

? a5.system_mode_get("index_pseudo_position_cutoff")

= "0"   'Indicates that the V9 scrollbar logic is being used
 

Use V8 (and older versions) scrollbar logic:

a5.system_mode_set("index_pseudo_position_cutoff","1")
 

Use V9 scrollbar logic:

a5.system_mode_set("index_pseudo_position_cutoff","0")
 

 

Use V8 scrollbar logic if there are more than 1,000 records in the current view:

a5.system_mode_set("index_pseudo_position_cutoff","1000")

 

Build 1441-3175  — 22-Apr-2008

Bugs

Customized System Menus - If you customize any of the built-in system menus, the file that stored your customized settings was previously stored in the Alpha Five Program Folder. Under Vista, users can't write to this folder. The location of this file is now moved to the user's Documents folder. The A5_GetSystemMenusFilename() function returns the fully qualified name of the system menus file. This change means that if you have previously customized any system menus, you must move a_menus_system.* files to the location specified by the A5_GetSystemMenusFilename() function.

Email_smtp_send() Function - The following changes were made to this function: (Note that these changes will also affect email_send2(), since it uses Email_smtp_send())

 

<layout>.Topparent.delete_record() - This method now takes an optional parameter to suppress confirmation messages.

Syntax: <layout>.delete_record( [L flagSilent = .f.] ) 

Report Layouts - Background Images - Previously, if you placed a bitmap as the background to a report section, the 'Best Fit' scaling option was not implemented. 'Best-Fit' is now supported.

Embedded Browse - If a column in an embedded browse displayed in image field, the image scaling property for that column could not be set.

Browse - Border - Was not painting properly on bottom edge when the border had rounded corners.

MySQL - Active Link Tables - 'Float' Columns -  If a MySQL table included a 'float' field type, the active-link record could not be updated because of problems accurately comparing floating point numbers. Now, 'float' fields are not included in the 'auto-generated' WHERE clause for the SQL UPDATE statement in the active-link definition. If you have any active-link tables that are based on MySQL tables that include 'float' fields, you will need to edit and re-save the active-link definitions.

AlphaDAO Export - If a local table had a field called 'class', the table could not be exported using AlphaDAO.

Mapped Tables - Several bugs in mapped tables have been fixed:

a) If a mapped table was created in a folder that had a period in the folder name, the mapped tabled could not be opened.

b) If you created a mapped table that joined two tables and then created a Report, Label or Letter on the mapped table, any fields that came from the child table in the map table definition did not display the correct value.

c) If you created a form based on a mapped table and placed an embedded browse on the form (showing a browse view) of the mapped table, and you also placed fields from the mapped table directly on the form, then when you changed the current record in the embedded browse, the corresponding fields on the form did not update, as they should have.

d) Mapped tables that joined two or more active-link tables were not working. (Note: If the active-link tables that you are joining come from the same database, it would be much preferable to create a single active-link table that joined the tables on the server.)

A5_GetArgumentValue() Function - Was not returning values for arguments that were defined as part of an active-link table's SELECT statement.

Active-Link Tables - MySQL - If the active-link table was based on a MySQL table with ? in the column names, it would fail.

Field Rules - Table Lookups - If a table lookup field rule was defined using a filter to filter the records shown in the lookup, and if the lookup was displayed as a dropdown box, then if the user typed a value directly into the field (rather than dropping down the list of choices and selecting from the list), the filter was not honored.

Browse - Under some circumstances, the performance of Browses (both stand-alone and embedded) in Version 9 was slower than in Version 8. The problem was introduced by the changes that were necessary to add bubble help and true proportional scrolling to the browse vertical scrollbar. This release adds optimizations that eliminate the performance penalty.

Runtime/RunEngine - RMuf File - The Runtime/Run Engines were using the .Muf file rather than the .RMuf file to check concurrent user counts.

Features

HTML Editor - The following new features have been added to the HTML Editor:

a) Right click menu on tabs. Menus allows Close, Save, Save As.

b) When the HTML Editor is opened from the View/HTML Editor menu, it now operates differently than when opened from within a Web Project. The File Open and File Save dialog use the standard windows dialogs that do not constrain the filename to a file in a project. The File Open dialog allows you to select multiple files.

c) There is a new entry on the File menu. File, Save Desktop allows you to save a list of the currently open files, and File, Restore Desktop allows you to restore the a previously saved desktop. You can save multiple named desktops.

 

Active-Link Tables - MySQL - 'FetchLimit' Property - If an active-link table was based on a MySQL table with a large number of records in it, and the active-link table did not use a WHERE clause in the SQL SELECT statement to limit the number of records in the query, the active-link table would be slow to open. This is because of a limitation in MySQL. Count queries in MySQL are significantly slower than in many of the other popular databases. Because of this limitation of MySQL, a new property has been added to the active-link definition (only honored when connecting to MySQL). The 'FetchLimit' property specifies the maximum number of records to fetch from the server if the SELECT statement has no WHERE clause. The default value for this property is 1,000. If the FetchLimit is set to 0, then Alpha Five reverts to its original behavior.

As a result of this change, opening an active-link table on MySQL can be dramatically faster. In tests performed on a 1,000,000 record MySQL table, the time taken to open the table went from approximately 38 seconds to about .2 seconds. By comparison, Microsoft Access was not able to open the table at all, and Filemaker took approximately 120 seconds, and then took an additional 30 seconds each time the browse view was advanced by a page of records.

When you are browsing the data in the active-link table and you reach the FetchLimit, Alpha Five will display a dialog telling you that you have reached the FetchLimit and asking you to specify a new FetchLimit.

There is really no 'down-side' to this new property because it is not limiting the number of records that can be shown in active-link table. It is merely limiting the number of records that are initially shown when an active-link table with no WHERE clause is opened.

In typical usage, a user will open a form or browse that is based on an active-link table, and then start searching for specific records. Now, the form or browse will open quickly, and then once the user starts executing server-side queries, the FetchLimit will be removed because the active-link table will now have a WHERE clause.

When you open a form or browse on an active-link table that is linked to a large MySQL table, if the active-link definition does not have a WHERE clause, and if the number of records in the active-link table is equal to or greater than the FetchLimit, the status bar, which normally shows the record count, will show '<Unknown>'. Then, when you do a search for a specific set of records, the status bar will then show the actual record count of the number of records that satisfy the query.

IMPORTANT: If you have already created active-link definitions on your MySQL tables, you must either re-create them, or edit and resave each of them. This will set the FetchLimit property in the active-link definition.

 

<Tbl>.ServerSide_Records_Get() Method - If an active-link table is based on a MySQL table and the FetchLimit property in the active-link table definition has been set to a non-zero value, this method, which normally returns the number or records in the active-link table, might return a value of -1. This indicates that the true count is not known yet because a COUNT query has not been executed.

To get the true count, you can use an optional flag in the method arguments. When you get the true count the record pointer is positioned back at the first record in the active-link table.

For example:

t = table.open("MySQLTable")

?t..ServerSide_Records_Get()
= -1

?t.ServerSide_Records_Get(.t.)

= 1456234
 

Table.External_Suggest() - This function now takes an optional 'filter' parameter.

 

New Form Genie - Field Labels - When a new Form is created using the Form Genie, if a field label for a field is not specifically set in Field Rules, Alpha Five uses the field name as the label. Previously, if the field name contained an underscore in it, Alpha Five would use the fieldname as is in the label. Now, the underscore is replaced by a space.


License Keys - Normally, the Alpha Five license key is stored in the Registry. Now, on startup, Alpha Five will check if a file called license.key exists in the program folder where Alpha Five is installed. If this file exists, Alpha Five will read the license key from the first line in this file. The main benefit of this feature is for developers who are using the Runtime or Run Engine to distribute applications. Now if your install program installs the license.key file, your customers will not see a prompt for a license key the first time they start their Runtime/Run Engine applications.

IMPORTANT: This new feature requires an update to the Runtime 'startup.aex' file. This file is NOT updated by installing a patch. You must use the link in your e-mail confirmation from the time you placed your original order to download a full copy of the install program.

 

Runtime User Count - The Runtime License allows for a certain number of simultaneous users of an application. For example, if you purchased a 10 user Runtime license, then 10 users can use your application at the same time at a given location. However, you may want to restrict the actual number of simultaneous uses to some number that is less than the maximum allowed (perhaps because your customer only bought a license for fewer users from you). Alpha Five now allows you to 'throttle' the maximum user count for a Runtime installation at a particular customer location.

To throttle the Runtime User Count, you use the Full Version of Alpha Five on your development machine. This machine must also have a copy of the Runtime installed on it. From the Tools, Utilities menu select the new 'Throttle Runtime User Count' menu. You can specify the throttled user count and a custom message to display in place of the built-in message when the user exceeds the user count. This dialog will create an encrypted file called 'startup.control' which must be installed in the same folder where the Runtime files are installed.

You must also put the following code into the autoexec script of your application:

if a5_check_throttle_file() = .f. then
    a5.close()
end if
 

This prevents your customers from circumventing your setting by simply deleting the startup.control file.

IMPORTANT: This new feature requires an update to the Runtime 'startup.aex' file. This file is NOT updated by installing a patch. You must use the link in your e-mail confirmation from the time you placed your original order to download a full copy of the install program.

 

Active-Link Tables - Entering New Records - When you are using a Browse to display data from a table, and you click the 'Enter new Record' icon on the toolbar, Alpha Five gives focus to the 'new record row' in the Browse and fills in the rows above the 'new record row' with data from the records at the logical end of the table (based on the current sort order). For example, assume you are Browsing a table with 100,000 records, and your Browse shows 20 records. If you enter a new record, Alpha Five will show logical record number 999,981 to 100,000 followed by the 'new record row'.

In the case of native tables, regardless of the size of the table, Alpha Five can fetch the records from the end of the table very quickly, and so moving to the 'new record row' is immediate. However, in the case of active-link tables, fetching records from the end of the table can be slow if there are a lot of records in the table. This is because Alpha Five must retrieve all of the records from the server.

Because fetching all of the records from the server is potentially slow, when a Browse is based on an active-link table, Alpha Five uses the following rules to optimize performance:

Build 1396-3165  — 30-Mar-2008

Form.ViewQueried() Method - Was not working for forms that were based on native table sets.

Build 1391-3165  — 28-Mar-2008

Browse - Vertical Scroll Bar - When working with large tables with several hundred thousand records, the vertical scroll bar could not be dragged to the bottom.

Build 1389-3163  — 27-Mar-2008

Forms and Browses Find by Key - After saving a record, this dialog would no longer display.

Supercontrols - Clock - Input box for typing in the time was displayed using incorrect font size.

Report Preview - The modal Report Preview viewer and the Report Supercontrol did not list the new Excel option in the drop-down to select Export types.