Skip to main content

Version 6.3 release note

Warning: This release note corresponds to a future minor version which is still in ALPHA stage and thus in active development.
ALPHA stage means it is absolutely not yet suitable for production

Technical documentation

All the technical documentation is available from the platform website, in particular:

Compatibility breaking changes

Development mode

Some development-oriented features are now only available when the instance is started in "development mode" (which is enabled by passing the platform.devmode=true JVM argument or by setting the DEV_MODE environment variable in the Docker containers):

  • the devinfo APIs (used by our VSCode plugin)
  • the /maven embedded Maven repository

As a reminder, this was already the case for the Java code formatting which requires some additional JVM capabilities to be enabled.

Deprecations

Deprecated features to be removed in the next releases

JDK -> ECJ compiler

ECJ compiler

The platform now uses the Eclipse Java Compiler (ECJ) instead of the JDK compiler.

This is transparent and more efficient. It also allows to deploy the platform on a JRE instead of a JDK keeping Java custom code compilation possible.

Reminder: Java compilation can be explicitly enabled or disabled (true by default) using the server.compiler JVM argument (true by default) which is driven by the COMPILER environment variable in our Docker images.

The compiler options can be customized if needed using the JAVA_COMPILER_OPTIONS system parameter which is provided as -g -warn:unused,deprecation in order to make more visible (as warnings) all deprecated usages and unused variables/methods in the custom code (not that compilation warnings are non blocking but should be fixed).

The list of possible compiler options are described in the Eclipse documentation.

Features

New features for the end-user

Nothing so far...

Enhancements

Features enhancements for the end-user

Child objects change logs

Retrieve redo logs of child object into the parent Change log panel

  • new Link option Show change logs
  • or by code getLink("DemoProduct","demoPrdSupId").setMergeRedologs(true)

Example: Product updates are visible in the Supplier Change log panel

Maker Experience

Features enhancements for the designer

Improved annotations

All annotations now include a desc attribute that can be used to document the related class/method. New annotations have also been added to annotate the business and external objects' hooks.

Mermaid widget

A new configurable external object allows to display Mermaid charts.

E.g.

"Go to definition" generalization

New contextual buttons to go to the component's definition, available for:

  • View
  • Crosstab
  • Activity
  • Timesheet
  • TreeView
  • External object

Technical

Technical enhancements and features

Server side events

New servlet /ui/sse (asynchronous) to push messages from server to clients thru https

Example to bind a myEvent message:

  1. Server side:
ServerSideEvent.push("myEvent", new JSONObject().put("info","hello"), userId);

userId: null to notify all registered clients or a specific user.

  1. Client side: simply add an event listener on ui.ready
$ui.sse.addEventListener("myEvent", e => {
let d = JSON.parse(e.data);
console.log("myEvent message: " + d.info + " at time = " + d.time);
});

Predefined server side events:

  • ping: simple ping thru SSE
  • close: close the SSE connection
  • reset: reopen the SSE connection
  • sysparam: new system parameter flag to push changes from grant.setParameter("MYPARAM","value") to client in $ui.sysparams.MYPARAM="value"
  • objparam: push an object parameter to UI in obj.locals.MYPARAM
  • enumCounters: refresh counters in menu when enum or status has changed during save

Improvements on external objects

  • Improved JS class Simplicite.UI.ExternalObject:
    • Set metadata (name, id, URL) + business object context if any
    • Added getResourceURL function to get URL of external object's resources
    • Added service function to call server-side service hook

New filter syntax with offset on date or datetime from today's date.

  • [DATE<:offset>]
  • [DATETIME<:offset>]
  • offset = a signed number with unit ('y'ears, 'm'onths, 'w'eeks, 'dw' days no week-end, 'd'ays, 'h'ours, 'm'inutes, 's'econds, 'ms')

Examples

// last 3 months
fieldDate.setFilter(">=[DATE:-3m]");
// in next 15 days
fieldDate.setFilter(">=[DATE] and <=[DATE:15d]");
// before next 12 hours
fieldDatetime.setFilter("<[DATETIME:+12h]");

This syntax can be used in predef-search of views/home page.

Custom health check

Added a new customHealthCheck platform hook for custom health check, e.g.:

@Override
public void customHealthCheck(HttpServletRequest request, HttpServletResponse response, boolean minimal) throws Exception {
AppLog.info("Custom health check called from " + request.getRemoteAddr());

ServletTool.success(request, response, new JSONObject()
.put("status", "OK")
.put("date", Tool.toDatetime(new Date())));
}

