Probléme d'héritage de l'objet User

Tags: #<Tag:0x00007f491544b528>

Bonjour à tous,

Je voudrais créer des utilisateur pour mon application (ChefProjet), alors j’ai créer un BO ChefProjet qui hérite de User pointant sur la table m_user, et utilisant la template de User directement ->

  1. Sauf que quand j’essaie de créer un ChefProjet, je ne peux choisir aucun module ni la home page d’ailleurs :

  2. Je profite l’occasion de ce post, quelle est la meilleur méthode que vous conseiller pour cacher les champs non utilisé et aussi mettre des valeur par défaut sans les afficher (minimiser les manipulations pour l’utilisateur)

Je vous remercie d’avance,

Il faut faire hériter votre objet de SimpleUser pas de User, ce dernier est trop “vérouillé” et specifique pour être dérivé

Merci pour votre réponse, les champs sont toujours verrouillés même en héritage depuis SimpleUser

Dois je rendre “updatable” ces champs par du code spécifique ?
Merci

Oui sur un objet qui hérite de SimpleUser vous pouvez implémenter des hooks sans risque d’impacter ceux de User.

Voici un exemple de code pour un “user simplifié”: Example of a simplified user object's code · GitHub

Notez bien l’appel systématique aux super. dans tous les hooks

Vous pouvez masquer les champs en surchargeant les attributs d’objet dans votre héritier, ou par code au postLoad via la visibilité des champs setVisibility.

public void postLoad() {
  super.postLoad();
  getField("row_module_id").setVisibility(ObjectField.VIS_HIDDEN);
}

Il faut que votre code Java hérite de SimpleUser (objet simplifié avec uniquement les champs requis par la plateforme et sans mise en forme) ou User (objet complet déjà mis en forme et plus compliqué à surcharger), et pas de ObjectDB sinon il n’aura pas les comportements des hooks natifs. Et donc bien penser à appeler les méthodes “super”, pour ne pas overrider totalement les hooks qui font des choses (générer un mot de passe, envoyer un email d’activation…).

Ensuite pour valoriser un champs, il suffit de forcer des valeurs / faire des setValue au preValidate/initCreate/initCopy par exemple.

public void initCreate() {
  super.initCreate();
  getField("row_module_id").setValue(ModuleDB.getModuleId("ApplicationUsers"));
  getField("usr_home_id").setValue(View.getViewId("MyHomeView"));
}

Sinon il faut donner un droit de lecture sur Module et View à votre groupe pour avoir la possibilité de sélectionner une référence.
.