J’ai remarqué un bug assez embêtant.
Il y a des champs dans des formulaires qui se remplissent automatiquement, alors qu’il n’y a pas de code sensé le permettre (il n’y a aucun setFieldValue ou autre sur ce champ).
Sur cet exemple, le champ de commentaire “Observation interne” est rempli, alors que comme le montre l’historique des modifications, aucune modification n’a été faite sur ce formulaire (ce champ est bien vide par default, et n’a pas été modifié).
La valeur de ce champ est similaire à celle dans un autre formulaire du même objet, qui lui, avait été modifié manuellement (ces deux formulaires n’ont aucun lien entre eux).
Il y aurait une sorte de transfert de données aléatoire entre les différents formulaires.
Avez vous une solution ou une piste contre ce problème ?
Ps : Je ne sais pas à quel moment ce déclenche ce problème. Peut être qu’un utilisateur a des formulaires différents ouverts dans plusieurs onglet et qu’une seule sauvegarde modifie tout ?
Par valeur de champs similaire, je veux dire que dans cet exemple ci dessous, le champ “Date enregistrement” de la première ligne et celui de la deuxième ligne reprennent exactement la même valeur que le champ “Date enregistrement” de la troisième ligne.
Pourtant, ces 3 lignes ne sont indépendantes entre elles et sont crées à des moments différents.
A la création d’une ligne, le champ “Date enregistrement” n’est pas affecté donc est supposé vide. Dans cet exemple, seul le champ de la 3eme ligne à été rempli par un opérateur, les 2 autres sont sensé être encore vides vu que personne n’y a touché.
(Cet exemple est avec “Date d’enregistrement” mais c’est le même problème avec d’autre champs comme “Champ Observation”)
Non, il n’est renseigné que manuellement sur le formulaire :
Clique sur le champ, entrée de la valeur sur le clavier ou le calendrier, et bouton “Enregistrer” en haut de la page.
A noté que les champs problématiques ne sont pas settés à la création de la ligne.
Cette creation de ligne création se fait via du code.
Alors c’est probablement lors de la création de la ligne que les anciennes valeurs sont gardées.
A quel moment est-ce que ces lignes sont crées ?
Est-ce que lors de l’instanciation de votre ObjectDB vous appelez la fonction resetValues() ?
Des nouvelles lignes sont crées tous les jours automatiquement via un script.
Oui je pense aussi que des anciennes valeurs sont toujours en memoire sur la plateforme.
Voilà comment je créer mes nouvelles lignes, il y a un resetFilters mais pas de resetValues
Est ce que c’est fait de la bonne manière de faire ?
Le problème est que les champs qui ne sont pas settés ne sont pas vides ou nul, mais obtiennent une valeur aléatoire.
Pour ce genre de code, je vous conseille d’utiliser les méthodes du helper BusinessObjectTool typiquement les getForUpdate/getForCreate/getForUpsert (cf. BusinessObjectTool) qui font les reset values qui vont bien.
NB: Dans le versions récentes de Simplicité faires un myObj.getTool() sur votre objet plutôt que de multiplier les new BusinessObjectTool(myObj), surtout si vous êtes dans une boucle.