Questions about Pan X development

You probably hate these kinds of questions, but I have to ask. I will accept vague answers.

I am hoping to retire in a year. If the economy remains reasonably healthy I’ll be able to, but at the moment I’ll make no bets as to how that will go. But assuming I can stick to Plan A, I want to be able to turn over a fully functioning Pan X system to my successor, able to do everything we are doing now in 6 and no doubt adding several enhancements. Aside from cleaning up detail issues that come up every day in this forum, there are two features we MUST have: multi-user, and live clairvoyance. Can you give me a ballpark (2nd Quarter, 3rd Quarter, etc) for when you hope/expect to have these features up and running? I know they’re not the least bit trivial, but they are vital to a lot of people.

I am hoping to retire in a year

I hear that more than you might think.

I think the live clairvoyance part of your question might be a bit of a misunderstanding. This feature is now built-in to Text List and Matrix objects. This solution is way better than the way it was done before, and is super easy to set up – in fact the List/Matrix constructor will do it all for you. All of this is completely documented now (Text List Searching and Text List Constructor), and, if I say so myself, I also did a pretty good job of covering this in the video class. If you have a form that uses the old liveclairvoyance statement, you should rip that part out and use the new system. I would think that normally you could do that in 15 minutes or less.

As for the server, I don’t think I’ll go any further than saying that it probably won’t be available in the 2nd quarter.

I’ll bet you’ll hear this a lot too! I guess I was thrown off by the fact that the liveclairvoyance command is “not yet implemented.” I’ll check out your references.

Thank you for the answers. I am satisfied for now.

Wow, that is interesting. It looks like the options are nearly endless. I have a number of comments, but the first and foremost is: OMG, it’s slow!!! I’m hoping this feature will respond to optimization; LiveClairvoyance was nearly instantaneous.

In LC, the list was empty until a search term was entered; this one starts with a list of everything which is truncated as the search term is entered letter by letter. Can this be made to act like LC in that regard?

With my Pan 6 LC object, I offered separate choices on which field to search - company name, contact name, address, city. A generalized search gives too much information to be useful for quick queries. I did this in LC by customizing the search formula on the fly. I gather I could accomplish much the same thing by modifying the $TextListQueryFormula that I see in the Blueprint. Is there a more straightforward way to accomplish this than doing that?

I wanted to put a conditional in my list, to put up an indicator as to whether the account on each line was Closed or not. My code at the beginning of the list:

?(Terms contains "closed","***","")

but I just got a single column of “F” and nothing in the other columns. I gather “F” was the start of an error message, but I can’t figure out how to read the full message.

Another feature of my old LC was the ability to search a field literally, or stripped of all non-alphanumeric characters so it could ignore confusion over embedded hyphens or ampersands or extra spaces. Is there a way to accomplish this here?

I am going to have lots more questions, and it might be best to start a new topic.

I’m sorry, but I don’t understand this comment. This feature is used all over the place in Panorama itself, including the Find/Select dialog and searching for topics in the Help wizard. Yes, searching unicode text is a bit slower than ASCII text, but OMG slow? Of course the performance depends on the formula you use and the amount of data, but it should be pretty similar to the Panorama 6 Live Clairvoyance feature. (And if Panorama X ever does for some reason add support for the actual liveclairvoyance statement, it would use the same exact technology and the performance would be identical to what you are seeing.)

looks like the options are nearly endless

They are, and I believe every single one of your questions is answered in the documentation, mostly on this page.

Text List Searching

the list was empty until a search term was entered; this one starts with a list of everything which is truncated as the search term is entered letter by letter. Can this be made to act like LC in that regard?

Here is the basic “default” formula for text list searching.

var="" or import() contains var

If you change it to:

import() contains var

the list will be empty when var is empty. This is covered in the documentation, though the wording is different - “The first part of the formula simply insures that if nothing is typed into searchText, all of the items in the list will be visible, because if searchText is empty, the formula is always true.”

customizing the search formula on the fly. I gather I could accomplish much the same thing by modifying the $TextListQueryFormula that I see in the Blueprint. Is there a more straightforward way to accomplish this than doing that?

It’s not clear to me what is not straightforward about changing a form object property with the changeobject statement. It is very simple and straightforward. You just have to give your object a name and then run one line of code, like this:

