Bonjour,

Nouvelle release, nouvelle newsletter pour les développeurs Simplicité !

Pour votre information, la plateforme Simplicité version 4.0 P24 Release Candidate a été mise à disposition sur la branche Git pré-version du template et comme image beta Docker.

Si aucune question et/ou blocage n’est soulevé d’ici fin novembre 2019, cette version sera considérée comme la version P24 release.

Merci par avance pour votre aide dans le processus final de validation de cette version.

Si vous le souhaitez, vous pouvez vous astreindre de lire cet email et cliquer directement sur le bouton ci-dessous pour (re)voir le webinaire qui présente toutes les nouveautés.

Bonne lecture !

Points d’attention de cette nouvelle version ?

(Open)JDK

À partir de ce niveau de patch (24), la plate-forme est compilée avec l’OpenJDK 12 actuel forcé en mode de compatibilité JDK 1.8. Ceci est nécessaire car certaines dépendances ne sont plus compilées avec un JDK 1.8 (par exemple Docx4J).

Cela signifie que le (Open)JDK recommandé pour exécuter la plate-forme est maintenant un (Open)JDK 12 ou plus récent.

Cependant, étant compilé en mode de compatibilité JDK 1.8, la plate-forme prête à l’emploi fonctionnera toujours sur un JDK 1.8 (Open).

Mais si, dans votre code custom, vous utilisez l’une des bibliothèques tierces optionnelles qui nécessite un JDK (ouvert) plus récent, l’utilisation d’un JDK (ouvert) 1.8 ne sera plus adaptée.

Une variante “légère” de la plate-forme est également fournie, à l’exclusion de certaines bibliothèques tierces :

– Docx4J
– Tika
– JClouds
– Bibliothèques de l’API Google

Cette variante “light” est entièrement compatible JDK 8.

Note : Toutes nos images Docker sont maintenant livrées avec un OpenJDK 12

jQuery

La version de jQuery® est maintenant une version 3.4.1 (c’était une version 2.2.4 jusqu’en P23).

Selon la façon dont vous avez écrit votre code custom côté client, il se peut que des changements soient nécessaires en raison de certains suppressions d’obsolescence dans jQuery 3, consultez le Guide de mise à niveau de jQuery 3 pour plus de détails.

Compatibility breaking changes

Les changements suivants nécessitent votre attention et peuvent nécessiter un remaniement de votre custom code.

  • Suppression des anciennes pages JSPs. Assurez-vous de refactoriser toutes les URL codées en dur impliquant ces anciennes pages JSP dans votre code et/ou votre configuration. (notez que vous devriez de toute façon éviter les URLs codées en dur).
  • Refonte des clauses de rejets. Pour des raisons de qualité de code, les clauses d’exception trop génériques de certaines API publiques de Simplicité ont été remplacées par des clauses de lancement utilisant des sous-classes d’exception (par exemple, PlatformException ou IOException). Dans certains cas particuliers, le compilateur Java peut se plaindre de l’incohérence des clauses de lancement de vos méthodes dérogatoires.

