Panorama X 10.2.0 b11 Build 3550 Release Notes

Panorama X 10.2.0 b11 Build 3550 Release Notes

This version must be manually downloaded and installed (as I expect for all beta downloads for the foreseeable future). Here is the link.

To update Panorama X Server:

  • Start by updating
  • Launch Panorama X
  • Open the Preferences dialog, switch to the Server pane
  • If Panorama X Server is running, stop it
  • Start Panorama X Server. It will automatically update before launching.

This release is a lot more than a bug fix version. The really big news is a blockbuster new relational database capability that I believe will become the headline feature of Panorama X 10.2 (other than the server, of course). In the past, some have criticized Panorama’s lookup system as a weak solution for relational applications, now that this new system is in place, I kind of see the critic’s point. This new system is a night vs. day kind of change.

I wanted to make some nice forms for the new relational documentation, and in the process I made some pretty major enhancements to automatic form construction. Making good looking forms has always been a painstaking process, but now it’s quite a bit less so. I’ve already made about ten forms and what a difference. In the process, I’ve come up with an outline of an idea that will really revolutionize form construction, but that will have to wait for 10.3. Something to look forward to.

There are also major changes to Clairvoyance. Some of this is exposed thru the relational system, but most is not documented yet and is only accessible thru blueprints for now. Some of you may be able to figure some or all of it out, feel free to investigate and play with it but please don’t ask me about it yet.

And there are a lot of assorted bug fixes and minor tweaks, all listed below.

My plan now is to try to get this version out as a “preview version” with much wider distribution than the current beta testers (or possibly a small b12 update if any crisis bugs are found in b11). As was done in 2015, I’m planning to run online classes in association with the preview version, starting no later than January (I’d like to start earlier but perhaps the holidays will interfere). I’m going to do two parallel classes – one for 10.2 in general, and one for the server.

Looking a bit further down the road, once the classes are done (which will be much shorter than the 2015 classes) the plan is to convert the Panorama source to the latest version of Xcode, get notarization working, then finally add native Apple Silicon support.

By the way, the Panorama X 10.2 Release Notes page is kept updated with all changes since 10.1 (changes from previous betas are not listed there, but are listed on this page). So this is the best place to look for everything that has changed in the past two years.


