Erreur sur champ "fantôme" dans les logs

Request description

Bonjour,

Nous avons depuis quelques temps une erreur qui revient dans les logs.
Elle survient au moment d’un getCount().

long nb = linkedObj.getCount();

Cela n’a pas l’air d’avoir de conséquences concrêtes donc ce ticket n’est pas urgent, mais je n’arrive pas à voir d’où vient le problème.

ECORED0001|system|com.simplicite.util.engine.ObjectManager|makeFrom||Error Configuration error RciDomBceApp: unable to find the parent field of rciDomfctappAppId.rciAppIsBackup

Pour information, nous avons bien un Object Field rciDomfctappAppId mais il est sur un autre objet ( RciDomFctApp et pas RciDomBceApp).
J’ai essayé de supprimer et recréer la classe, redémarrer Tomcat sans succès.
Je sèche un peu !

Merci d’avance pour vos pistes éventuelles !
Emmanuelle

[Platform]
Status=OK
Version=6.2.18
BuiltOn=2025-10-31 21:07

Cette log, remontée au makeFrom des “outer join”, indique qu’une jointure ne pourra pas se faire si le champ ramené est orphelin. Ce n’est donc pas sans conséquence (pas de jointure = produit cartésien)

ObjectField f = obj.getField("rciDomfctappAppId.rciAppIsBackup");
f.getParentField(); // null
obj.getRefField(f); // null

Bref il faut revoir la définition de l’objet.

Non, une foreign-key doit être par définition dans la table du champ ramené.

1 Like

J’ai trouvé la source de l’erreur, elle vient de obf_ref_field_id et non obf_joined_id.obf_field_id.
C’est un champ d’ObjectField qui est en invisible donc je ne l’ai vu qu’en exportant l’XML de mon objet. En le mettant visible temporairement, je vois qu’il n’est pas bon.

J’avais copié cet Object Field à partir d’un autre objet pour gagner du temps, et je n’ai modifié que les valeurs visibles. Ce champ a gardé la valeur de son ObjectField source.

Je vais voir si j’ai d’autres cas du genre, je pense que oui car je pratique beaucoup la copie :sweat_smile:

EDIT : je n’arrive pas à corriger, car quand je clique sur la loupe, on ne me propose que des ObjectField de l’objet lié …

Bonjour Emmanuelle,

Le champ obf_ref_field_id est effectivement masqué car contraint par des règles compliquées de compatibilité ascendante avec le nouveau champ reflexif obj_joined_id sensé le remplacer à terme.

A date jusqu’en V6 :

  • obf_ref_field_id sert toujours au chargement des champs référencés en cache, et peut être spécifié dans les “vieux” modules XML
  • obj_joined_id sert à la UI pour filtrer le choix des champs de l’objet référencé et à afficher un arbre dans le panel des attributs, et pour importer les modules “récents”.

On va retirer le propriété copiable de obf_ref_field_id afin de forcer le recalcul au save en fonction de l’autre.

En attendant, supprime et recrée ces attributs d’objet.

1 Like

Bonjour François,

J’ai pu identifier les champs avec cette requête

left join m_objfield obf2 on (obf1.obf_joined_id = obf2.row_id)
where obf1.obf_ref_field_id <> obf2.obf_field_id

et en mettant temporairement le refField visible, un remove suivi d’un save l’a recalculé correctement.

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.