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 theserver.compiler
JVM argument (true
by default) which is driven by theCOMPILER
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
optionShow 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:
- Server side:
ServerSideEvent.push("myEvent", new JSONObject().put("info","hello"), userId);
userId: null to notify all registered clients or a specific user.
- 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 SSEclose
: close the SSE connectionreset
: reopen the SSE connectionsysparam
: new system parameter flag to push changes fromgrant.setParameter("MYPARAM","value")
to client in$ui.sysparams.MYPARAM="value"
objparam
: push an object parameter to UI inobj.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-sideservice
hook
- Set metadata
Floating date search
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 associatedping
hook - Added optional
/health
operation (using"health": true|false
in configuration,false
by default for backward compatibility) with associatedhealth
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) responsesPDFTool.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
}
Fixes
Nothing so far...