Champs dans formulaires modifiés sans raison

Bonjour,

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 ?

Bonjour,

Il me faut un peu plus d’informations pour mieux comprendre la cause du problème.
Qu’entendez vous par :

La valeur de ce champ est similaire à celle dans un autre formulaire du même objet

Est-ce que ces deux attributs partagent la même colonne physique ?
Est-ce que cet attribut a une expression calculée dans son paramétrage ?

Merci,

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”)

Comment est renseigné votre champ “Date enregistrement” ?

Est-ce que dans votre code vous faites des update sql ou des valorisations en masse ?

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

ObjectDB monObjet= this;
		try {
			monObjet.resetFilters();
			monObjet.setFieldFilter("Champ Identifiant", nouvel Id);
			List<String[]> rows = monObjet.search();
	
			if (rows.size()==0) {
				// creation
				monObjet.setRowId(ObjectField.DEFAULT_ROW_ID);
				monObjet.setFieldValue("nomChamp1", valeur1);
                monObjet.setFieldValue("nomChamp2", valeur2);
                ...
                new BusinessObjectTool(monObjet).validateAndSave();
			    monObjet.resetFilters();
				
				
				
			}

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.

A quoi correspond l’objet personne ?
Je ne vois pas de create dans votre code.

Si vous créez l’objet personne appelez un personne.resetValues() avant les setFieldValue().

Personne correspond a monObject, désolé, je fait la modif.
Je vais essayer avec le resetValues(), merci.

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.

Un exemple facilement transposable à votre cas ici : Upsert.java · GitHub

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.

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