Création d'un écran simplifié basé sur un objet existant qui a un écran complexe

Bonjour,

Je voudrais savoir s’il y avait une solution pour créer un objet light basé sur un objet complet son avoir à dupliquer le tout. Le but étant de créer des écrans simples là où les écrans sont devenus trop chargés.

Je m’explique, nous avons un objet ImmoProperty qui possède plusieurs d’onglets (zones d’attributs) avec souvent des onglets ou attributs non essentiels pour tout le monde.

Nous souhaitons donc créer un objet ImmoPropertyLight en regroupent les attributs essentiels dans un seul onglet, tout en conservant dans cet objet Light le paramétrage et les données de l’objet complet. Comme si l’objet Light était un hérité de l’objet complet (code hérité de).

La version complète sera réservée aux experts et la version light sera proposé aux autres.

Le paramétrage se fera uniquement au niveau de la version complète, mais l’objet light sera aussi impacté par ces modifs.

Les données seront présentes dans les 2 à l’identique, une modif d’un record dans l’un est visible dans l’autre.

Je ne peux pas utiliser les contraintes de visibilités car les attributs essentiels sont dans des zones d’attributs différents. L’idéal aurait été que je puisse créer une nouvelle zone d’attributs dans l’objet complet, en regroupant dedans une « duplication » de tous mes attributs essentiels. Dans ce cas, je pourrais utiliser la contrainte de visibilité au niveau des zones d’attributs pour afficher la zone essentielle uniquement ou tous les autres (sauf l’essentiel) en fonction du profil de la personne connectée, mais quand j’essaie de « dupliquer » un attribut dans un autre onglet en passant par l’éditeur, je n’y arrive pas (avoir le même attribut dans 2 onglets différents) sauf si je le duplique en nouvel attribut non consistant.

J’espère que ma demande est claire.

Merci d’avance pour votre retour.

Abed

En général on fait l’inverse.

  • Objet simple avec la clé fonctionnelle et les infos principales / règles de base pour les utilisateurs simples
  • Qui hérite dans un objet plus complexe pour les accès administrateurs : on ajoute des champs et des zones

Sinon, si le fils doit “simplifier” le père :

  • Les contraintes ne permettent pas de modifier les Area, juste les visiblités Area/Field.
  • Il faut nécessairement créer de nouvelles zones dans l’objet hérité et y déplacer les champs
  • Et rendre invisible les autres zones
  • Pas besoin de masquer tous leurs champs, sauf s’ils ne doivent pas du tout être remontés en front ( forbidden/interdit)

Et on ne change pas tout l’objet, sinon autant créer un autre objet sur la même table mais sans lien d’héritage de paramétrage (dans l’idée c’est plus couteux d’annuler ce que fait le père, que de repartir d’une feuille blanche).

En Rhino l’héritage n’est pas supporté (c’est Simplciité qui sait appeler tous les hooks parent … enfants, mais il faut bien comprendre le mécanisme et ses limites), alors qu’en Java c’est natif !

Dernier point : vous allez aussi devoir gérer la navigation entre ces 2 objets : getTargetObject, nouveau bouton Create pour changer d’objet en fonction des droits… un enfer

Au final mon conseil :

Rester sur votre gros objet et au postLoad en fonction des droits de l’utilisateur changez la définition de votre objet. Par code on peut déplacer des champs de zones, tout masquer…

Merci @Francois pour ce retour.
Une dernière question svp, pourriez-vous me donner les commandes à utiliser dans le postLoad :

  • Pour déplacer un champ d’une zone A vers une zone B.
  • Pour masquer une zone
  • Pour masquer un champ

Dans le cas d’un déplacement entre zones, comment c’est géré l’emplacement du champ dans la zone cible ? (en haut, en bas, à côté de tel ou tel champ existant…)

Merci d’avance.
Abed.

Tout le paramétrage est monté en mémoire donc modifiable par API java.

ObjectField f = obj.getField("myField");`
f.setVisibility(ObjectField.VIS_HIDDEN); // | VIS_BOTH | VIS_FORM | VIS_LIST | VIS_FORBIDDEN
FialdArea fa = obj.getFieldArea("areaName");
fa.setVisible(false); // hide the zone
fa.removeField(f);   // remove field from zone
fa.addField(f);      // add a field to zone

Par défaut un champ non mappé dans le template de l’objet ou d’une zone est ajouté à la fin de sa zone.

Pour changer l’affichage, il faut modifier le template HTML de la zone, en ajoutant des champs ou en changeant toute la définition :

String html = fa.getUITemplate(); // as designed
fa.setUITemplate(html + "<div class=\"field\" data-field=\"myField\"/></div>")

cf javadoc de Field et FieldArea.