Panorama X 10.1.1 Build 2823 Release Notes


Panorama X 10.1.1 (Build 2823) is now available. You can download this new version from the web site, or you can simply launch your current version of Panorama X and let it automatically update. If Panorama X is already running, choose Check for Updates in the Panorama menu.

This version primarily includes bug fixes for features introduced in Panorama 10.1, but there are also a handful of significant new features.

  • The Relational Workshop wizard is a tool that assists in composing relational lookup(, superlookup( and arraybuild( functions. Of coourse you can write these functions by hand, but this workshop helps automate the process, and makes it easier to avoid mistakes. This workshop is similar to the Lookup Assistant dialog in earlier versions of Panorama, but goes much farther.


  • The Adjusting Object Spacing dialog adjust selected objects so that the same amount of space is in between each pair of objects.


  • The Spacing dialog will also work with a two dimensional grid of objects. This exammple uses a grid of two columns (one containing labels, the second containing Text Editor objects). Panorama understands that it needs to keep objects that are next together together, and not put a vertical gap in between them.


  • The Select Duplicates Dialog (in the Search menu) provides a fast and easy way to locate duplicate information in a database. The Select Duplicates command does not remove the duplicates, it simply selects them so you can examine them. You can then decide what to do about each duplicate on a case-by-case basis. You may select duplicates based on a single field (for example, all duplicate company names), on multiple fields (for example, all records with duplicate address, city, and state), or on a formula that may combine fields or use partial fields (for example, all records containing duplicate area codes).


  • The new Hotkey Workshop can assist you in composing a definehotkeys statement. The idea is simple — you press any key, and the workshop gives you the code needed to turn that key into a hot key. There is no need to look up key codes in the documentation – you just press the key, and the workshop writes the code foe that key for you.


  • Fixed the Summary Workshop and Crosstab Workshop so that they work with fields that contain spaces or other punctuation.

  • Fix in 10.1 for Z-order layering of Image Display objects now works in macOS 10.13 (previously the fix only worked in 10.12 and earlier).

  • Fixes in Help wizard – after clicking on a link to jump to a new page, the Open in Browser and Copy URL to Clipboard commands now work with the displayed page. The prototype code and the topic list selection (on the left) will also update (though this may take up to 1 second). Also the Open Corrections Window command (in the Help wizard) now opens the correct source code page, even if the user has clicked on a link to get to the currently displayed page

  • Pressing Command-F in the Help window now makes the topic search area active, with all text selected. So now you can just press Command-F to quickly start a search (instead of bringing up the Find/Select dialog, as it did in previous versions).

  • Fixed problem that could prevent charts from displaying.

  • Group objects now appear in the correct position when used in View-As-List forms.

  • In the Summary Workshop and Crosstab Workshop wizards, added a new Display Chart in Browser menu command.

  • In the definehotkeys statement, no longer need to use the FUNCTION option for arrow keys, as well as Home, End, PageUp and PageDown. Also, you can now specify LeftArrow, RightArrow, UpArrow and DownArrow as alternatives to Left, Right, Up and Down (which still work)

  • A field using the count( function in an automatic calculation now correctly recalculates automatically when a line item field changes.

  • The info(“clickedobjectid”) function now works with Text Editor objects. Strictly speaking, the object may not have been clicked, but still it could be very handy to be able to find out what object triggered the procedure.

  • Implemented the info(“keycode”) function. The codes returned by this function are somewhat different than in Panorama 6.

  • No longer loses edited field properties (formulas, code, name etc.) if you open another window and then switch back to data sheet. Note: There is one situation where changes are lost – if editing a one-line property (name, pattern, etc.) and you switch back to the data sheet by clicking on the body (a row or column) of the data sheet. But if you click on the toolbar area, in the property inspector, use Command-Tab, or do anything else other than clicking on a data cell, changes are not lost. And no matter what, changes are not lost in multi-line properties like code, formula, choices and notes.

  • If a window is closed while editing a value in the inspector panel (form name, procedure name, field code, output pattern, field name, etc.) the change to the value is applied before the window is closed (in the past the change to the value would be lost unless you clicked somewhere else in the window before closing).

  • Fixed so that corrupted # of trial days in preferences won’t prevent Panorama from launching.

  • Changed messsage in “blue letter dialog” to “Your Panorama X account does not have a positive balance” (used to be “Your Panorama X account has a negative balance”).

  • Statements that display data even after an error occurs would not handle errors properly (if error, try/catch), now this is fixed. Problem was originally isolated in the SelectDuplicate statement, but also affects FormulaFillAllFields, ImportDatabase, ImportJSONLine, ImportJSON, ImportLine and ImportText.

  • Updated documentation with corrections submitted by William Conable, Michael Kellock and Thomas Cooper.


Another great collection of improvements, especially the first four dialogs/workshops. Much appreciated Jim.


At the risk of asking a dumb question, I don’t see how to initiate the Relational Workshop. With a procedure window open, I see the Program menu with other workshops, but not this one.
I just discovered that it will open with a procedure:
Openwizard “Relational Workshop”
Now I see that you can find the Relational Workshop under the Help Menu.


I gave this quite a bit of thought, I wound up putting this in the Help Menu because you might want to use it from the data sheet (when editing the formula or code) or in graphics mode (for an object formula), not just for working with procedures.

I am concerned about putting too many items in the Help menu, but I don’t think we’ve reached that point yet.


I agree with the choice of the Help menu. I put most procedures into objects and would want the Relational workshop available. When writing a procedure in the Procedure pane of an object, the Program Menu does not appear, although I wonder if that would be a good change.


I don’t think it would be a good change. Run and single step do not work in graphics mode, and even if they did, code in an object is designed to be triggered by actions on the object in data. So triggering the code from a menu in graphics mode would usually cause it to work incorrectly.

As for the dialog workshop and hotkeys, I don’t think that is the sort of code that is usually going to be put into an object. I love love love the ability to put any code into an object, but if it’s more than 3-4 lines I almost always create a separate procedure and call that procedure. Beyond the fact that it is a lot easier to edit code in a bigger window, it also allows you to leave the form in data mode for testing, yet still easily modify the code.

Since Panorama X now includes callwithin, you can put code for multiple objects in a single procedure if that is convenient, so that you don’t have a super long View menu (as was common in earlier versions of Panorama).


I do miss the contextual menu giving access to field, form and procedure names in the procedure panel. What was your thinking on leaving that unimplemented?


I have moved to the stage of putting no code in the object other than something like this:

lvAlpha = "Object1"
call .ProcessObjectCode

and the .ProcessObjectCode procedure handles all such cases within if and elseif structures, according to the value of lvAlpha. The power of object-initiated code is enormous but editing procedure code is a whole lot easier than editing in a skinny little object code panel.


I assume that lvAlpha is a fileglobal variable. I would suggest that a cleaner approach would be to pass this as a parameter, like this. No variable needed.

call .ProcessObjectCode,"Object1"

Inside .ProcessObjectCode, the value can be retrieved with the parameter( function.

However, you can probably do even better! Instead of passing a parameter, you might be able to just use the info(“clickedobjectid”) function.

With this, your procedure can find out all kind of handy information about the object that was clicked – it’s name if it has one, it’s title (for a button), it’s formula, etc. All of this can be accessed with the objectinfo( function.


Assuming you mean the panel in graphics mode, this may get added eventually. However, it turns out to be not so easy to do, so I have skipped that for now – there are so many many projects to work on. So maybe the answer to your question is that I didn’t make a design decision in this case, but a tactical decision about resource allocation.


Oh, how I envy your encyclopaedic knowledge of the Panorama language!

A couple of excellent suggestions.