Modal Prompts in JS

John Boehme john at
Fri Nov 22 12:08:14 EST 2019

Hi Jim,

Sure did. I was replying to Stens' message but had yours selected when I hit
the button.

Sorry for the confusion everyone.

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 7:29 PM
To: Omnis List Mail
Subject: Re: Modal Prompts in JS

Hi John,

Hmm, somehow I think you're answering a different question!  But thanks


>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
>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.
>>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
>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