Modal Prompts in JS

John Boehme john at
Thu Nov 21 17:00:13 EST 2019

Hi Jim,

Not sure if I understand your question totally. Here is what I think

We have these class objects that manage a record for a table, and, various
connected records to that main record.
When retrieving a "document" as we call it, we also load up the child
records. This may result in many db requests to retrieve each of the child
records for the main document.

With a local connection to the db, this is irrelevant. However, when
connecting to a remote db, the delay for each request is very significant.
The same <1s process on a local db may take 10-15, 30 seconds on a remote db
just retrieving the child records.

For certain reports, where complete detail of an individual document is
required, I tried this approach which seems to work pretty neat. I use a
structure like this as a column calculation:

    ( SELECT string_agg(concat(n.note_date, '\t', n.note_text), '\~'::text)
AS note_list
           FROM notes n
          WHERE (n.doc_uid = doc.doc_uid)
          GROUP BY n.doc_uid) AS notes,

Where doc.doc_uid is the parent record key.

What this select does is build a delimited list of columns/records from the
notes linked to a document. So for each document, one column has a list of
all its notes. We actually have several columns pulled back with other child
lists of the document we're retrieving.

When using joins, you'll get multiple records for the main record depending
on the number of child records. With this approach, we get one record
returned for each main record. All the child records for each record are in
columns of the record. So only one db request to get everything.

To retrieve the data from the column, we run the data through a parser that
translates the delimited records into a list:

Do $cinst.$getList(iNotesList,ivMainList.note_list)

Where ivMainList.note_list is a child list of a main record retrieve with
the sql above, and upon return, the iNotesList is populated with the data
from ivMainList.note_list.

A similar approach would be to use a json service, which would handle the
data in pretty much in the same way except in a much a nicer format.

Good luck.

John Boehme
Integral Consulting Services
Bothell, WA

-----Original Message-----
From: omnisdev-en [mailto:omnisdev-en-bounces at] On Behalf
Of Jim Pistrang
Sent: Thursday, November 21, 2019 10:21 AM
To: Omnis List Mail
Subject: Re: Modal Prompts in JS

Hi all,

Similar to Will, I am working on a strategy for presenting a prompt in the
js environment.  My prompt will need to appear on multiple forms, and it is
more complex than a simple OK or Yes/No message.

My js forms all have a common superclass, so I was hoping to place a 'prompt
box' on the superclass in the form of a paged pane that would be invisible
by default but made visible to display a prompt.  This works, BUT the $order
of the superclass paged pane is a lower number than the child form objects,
so the paged pane appears behind other objects on the form.  Is there
something I can do to get the paged pane in front of the other objects?


>Hi All,
>I'm missing the Euromnis get-together this year, hope you're all doing 
>well though.
>This is a question about prompts and the Omnis mechanism that runs the 
>JS remote forms. We have about 3000 Yes/No messages in our app as well 
>as a bunch or other prompts that require some form of user choice 
>before continuing - they all run from a single task level object 
>variable that builds and displays a suitable prompt then returns with 
>the user selection. The problem is that this is often in the middle of 
>a method i.e. halfway through processing an invoice, we might warn if 
>the stock is going to drop below a level and ask if they want to 
>continue... for example...
>In the current system this is modal, so Omnis execution pauses at that 
>point in the method stack while we wait for a response. I had hoped to 
>do something similar with JS forms so that we do not have to spilt and 
>rewrite the majority of our core methods, however it does not appear to 
>be that easy.
>I know that the browser on the client runs asynchronously to the Omnis 
>server but was hoping I could work around it by issuing the client 
>command to show a Yes/No prompt and then immediately entering a while 
>loop while we wait for a user response, (in order to keep Omnis 
>executing within our prompt method). When the browser responds with a 
>result it would change the condition of the while loop and then we 
>would then exit with the response. In this way the JS version works the 
>same as the thick client and if there are multiple remote tasks they 
>can time slice on the server and would still be responsive.
>But it does not work. The browser does not display the Yes/No prompt 
>until the Omnis code stops executing on the server, which means we have 
>to exit the method and then start a new stack after the user response, 
>which means we need to rewrite any code that contains a Yes/No. Hmmm.
>The above process may not be the best way to structure code, but it 
>would save us a hell of a lot of time. Is there are a way I can "flush"
>the current method stack to force Omnis to update the client mid-stack?
>Perhaps there is another way to simulate a modal response in the world 
>of JS remote forms?
>Any thoughts? All Ideas welcome!
>Best regards
>[Lineal Software Solutions]        <>
>[Twitter]<>  [Facebook] <https://
>>   [Google +] <https://
>>   [LinkedIn] <https://
>Will Adkin  / Software Development Manager 
>will at<mailto:will at>
>Lineal Software Solutions
>01271 375999
>Commercial House, The StrandBarnstaple, Devon, EX31 1EU 
>This e-mail message may contain confidential or legally privileged 
>information and is intended only for the use of the intended 
>recipient(s). Any unauthorized disclosure, dissemination, distribution, 
>copying or the taking of any action in reliance on the information 
>herein is prohibited. E-mails are not secure and cannot be guaranteed 
>to be error free as they can be intercepted, amended, or contain viruses.
>Anyone who communicates with us by e-mail is deemed to have accepted 
>these risks. Lineal is not responsible for errors or omissions in this 
>message and denies any responsibility for any damage arising from the 
>use of e-mail. Any opinion and other statement contained in this 
>message and any attachment are solely those of the author and do not 
>necessarily represent those of the company.
>Manage your list subscriptions at Start a 
>new message -> mailto:omnisdev-en at

Jim Pistrang
JP Computer Resources

Manage your list subscriptions at
Start a new message -> mailto:omnisdev-en at 

More information about the omnisdev-en mailing list