What’s new in 4D 20 R6

Programming-related features

REST and Qodly Support of Singletons

4D 20 R6 expands on singletons introduced in the previous release. Now, you can directly call functions that are exposed by shared singletons through REST APIs and Qodly Pages events.


Manage your HTTP requests with HTTP agents

4D 20 R6 introduces HTTP agents to help customize connections to HTTP servers since these HTTP agents manage connection persistence and reuse for HTTP requests.

This optimization avoids the overhead of renegotiating connections, especially secured ones, for each request. By default, all HTTPRequest commands use a basic agent that keeps connections alive. Still, users can create custom agents to fine-tune connections, control the keep-alive mechanism, set maximum concurrent connections, add timeouts, and configure TLS/SSL settings at the agent level.

 

Force Login Becomes Default for all REST Auth

4D 20 R6 introduces Force Login mode as the default behavior for controlling REST API access. This feature, implemented via the ds.authentify function, enhances security by requiring login credentials for API access. New projects automatically include a roles.json file with the forceLogin attribute set to True, denying access by default. Existing projects can convert to this mode using a new button in the Structure Settings dialog. This update simplifies the transition from legacy access control methods and allows for fine-grained access management using the Qodly Studio Roles and Privileges editor.

Components Interaction via Declared Namespaces

4D 20 R6 introduces a new approach: components with declared namespaces automatically share their classes with all other components within the same project. This eliminates the need for complex setups and allows you to freely use classes from other components directly in your code. 

Easy Reference Comparison of Objects & Collections

4D 20 R6 makes working with objects in your code much easier! It introduces new comparison operators (= and #) that let you quickly see if two objects are the same in memory. This is especially helpful when you’re dealing with object references.

Enhanced Session Storage Access

Previously, ensuring that users had the same experience across different parts of your application, such as a web app and a client/server app, was difficult. This is because information stored in one session wasn’t easily accessible to other sessions.

4D 20 R6 fixes this with a new command, Session storage by id. This command lets you access the storage of any session in your application, regardless of whether it’s a web session, a client/server session, or a mobile session.

This means you can now easily store information that needs to be shared across different parts of your application. For example, you could store a customer record in the session when a user logs in and then access that same record from both the web app and the client/server app.

Permissions: Inspect Session Privileges for Easy Debugging

4D 20 R6 strengthens security in your applications by giving you more control over user access to data!

One important way to protect your applications is to control what data users can access. 4D 20 R6 makes this easier with improved privilege management.

 

ORDA

No more Empty Spaces in Your Entity Selections

4D 20 R6 introduces a new clean() function for entity selections, eliminating the clutter of empty spaces after deleting entities. This enhances the user experience by keeping your interface clean and organized.

 

Code Editor

Customize Global Warnings Display

With new global warning controls, 4D 20 R6 makes it easier to focus on the most critical issues in your code. Warnings in your 4D code can help catch potential errors. They act like a safety net, letting you know about things that might cause problems later. However, with large or complex projects, you might get a lot of warnings.

This can be overwhelming and make it hard to focus on the most critical issues.

4D 20 R6 gives you more control over which warnings you see:

  • Global Warning Definitions: You can now define which warnings are displayed globally in the code editor and compiler dialog. This lets you hide warnings you know are irrelevant to your project or coding style.
  • More Flexibility: Even if a warning type is displayed or hidden according to the parameters set, it is still possible to activate and deactivate the checking of a warning type locally in the code using the legacy //%W+ and //%W- switches.

 

4D Write Pro 

Manage Empty Datasources

4D 20 R6 allows for more control over the appearance of tables in your documents, especially when the data they are linked to is empty. This is achieved through the new attribute wk empty datasource. This attribute defines how a table behaves when its linked datasource is empty, providing options to:

  • Show data row (default)
  • Hide the data row
  • Hide the entire table
  • Display a placeholder row

Web area

Custom Parameters for Initializing Embedded Web Area

4D 20 R6 makes it easier to customize the embedded web area in your applications! This area uses Chromium for browsing, and developers sometimes need to adjust how Chromium works.

Previously, this required complex code changes. Now, with 4D 20 R6, you can simply create a file named “4DCEFParameters.json” and specify the customizations you want in that file. This makes managing it much easier and ensures your customizations are applied correctly.

For example, this feature allows videos to play automatically in your web area, which wasn’t possible before.

 

4D Components

Integrate 4D components directly from GitHub

4D 20 R6 makes using components in your 4D projects even easier, especially if those components are stored on GitHub. Previously, you could only use the Component Manager with components stored on a local drive. Now, with 4D 20 R6, you can directly integrate components from GitHub repositories.

4D Netkit

Customizing OAuth 2.0 Connection Interface

4D 20 R6 gives you more control over how users log in with OAuth 2.0 in your application.

By default, OAuth 2.0 logins open a web browser window to display the login interface. But what if you want to customize that experience?

With 4D 20 R6, you can use the browserAutoOpen attribute to prevent a web browser window from automatically opening. This lets you display the login interface wherever you want in your application.

User Experience

Enhanced Scrolling Behavior in Subforms

4D 20 R6 makes working with subforms in your applications much smoother and more intuitive for users!

Have you ever gotten frustrated trying to scroll through a list in a subform, only to have the entire subform move instead? Or maybe you’ve attempted to scroll the subform, but the list box won’t budge?

4D 20 R6 fixes this with a new, improved subform scrolling behavior.

Want to know more? Read all the blog posts about 4D 20 R6