Création d'un objet : champs ramenés d'objets liés nécéssaires

Tags: #<Tag:0x00007f9e504215f8>

J’ai une liaison 1…n : Jeune-- -> Absence.

Lorsque je créé une absence dans le code Java, je renseigne le row_id du jeune, mais j’ai l’impression qu’il me réclame les champs ramenés également ( Nom/prenom Jeune par exemple):
com.simplicite.util.exceptions.ValidateException: ERR_REQUIRED: Jeune| Jeune Nom

ObjectDB absence = this.getGrant().getTmpObject("NamAbsence");
                        absence.getField("namAbsDate").setValue(current.toString());
                        absence.getField("namAbsJenId").setValue(idJeune);
                        absence.getField("namAbsTypabId").setValue(idTypeAbsence);
                        absence.getField("namAbsGroupId").setValue(groupId);
                        new BusinessObjectTool(absence).validateAndSave();

Comment se fait-il qu’il me demande de renseigner les champs ramenés, la FK ne devrait-elle pas suffire ?

Non la FK suffit dans un contexte comme celui là, les attributs ramenés par jointeur ne sont pas requis.

Le seul cas où il est éventuellement nécessaire de les valoriser (manuellement ou via un populate explicite) c’est s’il y a du code dans votre objet NamAbsence qui les exploite (genre dans un pre/postValidate/Create/Update/Delete)

A mon avis votre variable idJeune est juste vide à cet endroit du code

Merci, absence.populate(true) avant la création à réglé le problème.

OK mais ça ne devrait pas être nécessaire, sauf dans le cas indiqué = si le code de l’objet que vous manipulez a besoin de ces champs ramenés pour faire je ne sais quoi. Si le code de votre objet n’exploite pas l’attribut ramené “nom” alors il n’y a absolument aucun besoin de ce populate.

Il y a donc forcément quelque chose au niveau de votre paramétrage ou votre code qui induit ce pb = vous avez peut être surchargé statiquement le caractère obligatoire/facultatif de l’attribut ramené au niveau de l’objet field ou dynamiquement via du code ou une contrainte ou dans le genre

S’agissant d’une FK le caractère obligatoire/facultatif ne doit être forcé que sur la FK, jamais sur les attributs ramenés.

Et au passage j’attire votre attention sur un sujet qui revient souvent : FK obligatoire => inner join, FK facultative => outer join. Quand on joue dynamiquement sur le caractère facultatif/obligatoire d’une FK il faut être extrêmement vigilant sur ce qu’on fait au risque d’avoir des comportements “étranges” en apparence (genre des records qui deviennent invisibles “aléatoirement”) mais qui s’expliquent très bien quand on a compris le inner vs outer join. Cf. Le count d'objets affichés n'est pas identique à ceux en base