changeobject "My Search List","$TextListQueryFormula",||| some formula here |||

For an extreme example of this, this is how the Find/Select dialog works. Every time you select from a pop-up menu in this dialog, or add or remove a row, it is modifying the formula of the Text List object that is used to do the preview. You can even use the View Organizer wizard to go in and take a look at the code that does this, though I will warn you it is rather byzantine. But the important point is that I don’t have access to some secret feature that isn’t available to you — all of Panorama’s own dialogs that do this sort of thing are built using the same technology that is available to you.

I just got a single column of “F”

This is most likely the beginning of the error message Field or variable does not exist. There is a general problem of reading error messages from formulas in form objects, not just Text Lists but Image Display, Web Browsers, and many others. I’ve given this a lot of thought and have some ideas but obviously have not implemented any of these ideas yet. For now the best bet is to copy the formula into the Formula Wizard or into a Text Display object and see what the error message is. I agree it is a pain and I have run into the problem quite a few times myself.

ability to search a field literally, or stripped of all non-alphanumeric characters so it could ignore confusion over embedded hyphens or ampersands or extra spaces. Is there a way to accomplish this here?

Of course, you can use ANY formula you want.

I have managed to duplicate almost everything I was doing in Live Clairvoyance in 6, and I have to say it is quite impressive. My initial efforts performed “OMG Slow!” mainly because I first set it up to search several fields at once; when I tuned it to search only one field at a time it performs … adequately. But I must say I find Pan X in general to be OMG slow sometimes, and crash prone, and beachball prone. I have to force quit often some days, and twice in the past I’ve had to lean on the power button to get out of a complete lockup when Pan X gets fully confused. Today I got through the whole day with only one crash, and no lockups! But we’re still in beta, so I’m confident this will all be settled when it’s time for market.:grin:

It makes me nervous to modify deep structures programatically. I used to hack machine code in place and it felt like a dangerous thing to do. What if I do something corrupt and can’t fix it? But I realized that any problems created by a procedure can also be repaired by a procedure. And I’m finding this to be very useful.

One thing that’s very nice is that much of what I had to write code to accomplish in Live Clairvoyance is handled automatically with Text Lists. A simple click on any result line takes me to that record, and arrowing up or down in the list takes me to the next item in the list, not merely the next record in the database. But what I miss is the ability to intercept that click and do something different if it is a modified click, like command-click or double click. Is there a way I can hook into the click processing?

That’s a very optimistic thought Scott.

Yes, “any” is a pretty strong word. But realizing how I got into trouble can be useful for getting out of it. Sometimes.

If you are asking if you can intercept modified clicks in a text list, yes you can. Just put if optionclick()…endif, or if shiftclick(), or if doubleclick() in the procedure for the text list. Not sure about command clicks.

This isn’t anything like hacking machine code, and you’re not “modifying deep structures” any more than you are when you use the graphical interface. In fact, the way the object is changed is EXACTLY THE SAME when you modify an object with changeobject as when you modify it using the inspector panel. When you edit a formula with the inspector panel, Panorama internally calls the same code that changeobject uses. That’s why it’s impossible for there to be an object attribute that can be modified with the inspector panel but not with changeobject. Underneath, the same code is being used, so adding an object attribute to the inspector panel automatically adds that attribute to changeobject, objectinfo(, and blueprints.

Is there a way I can hook into the click processing?

You can of course add code to the Text List object (as I see @CooperT just commented), but whatever code is in there will be performed in addition to what Panorama is already doing.

You can also turn off the Database Navigation feature if you want, but then you have to handle everything yourself, you lose the nice automatic features. But then you have complete control over what it does when you click.

I did what CooperT suggested, and it worked exactly as I wanted. Last week. Today, without changing anything, it does nothing. Even when I reduce the procedure (in the procedure pane) to

If doubleclick() 
    message "doubleclick" 
endif

nothing happens. No error, no message. A single click works like it should, and in fact a doubleclick works like a single click in that it goes to that record, but doesn’t do the extra processing I want. Can anyone explain?

So far, no. I cannot reproduce this. Any more ideas on your end about what could be happening? If I remember correctly, and that is not a sure thing, I think at one time there was a requirement to click on a record to select it in the text list, then double-click it. But when I just tried a text list, double-clicking on a record that is not already selected works as expected and executes the code inside the if doubleclick block.
Tom