Version 10.2.0 b33 (released April 30, 2023)

This release primarily contains improvements to Panorama X Server, but there are also about a dozen general bug fixes.

- Panorama X Server now supports web cookies. Works exactly the same as it did in Panorama 6 Server, with the setcookie statement, and getcookie( and getcookielist( functions.
- The main Panorama Server help page now contains links to the available web publishing documentation.
- Multiple improvements to the Automatic Relaunch Server robot. 1) You can now specify the server check interval (default is 20 seconds). 2) You can now specify that the server won’t relaunch immediately if it doesn’t respond to a connection check, but only after multiple connection checks. You can also disable connection checks. 3) You can now specify the HTTP timeout for server connection checks. 4) The server error log now includes an entry whenever the server has to be relaunched. The log entry will include the active URL that was being processed when the restart occurred (if any).
- Server variables can now be used in web publishing code (using the same statements and functions that are used in client code).
- New “Web Performance” server logging option, records runtime of web procedures for later analysis.
- Fixed synchronization problems that could occur after a critical new generation has been uploaded.
- Server activity logs can now use write caching for better performance. (Keep in mind that this means that log entries may be lost if there is a crash or power failure, so caching is optional.)
- New getserverlog statement and getserverlog( function allow programmatic access to server logs (only from the server computer, however).
- The CheckServerConnection statement and function now allow the connection timeout to be explicitly specified.
- The related( and relatedarray( functions now work correctly in situations where the database is being scanned (for example in arraybuild(, in a Matrix or Text List with the Navigator option set (even if the window is in the background).
- Procedure code now automatically commits when the code changes the current database. This happens when the code contains setactivedatabase, topdatawindow, window or opendatabase. Also it will commit automatically at the end of the procedure if a secret window is currently active (but not if a visible window is active).
- The asynchronous progress window will not open if Panorama is not in the foreground. (For example, if Panorama has been switched to the background as a procedure runs that then does a synchronize, it used to cause an error. Now it doesn’t.)
- When testing web publishing URLs, Panorama now correctly uses GET instead of POST if there are no POST items.
- The server log pop-up menu has new options to monitor the log file in Terminal.app or BBEdit (with live updates as new log entries are made).
- The findselectdialog statement now works even if the user doesn’t have permission to access standard UI. (Of course if you use this statement, your users will be able to see the list of fields, and deduce the data types of the fields.)
- New info(“canmodifydatabasedesign”) and info(“canusestandardui”) functions, allows code to find out the security options for the current database.
- When switching forms within a window using the goform statement, the min & max window sizes of the new form are now honored. Also, the formOPEN implicit code is now triggered when goform is used.
- The GetFieldProperties function no longer returns error if user doesn’t have access to standard UI (Instead, it doesn’t return the FORMULA and PROCEDURE entries in the dictionary, but it does return everything else (type, pattern, range, width, etc.)).
- Removed the “backdoors” that allowed users to access the Find/Select and Find & Replace dialogs even if they weren’t supposed to have standard UI access. (These commands are no longer available by clicking on the record count banner, or from the Edit menu.)
- The adjustservervariable( function now works even if the database parameter is omitted.
- The URL( function now correctly reports internet errors even if the HTTP method has not been specified.
- The Sort dialog now opens correctly the first time it is opened after launch.
- Fixed Text Editor Object prompt so that it aligns properly when the text is right justified.
- Fixed the WebMerge statement, it now works correctly when a folder parameter is supplied.
- Fixed bug in instrumentation in GETWEBTEMPLATE, so that it no longer fails in instrumentation is enabled.
- The appenddictionaryvalue statement no longer adds the separator if the specified dictionary item is empty.
- Documented the Progress Indicator Object.
- New documentation page Handling Empty Selections in Code.
- Documented the filecatalog( “shallow” option, which causes only the top level of files to be cataloged (This option has been in the code for years, but was not previously documented).
- Added mention in the folderpath( documentation of the pathstr( function, which is still an alias for the folderpath( function.
- If web server code creates a global variable cgiDumpRawHTML with the value true(), the server will save the raw HTML (including headers) into a file named rawhtml.html in the /ServerLogs/ folder. This was used to debug the cookie feature, not sure if it has any other use.
- Documentation corrections submitted by James Cook, David Thompson, Gary Yonaites, Peter Newble, Chris Watts, Thomas Cooper, Craig McPherson and John Bovenmyer