Many database applications require multiple database files working together. In previous versions of Panorama this was primarily accomplished with lookup( functions. This could generally get the job done, but was tedious because there was no overall definition of the relationship between the databases. This approach required the application developer to manage all the tedious details of database relations manually – a lot of extra work to set up and very difficult to change if the database structure ever changed. This manual approach could also be prone to errors since all of the details had to be manually managed by the programmer.

Panorama X 10.2 introduces a completely new, systematic approach to relationships between databases. Each relationship is managed in one place, with a comprehensive, easy to use visual dialog panel. This relationship is permanent (saved with the database) and can be quickly applied wherever needed. Many common relational database tasks are now built in, and available automatically once a relation is set up. Other tasks can be accomplished with simple dialogs and/or with far less code than was previously required.

Once a relation has been established between two databases, you can use that relation to quickly select data that corresponds to the current database, to display related information in a form, to accelerate data entry of related information, to post updated data to a related database, and to perform a full join between two databases.

A full explanation of the new relational capabilities is far beyond the scope of this beta release note. See the Linking with Another Database help page for a comprehensive introduction.


Automatic form construction isn’t new, but it has been vastly enhanced in Panorama 10.2, and for many applications a form can now be built entirely automatically without needing any manual “twiddling” – a huge time saver and for users that aren’t graphic design gurus this will also result in more attractive forms as well. New capabilities include the ability to control the position and style of field labels (including color and/or gradient backgrounds), more layout options including the ability to arrange multiple fields on the same row, the ability to “snap” objects into a grid for perfect alignment, custom background colors, the ability to display fields without making them editable, more control over spacing, padding and borders, and control over the editing behavior of form objects (insertion point, focus ring, pop-up editing, etc.) Here are four forms that were created completely automatically (except for the logo at the top).

I highly recommend some study to the vastly updated Automatic Form Construction page.

AUTOMATIC LINE ITEM FIELDS In previous versions, Panorama X had no ability to automatically generate line item form objects. Version 10.2 includes a new constructor dialog specifically for this. You have complete control over the layout of the line items, including options like line numbers, non-editable columns, and column title styles. Here is an example of a line item arrangement that was created completely automatically.

To learn more visit this page:

Here is an example of a complete invoice built using these tools. Creating this form did require about five minutes of manual graphics work, but 95% of the form was laid out using the automatic tools. I’m sure you can imagine how long it would have taken to create this form in a previous version of Panorama.

OPENING A SEMI-PERMANENT TEMPLATE EDITOR WINDOW For extensive editing of constructor templates, Panorama now allows you to hold down the Option key when opening a constructer to open a separate editor window that can remain open while you’re editing, greatly speeding the work. (There is also a Preference option to make this the default.)

Text Object Background Color/Gradient

In addition to showing text, a Text Display Object or Text Editor Object can also now display a background. The background can be a pure color specified by name or HTML color specification, a bezel, or a gradient. No additional objects are required, and an object with a background can still display a border as well as the background.

There are also new functions htmlcolor( and info(“colornames”). The htmlcolor( function is MUCH faster and smarter than the old getwebcolor( function (it is written in Objective-C instead of Panorama code).


In addition to the major changes listed above, there is a multitude of minor changes.

  • New joinonerecord statement works like join, but only for the current record instead of for the entire current database. Can be used in lieu of lookup( function for data entry.
  • Implemented new Join Database dialog - a user interface for the join statement added in b10.
  • The join statement now treats an unrecognized parameter name as an error. Also, you can comment out a join parameter by prefixing it with //. Also modified the join documentation to make it more clear that destination field names MUST be surrounded with chevrons.
  • Massive changes to Clairvoyance. Note that these changes are currently undocumented, and the only way to access them is via blueprints or programmatically (SetFieldProperties, getfieldproperties(, objectinfo(, changeobject). 1) Clairvoyance can be customized with a formula. 2) Clairvoyance can be attached to another database (in that case a formula is usually required). This feature is accessible and documented thru the Relational Database Options panel. 3) Clairvoyance can be fully customized using a formula to generate the values, instead of scanning the database. If this option is enabled Clairvoyance will be in effect even if the option isn’t checked. 4) Clairvoyance values can be specifically enumerated (in this case the database isn’t scanned at all). This can also be set up for Text Editor objects so that Clairvoyance auto-completion can be used with variables. 5) Function-Down-Arrow/Function-Up-Arrow can now be used to cycle through the values, even if Clairvoyance isn’t enabled. 6) The preferences panel now allows the Clairvoyance beep to be turned off.
  • The Line Item Fields help page has been vastly expanded, now covering all aspects of using line items, including setting up line items, using them in a form, using them in formulas, and using them in database relations.
  • The Fill and Formula Fill dialogs now have an icon for inserting field names. When you click on this icon (upper left) a popup menu of field names appears. Choosing a name inserts it into the dialog, with chevrons if necessary.
  • The new measuretext( function returns the height and width (points) of a string of text in a specified font and size.
  • The setfieldproperties statement now allows the database and field name to be specified, so now any field in any open database can be modified, not just the current field in the current database. If these parameters are omitted, it works exactly as before, maintaining compatibility with existing code.
  • New function dumpdictionarysource(, useful for building blueprints that contain a dictionary. Also the new dictionaryassignmentscode( function generates executable code from a dictionary, to convert a dictionary into separate fields or variables.
  • Reports generated with the Construct Report feature now default to truncate tail instead of word wrap. This can be controlled in the constructor with the <linebreakmode> tag.
  • Fixed client error handling if remote server is not running. It used to display a message about being unable to decodebase64, now it properly displays that server cannot connect.
  • If a client attempts to unlock a record and for some reason that record is already locked by the same client, the server no longer says that the record is locked by another user (it simply allows that client to acquire the lock for that record).
  • For testing/debugging, the Server Administration window now has an option to simulate a broken server connection. To turn this on, hold down the Option key and click on the server icon in the Available Servers panel, then choose the Simulate Broken Connection item. The server icon and name will turn red. From then on, any requests to this server will result in an error (this only happens on this client, it does not affect the server itself or any other clients). The connection will remain broken until you turn it off, or until you quit Panorama.
  • Fixed server handling of auto-unlock after a client crash.
  • There is a new automatic record unlock feature on the server. This prevents a record from being stuck with locked status if the connection between the client and server is broken for any reason – a network problem, the lid on the computer being closed, or the Panorama client crashing while a record is locked.
  • When adding, deleting or editing records in a shared database, Panorama now reports an error if the server is down or the connection broken. In a procedure the code stops with an error, otherwise an alert or notification is displayed according to the Preferences>Client settings.
  • The *checkserverconnection( statement now works differently – instead of throwing an error for a bad connection, it returns a boolean result in a second parameter. Also, there is now a checkserverconnection( function which you can easily use in an if statement.
  • The ConnectToServer statement now returns an error if it fails to connect to the server.
  • In the Database Options dialog, there were a couple of alerts that offered to open the Server Administration window. These buttons now work.
  • If server shutdown is cancelled, the Stop Panorama Server button is no longer left disabled.
  • Any operation that unlocks a record now also stops any editing that may be happening.
  • Clicking on a server row in the Server Administration window when that window is in the background no longer causes an error.
  • The CloseActiveObject statement has a new synonym – CloseEditor.
  • Panorama X 10.2 b10 had a serious new bug that would almost guarantee that database initialization would fail, this is now fixed.
  • Browser object now correctly adjusts when flipping between Literal and Formula mode. Before you also had to make a change to the formula after flipping the mode, or close and re-open the window.
  • Data Button objects now properly set up the clicked object id, clicked object name, and button rectangle when they are clicked.
  • When displaying literal text, Panorama now adds a parenthesis around each embedded formula. This prevents interaction between the formula and the surrounding text. Consider {Price-Cost}. In previous versions, this would produce an error because it was converted to {}+Price-Cost+{}. {}+Price results in a string, which then produces an error when you try to subtract Cost. Now it is converted to {}+(Price-Cost)+{} which works.
  • Fixed the randomline( function, it was completely broken.
  • The jsonimport( function no longer crashes if a null value is supplied in the JSON. Since Panorama has no way to represent null, it is converted to zero bytes of binary data.
  • Added a new type of error, a null value. Unlike any other error value, a null value can be stored in a dictionary. A null value can be created with error(“null”) or error(“nil”) (or any error beginning with null/nil). The jsonimport(/jsonexport( functions will convert between JSON null values and the special null error value.
  • New functions info(“panoramaversion”) and info(“panoramabundleversion”) do just what you would think they do.
  • The unixshellstring( function no longer escapes a tilde character (~) if it is the first character of the text.
  • When an error occurs in building form objects using a constructor template, Panorama now shows you the error, and offers to re-open the template editor dialog so that you can correct the error.
  • When constructing a report, the objects would shift over 24 points every time the report was generated, but only IF no left margin was specified. If the left margin was > 0, it worked ok. Now it works either way.
  • The SuperChoiceDialog statement font and size tags now work as documented, and fixed display of the caption when using this statement.
  • The addlines statement now works correctly when a variable or text constant is supplied for the first parameter, instead of a database field.
  • Added findselect statement for compatibility with ancient Panorama 1.x code (it does the same thing as the findselectdialog statement, it does not recreate the “classic” find/select dialog).
  • The sample data for the checkbook tutorial now contains field names on the top row, so that the data matches the tutorial documentation.
  • Conversion of floating point numbers to text (for example with the str( function) now defaults to 15 digit precision instead of 16 (since IEEE format does not conatain 16 full digits). In addition, there is a new setdefaultfloatformat statement that allows you to change the conversion format, and info(“defaultfloatformat”) that returns the current setting. However, these are considered “unsupported.”
  • Took out the star from the Find & Open dialog, it didn’t do anything except break Panorama when clicked.
  • The Morph Field dialog now displays the result preview using the output pattern for the field being morphed, so it’s much more usable for numeric and date fields.
  • Clicking the object opacity stepper button no longer appears to increase object opacity from 100% to 101%.
  • The <grid:dashed> (or <grid:dash>) tag now works correctly when using the List/Matrix constructor.
  • New writepreference statement. Mostly for the purpose of implementing the new panoramax://writepreference?name=value feature that allows arbitrary preference values to be changed with a link.
  • Pressing the tab key no longer inserts tabs into multi-line areas in property panels. This was reported for Choices but actually was possible in about a dozen areas, all of which are now fixed.
  • The Formula Workshop now displays dates in the appropriate format based on System Preferences settings.
  • Allow startup notification for beta authorization to be disabled with the link panoramax://writepreference?displaybetaauthorization=no
  • In the Site License->Computers panel, the Recent Activity column is now a few pixels wider, so that wide dates don’t get cut off.
  • RemoveSummaries now checks to make sure there is at least one visible record after the summaries are removed, and if not, performs a select all. If there are no data records at all (they have been deleted) and the statement would delete all summary records, it stops with an error to make sure that the database cannot be left with zero records (which is disasterous).
  • The SuperAlert statement now works correctly when using a SuperAlertDefaultOptions variable, even if the text in that variable doesn’t contain a leading space.
  • Panorama X no longer crashes if you attempt open a damaged Panorama 6 database with no data (zero bytes).
  • Several hundred documentation corrections submitted by Robert Ameeti, David Thompson, Michael Kellock, Gary Yonaites, Thomas Cooper, Kurt Meyer and Craig MacPherson.
1 Like

I am getting this error and am not able to use the beta.

Same here.

Oops, sorry about that. Try it again now, it should work. Dave, your account is tied to a @gmail address, right? Your name isn’t on it, but I think it must be you. If it works now, I did it correctly.

Correct. I’ve downloaded, and it’s working now.

Oh sorry, actually you didn’t need to download again. It was an adjustment to your account on the server.

I suspected that, but not until I had already done the download.