Improved OpenAPI/Swagger schemas

The OpenAPI/Swagger schemas of generic APIs have been improved to comply with stricter compliance rules:

  • Added missing descriptions on definitions (business objects, errors, ...).
  • Added missing maxLength constraints for string type attributes in OpenAPI schemas

Improved mapped API external object configuration

  • Added generic mapping capabilities with case conversions, e.g.
{
"name": "My mapped API",
"objects": [ "DemoSupplier", "DemoProduct" ], // or "modules": [ "Demo" ]
"objectsCase": "pascal",
"fieldsCase": "snake",
"pathsCase": "kebab"
}
  • Made /ping operation optional (using "ping": true|false in configuration, true by default for backward compatibility) and added associated ping hook
  • Added optional /health operation (using "health": true|false in configuration, false by default for backward compatibility) with associated health hook

Added restrictions in development mode only

Some features are now restricted to development mode only.

This development mode is enabled by the server.devmode=true|false JVM argument (positioned by the DEV_MODE environment variable in Docker containers)

  • devinfo services (e.g. used by VSCode plugin) are now only accessible in this mode

Changed scope of helper methods

The ObjectCore.(re)setAllFields* helper methods used to iterate on all fields except technical fields (row ID and timestamp fields).

This is an issue in v6 where the characteristics of referenced fields may have an influence on the object behavior (e.g. setting them updatable means the referenced record can be updated from the referring object).

These referenced fields are thus now also ignored in these helper methods.

Major version check at module import

A module exported from a higher major version for the platform (e.g. from the future major version 7) will now be refused for import as it may cause unexpected results.

Importing modules exported from lower major version is still supported.

New front hooks beforeSave and afterSave

Simplicite.UI.BusinessObject contains 2 new hooks:

/**
* Front hook before calling Ajax object.save()
* @param ctn Form container
* @param obj Object (same as this)
* @param index record index (edit list)
* @param cbk callback(true|false) (must return 'true' to continue or 'false' to stop/reject promise)
*/
beforeSave(ctn, obj, index, cbk) {
cbk && cbk(true);
}

/**
* Front hook after calling Ajax object.save()
* @param ctn Form container
* @param obj Object (same as this)
* @param index record index (edit list)
* @param cbk callback(true|false) (must return 'true' to continue or 'false' to stop/reject promise)
*/
afterSave(ctn, obj, index, cbk) {
cbk && cbk(true);
}

NB: previous hooks form.beforesave and form.beforesave are still available but it is recommended to use the class BusinessObject.

Mail service configuration

It is now possible to override the MAIL_SERVICE system param by a same name environment variable (or the equivalent mail.service JVM property)

It is also now possible ti use YAML syntax instead of JSOn for this configuration.

Maven skip tests

The skipTests Maven property is now set by default in the pom.xml files of the module. The reason is that in the great majority of cases the unit tests are supposed to be processed within a live Simplicité instance, not locally.

It it however possible to change this behavior by explicitly setting the "skipTests": false in the "maven: {...}" block of the module's settings. In this case you should be able to launch unit tests locally if non of them need to be processed within a live Simplicité instance.

Improvements of the generic OpenIDConnect provider

The additional authorize URL parameters acr_values and prompt parameters are now supported in the AUTH_PROVIDERS system parameter.

The nonce string used by the protocol has also been increased with some additional randomness.

New configuration items

  • Added [ROOT], [URL] and [ENV:<environment variable name>[:<default value>]] tokens in expressions

New helper methods

  • ServletTool.success(request, response, JSONObject) for success (HTTP code 200) responses
  • PDFTool.getText(File|bute[]) to extract raw text content of a PDF document

Others

  • The tesseract.js JS lib has been integrated to provide with basic client-side OCR
  • Added implicit rewrite from */ to */index.html in static contents

Images in excel exports

An experimental feature allows to include images in excel exports, although it comes with the following limitations:

  • image anchoring does not work as expected (images don't follow the lines/columns when reordering)
  • images adapt to default row size, which is quite small
  • it can severely affect the exported file size, so image inclusion will be made optional in the future

In the meantime, it can be activated through the system parameter FEATURE_FLAGS

{
"images_in_excel_exports": true
}

alt

Fixes

Nothing so far...