Back to Four Js Website
Four Js Customer Forum
Subscribe for automatic updates:
RSS
Sign in for full access
|
Help
Four Js Development Tools Forum
>
Discussions by product
>
Genero BDL
>
Feature request, Virtual scrollbar on paged mode display array.
Most recent posts
Pages: [
1
]
« previous
next »
Reply
|
Print
Author
Topic: Feature request, Virtual scrollbar on paged mode display array. (Read 16704 times)
David H.
Posts: 158
Feature request, Virtual scrollbar on paged mode display array.
«
on:
February 22, 2008, 05:03:30 pm »
Hi All,
As much as I like the paged mode display array, I have a problem that the number of records to be displayed must be known in advance. If the data being displayed is sourced from a database (and it usually is) then you would expect this to be derived by a SELECT COUNT(*) statement, which can take a while to run if the number of rows is large, regardless of indexing. This additional delay has been noticed by our users as it can add several seconds to the time they have to wait for their data to appear...
So I was wondering if we could have a virtual scrollbar paged mode option, which does not require the total number of records to be known in advance, where the scrollbar continues to operate, rescaling itself as the user scrolls or pages through the array. If the user scrolls to the end, and the total number of records is known and the scroll bar behaves normally.
This is how we deal with this situation currently on v3.5.xx BDL where we can use the undocumented ON KEY(arraygoto) and fgl_scrollbarcurr() to achieve this behavior.
Any thoughts/suggestions?
David
Sebastien F.
Posts: 545
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #1 on:
February 22, 2008, 05:12:01 pm »
Hi David,
Fast answer, did not test this:
Maybe you could try following:
- Define the initial number of rows as big as possible (should be a 4bytes int).
- Start the DISPLAY ARRAY, let the user page/scroll and count the rows during ON FILL BUFFER.
- Once you reach the end of the result set (NOTFOUND), you can reset the number of rows with set_count() or DIALOG.setArrayLength("sr",n)
Cheers,
Seb
Sebastien F.
Posts: 545
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #2 on:
February 25, 2008, 09:52:33 am »
David,
I think I answered too fast: After doing some tests is appears that changing the number of rows (with DIALOG.setArrayLength()) inside ON FILL BUFFER makes the dialog loop...
Before we had paged DISPLAY ARRAY, I always suggested programmers to limit the number of rows retrieved by a query.
This is still true with paged mode:
Does it really make sense to let the end user browse in 5 000, 10 000 or 100 000 rows?
Should he not refine the search instead?
So I would suggest following programming pattern:
1) Issue the CONSTRUCT and get the WHERE part
2) Enable SQL interruption to let the user cancel the queries (this works now with almost all databases in 2.10)
3) Execute the SELECT COUNT(*) to get row count; Handle SQL interruption and get back to CONSTRUCT if asked.
4) If the row count is greater as 500 or 1000 rows, warn user and ask if he wants to refine search -> get back to CONSTRUCT.
5) Start the page DISPLAY ARRAY with the scroll cursor...
Seb
Rene S.
Posts: 112
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #3 on:
February 25, 2008, 01:32:05 pm »
Hello David,
your request is very legal.
Counting the data before calling DISPLAY ARRAY is annoying (and costs
resources).
I clearly point out: the ON FILL BUFFER feature was introduced to use
any number of rows in the DISPLAY ARRAY instruction.
I would like to implement your request by setting the arr_count to -1.
What's the idea: until the real array size is unknown, we guess the size to
be one page greater then the maximum row-index we ever used.
See this really working example (notice 2.10 is required. You must set
the environment variable FGL_USENDIALOG to use the new multiple dialog
implementation in traditional DISPLAY ARRAY).
This is similar what you can obtain when testing queries in SQL server,
they have the same growing scrollbar.
Rene
--this file: fill_buffer.4gl
DATABASE stores
MAIN
DEFINE a DYNAMIC ARRAY OF LIKE systables.tabname
DEFINE l, s, i, guessed_count, real_count, max_row, page_size INT
OPEN FORM f FROM "fill_buffer"
DISPLAY FORM f
LET page_size = 5
LET max_row = 0
LET guessed_count = page_size
LET real_count = NULL
CALL set_count(guessed_count)
DECLARE cu SCROLL CURSOR FOR
SELECT tabname FROM systables
OPEN cu
DISPLAY ARRAY a TO r.*
ON FILL BUFFER
CALL a.CLEAR()
LET s = fgl_dialog_getbufferStart()
LET l = fgl_dialog_getbufferLength()
IF real_count IS NULL THEN
DISPLAY "on fill buffer:", s, s + l - 1, guessed_count
END IF
FOR i = 1 TO l
FETCH ABSOLUTE s cu INTO a
IF status == NOTFOUND AND real_count IS NULL THEN
LET real_count = s - 1
DISPLAY "setArrayLength - finally: ", real_count
CALL DIALOG.setArrayLength("r", real_count)
CONTINUE DISPLAY
END IF
LET s = s + 1
END FOR
-- next block is not required if the runtime supports
-- ON FILL BUFFER and unknown arr_count.
IF real_count IS NULL AND s - 1 > max_row THEN
-- We have been asked for a row we've never seen
LET max_row = s - 1
DISPLAY "max_row:", max_row
-- guess we have more rows...
LET guessed_count = max_row + page_size
CALL DIALOG.setArrayLength("r", guessed_count)
DISPLAY "setArrayLength - guessed: ", guessed_count
END IF
END DISPLAY
END MAIN
--this file: fill_buffer.per
LAYOUT
GRID
{
<t t1 >
array
[a1 ]
[a1 ]
[a1 ]
[a1 ]
[a1 ]
}
END
END
ATTRIBUTES
a1=FORMONLY.a1;
INSTRUCTIONS
SCREEN RECORD r(a1);
David H.
Posts: 158
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #4 on:
February 25, 2008, 03:58:35 pm »
Hi Rene,
Yes thanks, that is exactly what we are looking for...! If in a future version this can be implemented as you say by setting the arr_count to -1, do you think it will still require FGL_USENDIALOG to function as well?
Cheers,
David
Rene S.
Posts: 112
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #5 on:
February 26, 2008, 10:25:37 am »
Hi David,
> do you think it will still require FGL_USENDIALOG to function as well
future versions of fgl will not need the environment variable FGL_USENDIALOG. The variable controls which code line will be used for traditional dialog statements. The old code line will be removed in a future version. Remember: we have not removed the old code in 2.10 to avoid compatibility problems by adding multiple dialogs.
BTW: the implementation of the request is trivial, should be done in 2.11
Rene
Neil M.
Posts: 21
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #6 on:
February 27, 2008, 11:23:20 am »
Just a small warning:
While it is possible to declare a scroll cursor for a very large record set, some databases actually try and keep the current record set in memory. Allowing users to do such a select could potentially bring your database down or least cause the server OS to seriously slow down while swapping.
Which regards to the virtual scrollbar, this actually in the GWC old versions for a while and the customers involved complained that it made the scrollbar useless to them.
Our email/contact software we use also does this virtual scrollbar type things I personally find it horrible to use.
I'll be surprised if the customers prefer this to a short wait will the count is executed.
David H.
Posts: 158
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #7 on:
February 27, 2008, 12:07:53 pm »
Hi Neil,
Thats interesting as all our BDL customers have a virtual scrollbar and we had no complaints until they upgraded to Genero and got delayed by the additional overhead of SELECT COUNT(*), where in worst case scenarios I've seen it take up to a 35 secs to run..!
Thankfully, if Rene implements this only when arr_count = -1 we can both be happy.
Cheers,
David
David H.
Posts: 158
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #8 on:
May 21, 2008, 11:42:23 am »
Quote from: Rene SCHACHT on February 26, 2008, 10:25:37 am
BTW: the implementation of the request is trivial, should be done in 2.11
Rene
Hi Rene,
Any news on what version this enhancement will appear in? I don't see any mention of it at
https://4js.com/techdocs/genero/fgl/devel/DocRoot/User/NewFeatures.html
yet...
TIA.
David
Rene S.
Posts: 112
Re: Feature request, Virtual scrollbar on paged mode display array.
«
Reply #9 on:
May 21, 2008, 12:37:03 pm »
Hi David,
you're right, 2.11 is out. We put this feature on the 2.20 feature list.
Rene
Pages: [
1
]
Reply
|
Print
« previous
next »
Jump to:
Please select a destination:
-----------------------------
General
-----------------------------
=> General Discussion
=> Ask Reuben
=> WWDC21
-----------------------------
Discussions by product
-----------------------------
=> Products announcements
=> Genero BDL
=> GWS
=> GAS and GBC
=> GDC
=> Genero Mobile for Android or iOS
=> Genero Studio
=> Reporting tools (GRW, GRE)
-----------------------------
Jobs
-----------------------------
=> Jobs
Powered by SMF 1.1.21
|
SMF © 2015, Simple Machines
Loading...