Subscribe for automatic updates: RSS icon RSS

Login icon Sign in for full access | Help icon Help
Advanced search

Pages: 1 [2] 3 4 ... 10
 on: July 21, 2020, 03:23:17 pm 
Started by Benjamin G. - Last post by Sebastien F.

To woek efficiently, I can understand that a single user can keep 2-4 applications in parallel (implying 2-4 SQL connections)...

However, I like also the fact that in a single application, a new window/form and dialog controlling that window/form will make previous windows unusable, to have a stack of windows/forms and force the user to go backwards in that tree.

With tons of little applications running in parallel, be sure that end users will forget to close some applications and get lost in their windows.

I believe the solution is a good compromise of both...

Your suggestion of a new kind of RUN forking a new child process with all the context of the parent (and especially sharing the SQL connection) is not realistic to me: Quite too difficult regarding FGL runtime system, and actually impossible for SQL management because database client API don't allow this AFAIK... I would be interested to read some official documentation that says that an Informix client can fork a child process and reuse the same SQL connection...

In the top parent "management application" you can maybe close the SQL connection after loading all needed SQL data (app user permissions, etc) ...


 on: July 21, 2020, 08:32:05 am 
Started by Benjamin G. - Last post by Benjamin G.
Hello Sebastien,

A management application is generally structured around a menu from which programs are executed with an interactive dialogue between the user and the database. There are 2 possibilities, either you make a "CALL ..." type call or a "RUN ...".

In the first case we have a "monolithic" application with one main and a lot of functions, this design allows to have a single DB connection and to be able to share variables between programs but does not allow having several "dialogs" open in parallel which for the user is frustrating because he has to close one "dialog" to open another.

We did some tests with the "parallel dialogs" but without success.

In the second case, an application split into a multitude of "main" we gain user flexibility, it can have several dialogs in parallel, but
to the detriment of a high number of DB connections and no "direct" data sharing between the different "main". Another idea might be to be able to launch a main module not as an independent process but as a "fork" of the "main menu" this would allow to have a single connection to the DB (at least with Informix, feature is supported) and to be able to share data.

We could therefore imagine having a sort of "RUN AS CHILD" OR "FORK" in complement to "CALL" and "RUN WITHOUT WAITING" ...

Just an idea


 on: July 20, 2020, 01:03:27 pm 
Started by Benjamin G. - Last post by Sebastien F.
You could also consider to use modularity as much as possible with IMPORT FGL:
Implement small tasks (like parameter tables input) in a single .4gl module that can be reused by other programs, so that a main program implementing a common task (like order input), can call a function of that secondary module.
The .42m module will not be loaded until a function of that module is called. So as long as it's not used, the secondary module will not consume resources.
You could in fact write "huge" programs doing IMPORT FGL with many secondary modules.

 on: July 20, 2020, 12:58:38 pm 
Started by Benjamin G. - Last post by Sebastien F.
Hello Benjamin,

You make a good point: SQL connections can have a cost (user licenses, RAM)

First, you need to consider the type of database that you use (client side AND server side):
An SQL connection to Oracle costs more resources than Informix or PostgreSQL for example.

Then, understand that the concept of connection pooling implies that you need to deal with SQL statements quite differently as today:
Behind the scene, there are still regular SQL connections that are used to implement connection pooling.
One SQL connection can be shared between programs, that requires to make it kind of stateless.
To use connection pooling, an application needs to ask to pool for a free connection and release the connection, each time it needs to do some SQL transaction.
Imagine that you would have to surround with a CONNECT TO and a DISCONNECT, each piece of code doing some SQL... ready to review all your code?
This cannot be automagically done by Genero and the ODI layer:
It's in the hands of the programmer, to decide when a connection is required and when it can be released.
Furthermore, any open cursors will have to be closed as cursors are linked to a connection and should not be shared between programs.
And what about temporary tables, that do also below to an SQL connection?
These should also be dropped, before passing the connection to another application.
What if you change some SQL connection settings/attributes as with Oracle's ALTER SESSION command?
Today you don't care about all of that because an SQL connection is reserved for each program instance, and it is state-full.

I see 2 options today to save SQL connections:

1) Have medium-sized applications grouping tasks by domain (with multiple forms)
2) Have a multi-tier architecture using Web Services, where connection pooling is kind of implicit, since each WS server program connects once to provide multiple WS clients


 on: July 20, 2020, 12:08:07 pm 
Started by Benjamin G. - Last post by Benjamin G.
Hello, What is the balance between a mutlti-main application design and database resources. If we want to obtain a modular application, the ideal would be to have a multitude of small "main modules" so that the user can organize these applications as he wishes. The downside is that each app consumes database connections which is not ideal. My question is therefore to know if it would not be possible in genero to share the same connection, like connection pool or passing by parameter the "connect object" so we can share one "connection" ...


 on: July 20, 2020, 09:45:57 am 
Started by Efisio S. - Last post by Efisio S.
Hi Rene,

I tried the second solution you suggested, but the datetimeedit value format is like 20/07/2020 09:42 AM.
Since I don't want the AM/PM suffix, how can I remove it?


 on: July 17, 2020, 03:43:51 pm 
Started by Efisio S. - Last post by Rene S.
Hello Efisio,

1st answer:

you're asking for a FORMAT attribute for form fields with the type DATETIME. The runtime always sorts according to the type.

An example for numbers: 10 > 9, unlike "10" < "9".
An example for dates: 01/01/2010 > 02/03/2009, unlike "01/01/2010" < "02/03/2009".riab

Unfortunately: datetime variables/form-fields do not support a format attribute.

A fix should be possible.

2nd answer:
Simply use in the 4gl program the type DATETIME, use in the per file the widget type DATETIMEEDIT.
Works as expected: the variable is formatted as expected, the sorting respects the type.


 on: July 16, 2020, 03:49:23 pm 
Started by Ernest D. - Last post by Leo S.
Hi folks, regarding this we have a registered bug

GDC-4356 bad display when scrolling in tables using images
which might match your problem.
It is fixed for the upcoming GDC 3.20.13 maintenance release,
so please check with the support if this problem is actually yours.
Regards, Leo

 on: July 16, 2020, 03:15:01 pm 
Started by Christine R. - Last post by Christine R.

 Genero 3.20 GAS Maintenance Release

Four Js is pleased to announce a Maintenance Release of Genero Application Server 3.20.11.

This version includes the following fixes :

This version is now downloadable from the web site :

Note : All Four Js Genero customers under maintenance have free access to the new release.

Best regards,

Four Js Development Tools

 on: July 15, 2020, 07:46:55 pm 
Started by Jonathan B. - Last post by Laurent G.

Quick additional update:

As our local support further investigated with Jonathan, it was determined that the blank Windows were not only white but also "black rectangles" and that the problem wasn't GST only but also GDC. So that lead us to suspect some QT graphics related issue/bug that can be helped by setting some specific environment variables.

It was then confirmed that the following setting worked:

QT_QUICK_BACKEND=software which is a software renderer backend, with no shader support

As stated above, those type of issues are usually linked to older graphics card drivers or HW not compatible with the latest QT libraries -- upgrading HW is more than often not the answer ...

We hope this info will be useful to anybody in our community experiencing related rendering/scaling problems. Note also that there are other QT settings that can possibly help, contact your local support if needed.



Pages: 1 [2] 3 4 ... 10
Powered by SMF 1.1.21 | SMF © 2015, Simple Machines