Interface utilisateur quoi de neuf ?

  • Possibilité d’utiliser une version light (sans les clients Docx4j, Tika, Google APIs, JCoulds, ….)
  • Mise à jour des librairies tiers (y compris sur les composants majeurs : Rhino, HSQLDB, Apache POI, Docx4J, ….)
  • Ajout de la visibilité du fournisseur d’authentification sur la page de choix du fournisseur (en utilisant “visible”: <true|false> dans les entrées AUTH_PROVIDERS)
  • Amélioration du référentiel Maven pour ajouter la dépendance Javadoc de Simplicité aux modules Java validés
  • Héritage de listes liées
  • Nouvel historique des sessions dans le menu operation
    • persister par utilisateur les dates/durée des sessions et les droits de l’utilisateur
    • pour remplacer les logs précédents SESSION et l’objet AppLoggerLogon
    • la dernière date de session est maintenant stockée dans m_user (pour rechercher un utilisateur inactif depuis longtemps)
    • voir paramètre système LOG_SESSION

  • La propriété History a été modifiée pour tracer les mises à jour :
    • dans la table miroir de l’objet
    • à travers les posts sociaux de l’objet
    • dans le nouveau stockage redolog (m_redolog et/ou log4j)
  • Nouveau stockage RedoLog :
    • tracer les actions des objets dans les sessions
    • limité aux objets ayant la propriété historique
    • voir paramètre système LOG_ACTIVITY

  • Ajout des propriétés de l’unité sur l’axe du tableau croisé :
    • Facteur d’échelle : pour multiplier/diviser les valeurs des axes (ex : convertir les secondes en heures, ko en Mo…)
    • Fonction de l’unité : arrondir, graduer, diviser, diviser, sqrt, log10… pour changer l’échelle principale de l’axe.
    • L’étiquette de l’unité doit être affichée sur le graphique lorsque l’échelle a changé.
  • Permet de rechercher un document par nom de fichier et d’afficher le nom du document dans la liste.
  • Ajout de nombreuses icônes d’objets système
  • Ajout de noms d’attributs de remplissage automatique dans l’éditeur de modèles
  • Ajout de [OBJECTICON :] expression pour les champs d’icônes des zones de champs
  • Ajout de l’action Reorder fields pour déclencher le réordonnancement automatique des champs.
  • Ajout de l’indexation des champs hérités appartenant à l’objet indexable
  • getParentObjectRefField est maintenant évalué dans CONTEXT_REFSELECT, CONTEXT_DATAMAP et CONTEXT_ASSOCIATE
  • Ajout de l’héritage des datamaps
  • Préférences de l’utilisateur :
    • Ajout du format de date pour remplacer le format par défaut déterminé par la langue de l’utilisateur.
    • Ajout du fuseau horaire pour traduire toutes les dates sur l’interface utilisateur
    • Ajouté le format de date DD.MM.YYYY pour nos amis suisses
    • Prise en charge de la syntaxe URI pour l’accès aux scopes. Ex : /ui/scope/MyHome est le même que /ui?scope=MyHome
  • Génère un skeleton à la création de la ressource SCRIPT de l’objet de gestion
  • Zone avec spécification de tri :
    • Aucun : pas d’accès de commande sur l’interface utilisateur (nouveau !)
    • Code : tri basé sur la valeur de la BD (par défaut)
    • Valeur : trier par étiquette des codes enum (dans la langue de l’utilisateur)
    • Ordre : trier par ordre de codes d’énumération

  • Ajout de la prise en charge de Gradle® avec les modules Apache Maven® pour Java (jusqu’à présent, seul Apache Maven® était supporté).
  • Ajout de sous-domaines avec ordre dans le menu.

  • Nouvelle monnaie : Rendu en francs suisses CHF et exportation vers Excel.
  • La touche de fonction Composite de l’objet interne avec champ « nullable » est maintenant supportée.
  • Les textes courts ont été augmentés pour supporter 4000 caractères (auparavant 255 en raison des limitations de l’ancien moteur MySQL).
  • Autorisations Google Drive avec notifications configurables par e-mail
  • L’action du module d’exportation des données exporte maintenant un data set.
  • Les exportations de modules incluent maintenant des ensembles de données.
  • Exportations et importations de formats standard JSON et YAML (ainsi que le format XML standard).
  • L’action avec l’URL comme javascript permet d’accéder aux app, obj et grant en portée. Exemple :

