These are a Few of My Favorite Things

Panorama has more features than any one of us can ever hope to know even exist, never mind how to apply them. I still find unknown capabilities in Panorama 6 whenever I need to do some work in it - which is still pretty often.

There are many things I’ve found in Panorama X that have awed me. Frequently I’m trying to carry out some task and thinking there’s nothing for it, then discovering it was under my nose. I simply failed to comprehend how to apply it for my purposes.

So I’ll share a few of my favorites on the assumption that others don’t know about them or recognize their potential.

RelatedArray(

Wow, the speed with which I can build a complex array of data from another file. It can be used in a Text List or Matrix that updates immediately for each record to show invoices, products in inventory, or any other dataset that matches the relation.

LoopArray

The more I use it, the more I use it. In some uses I’ve built a large array based on some criteria, then I use LoopArray to process every element well beyond what an ordinary array formula can do. In some cases I’m creating multiple new arrays, occasionally embedding another LoopArray or two with the parent loop.

Join Databases

Another wow! Last week I had two immense databases that needed to be combined One was 204,000 records, the other was 130,000. I had ten fields that needed lookups to match records and apply the data. Even with a relationship set up, after 20 minutes the first lookup was only halfway through when my computer declared it was out of memory. Digging into the Help file I discovered Join Databases. (Yes I had seen it before when I had nothing for it so it had slipped my memory) Join accomplished the task in about 4 minutes.

Tab Panels

These are wonderful for maximizing real estate on the screen. Any portion of your form can be static while selected portions can be toggled to display anything else; maybe a matrix of invoices built by RelatedArray(. It really gets fun when you realize that a Tab Panel can have other Tab Panels within it. Consider for instance a panel for Music that has sub-panels about instruments, musicians, and songs. Then another panel for Biographies with sub-panels for Current, Medical, and Familial. Yeah, these are quickly imagined topics but I’ve had enough real ones to know this is a very useful capability. Sometimes I’ve used the sub-panels for different tables of data along with a chart, each having enough variants in the configuration that one wouldn’t fit all.

Data Dictionaries

If there’s some long list of something that you need to refer to often and want it fast, this is the ticket. An application I’ve used it for is to build an extensive list of ID’d folders that are within a slightly complex nested group of folders. The list consists of the ID along with its complete path. Converted to binary in a dictionary the folder path for every record in a database is instantly acquired and the folder’s contents are displayed.

Of course, there’s more and I’ll add to this list as I think of them. Maybe you have a couple of favorite things that you can share too.

2 Likes

FarCallWithin

There are so many times that I’ve copied and pasted ShortCalls from one procedure to another. And I’ve got lots of FarCalls.

It is so helpful to be able to put them in one place. No more scrolling through lists of procedures trying to find them.

Yes, I agree about farcallwithin. Here’s an additional tip - put a mark just above each label, like this:

//[--whatsitButton--]
whatsitButton:

Then you can use the Mark menu to quickly jump to any subroutine. You can read more about the Mark menu here:

Don’t forget that you can use farcallwithin in the code that is triggered by a button (or any graphics object). For example, I like to put all of the code associated with a particular window in a single procedure, using farcallwithin to call the specific code for each button. If your window has a dozen buttons, you’ll only have ONE item in the View menu instead of twelve. Much cleaner.

Also, don’t forget about the callwithin( function. This allows you to create a formula that can be used over and over again – and again, without having to add an extra item in the View menu. You can mix both regular subroutines (for use with farcallwithin and formulas (for use with callwithin() in the same procedure.

Of course sometimes you still do wind up scrolling through lists of procedures to find something. That’s where I find the View Search window invaluable. When I’m developing Panorama code, I use it dozens of times per day.

I open it and the View Organizer whenever I’m working on databases. They’re both great assets.

In the View Search I particularly like that I can use Search All Databases. That lets me find a particular word, such as a variable or field name, in every instance that I’ve applied it.

I’ve begun a habit of tagging spots that I intend to revisit, possibly for enhancement or just to double check my logic later. View Search makes it easy to find them.

I knew about Marks but until you reminded me, they were being badly under-utilized. I’m making it a point to start remembering to apply them.