javascript:debugger; alert(“param=” + app.sysparams.MY_PARAM + ” value=” + obj.getFieldValue(“myObjectField”) + ” login=” + grant.login)`

Les changements du “coeur” de la plateforme

  • UserFilters permet un filtrage global par utilisateur pour travailler avec des données limitées sur l’interface utilisateur :
    • Filtres disponibles :
      • valeur fixe dans la recherche et la création de champs
      • référence d’objet fixe dans la recherche et la création
      • dates de travail : filtrage par période pour les objets ayant une plage de dates (une date de fin liée à une zone de date de début)
    • Les filtres actifs/visibles dépendent de la portée actuelle de l’utilisateur.
    • Les filtres peuvent être mis à jour ou non : forcés par l’administrateur ou le public aux utilisateurs
    • Des filtres peuvent être nécessaires
    • UserFilters est un objet métier à compléter par le concepteur :
      • pour ajouter des champs et des références d’objets avec des règles de champs d’objets (modifiables, visibles…)
      • personnaliser le modèle d’interface utilisateur
      • ajouter des actions spécifiques pour appliquer des filtres prédéfinis (par ex. “semaine suivante”)
      • accordé aux groupes comme d’habitude
    • Accessors getGrant().getUserFilters()

Nouveau regroupement de dates sur le tableau croisé :

  • Valeurs de groupe par plage de dates : année, semestre, 4 mois, trimestre, mois, semaine, jour, jour, heure
  • Ne s’applique qu’aux champs de date et d’heure

  • Nouvelles métriques de sessions :
    • Durée de travail par utilisateur et par scope
    • Durée du travail par date et par scope

  • La liste d’objets peut afficher les noms des documents au lieu de simples icônes doc (voir le nouveau champ de rendu sur le document).
  • initRefSelect est maintenant appelé sur le rendu du pillbox
  • Nouveau dialogue modal en cas de perte du service (i.e. pas d’internet, serveur en panne…) au lieu de l’ancienne alerte HTTP 0 :

Les préférences de menu de l’utilisateur ont été implémentées sur l’interface utilisateur sensible (voir le panneau Interface du formulaire Utilisateur) :

  • Menu visible (usr_menu) : false pour supprimer le menu de gauche
  • Menu réduit par défaut (usr_menu_deflelapsed) : true pour minimiser le menu à gauch
  • Domaine ouvert par défaut (usr_menu_defdomain_id) : pour définir le menu accordéon ouvert par défaut au démarrage
  • Le menu masqué par défaut (usr_menu_defhidden) est obsolète et supprimé de l’interface utilisateur.
  • Nouvelles fonctionnalités de Docked TreeView :

Actions : fermer, recharger, réduire et développer l’arborescence

  • Afficher/masquer les niveaux de liste avec les compteurs
  • Rendu d’objets avec de nouveaux crochets getStyleTree et getImageTree
  • et le hook getUserKeyLabel peut retourner du contenu HTML riche
  • Historique persistant pour accéder aux arbres précédemment ouverts, stockés dans le paramètre utilisateur TREEVIEW_PREFS

Les liens virtuels sont pris en charge dans les arbres :

  • utilisé comme objet réflexif affiché dans une table
  • utilisé dans une hiérarchie d’arborescence

  • Action avec champ de confirmation : la valeur par défaut est maintenant supportée
  • Optimisation du cache du navigateur :
    • environ 100ko transférés lors du chargement de l’interface utilisateur (à l’exclusion de la page d’accueil, principalement pour obtenir les droits et préférences de l’utilisateur)
    • par rapport à la 1.6Mo précédente qui sera mise en cache une fois (après chaque révision de plate-forme ou de module ou valeur CACHE_MAXAGE)
    • CACHE_MAXAGE a été modifié à 15 jours par défaut pour les ressources statiques
  • Direct access to list a été refactorisé en Search mode pour définir le positionnement par défaut de la recherche :
    • Masqué : le formulaire de recherche est masqué par défaut (utilisez le bouton de recherche)
    • Colonne : les filtres sont affichés sur chaque colonne interrogeable.
    • Docked : le formulaire de recherche est ancré sur le côté gauche de la liste.
    • Dialogue : la recherche s’ouvre dans une fenêtre popup à droite de l’écran.

  • Refonte de la page d’inscription
  • Refonte de la page de gestion du référentiel Git des modules
  • Ajout d’un rendu de la date et de l’heure pour travailler avec une date simplifiée sur l’interface utilisateur (ex : mois ou année) ou une heure (ex : sans secondes)
  • USE_DOC_PREVIEW=no est maintenant disponible pour masquer l’aperçu du document (téléchargement direct sur la liste)
  • Ajouter le badge de compteur lorsqu’une liste enfant est déplacée dans un onglet de formulaire
  • Nouvelles fonctions pour personnaliser le rendu des filtres utilisateur :
    • $ui.view.prefs.userFiltersTitle : pour remplacer la barre d’en-tête complète
    • $ui.view.prefs.userFiltersBadge : pour remplacer chaque rendu de badge
  • Nouvelle fonction $ui.detachURL(ctn,url,options)
    • pour ouvrir une nouvelle fenêtre avec le moteur d’interface utilisateur
    • avec ou sans pièces principales (menu, en-tête…)
    • pour détacher l’URL (objet externe…) de la page principale
    • utile sur un bureau multi-écrans
  • Nouvelles fonctions de menu miniaturisées :
    • bouton basculer dans les icônes d’en-tête et d’objet
    • préserver les sous-menus ouverts et le défilement vertical
    • l’ancien bouton basculant (en bas) a été supprimé pour prendre en charge le redimensionnement en survol

Confirmer le dialogue sur Action

  • hook initAction pour préparer les champs d’action avant le rendering
  • width du dialogue en fonction de la taille du gabarit de la div supérieure

Dialogue de recherche :

  • Grouper les champs par zones
  • Nouvelle aide à la recherche sur les champs texte/numérique :
    • des règles simples : starts with, contains, lower or equals than…
    • joindre des règles avec and or

Rechercher des références d’objets :

  • par valeurs : permet de rechercher sur tous les champs référencés (user-key, wildcard, partial key…)
  • par Id (nouveau) : recherche une seule référence avec l’icône cible (join by row_id)

Nouveau modèle global de rendu de liste :

  • Pour afficher le nombre de notices et le numéro de page actuel dans le titre et le pied de page
  • Pour permettre un nouveau placement des boutons de pied de page par défaut, la barre de navigation….
  • Voir le modèle de liste Simplicite.UI.Globals.list.template

Editeur de modèle d’objet hérité :

  • Préserver les zones parentales (bordure beige) : aucune modification n’est autorisée dans les modèles hérités.
  • Les champs hérités (bordure en pointillés) peuvent être déplacés dans des zones enfant.

  • L’éditeur de modèle permet de cacher des zones (ajoute la classe hidden à div)
  • Nouveau rendu GRID pour les champs de texte long : affiche un tableau json 2D dans une table éditable.
  • Couleurs et icônes sur la liste des valeurs :
    • pour remplacer le style de champ de chaque code d’énumération
    • utilisation d’étiquettes et/ou d’icônes colorées, de listes, de formulaires, de plateaux
    • sont rendus avec le control select2 (voir https://select2.org)
    • Prochainement : tableau croisé, boutons de transition….

• Prévisualisez la hiérarchie de l’arborescence sur le formulaire principal :

  • Notification avec objet cible caché (Desktop/Androïd/iOS)
    • Envoi à travers les données personnalisées du message FCM (ex : Vous devez signer une nouvelle commande !)
    • Ouvrir l’objet désiré sur ok/tap (ex : le bon de commande)
    • $ui.onMessageReceived(msg) peut être remplacé pour des comportements spécifiques
    • Le formulaire d’envoi a été libéré pour sélectionner tout objet accessible par le Social user

Corrections de bugs

Voir fin de la release note