Détection de modification - champ non persisté

Bonjour,

Dans le initUpdate j’alimentais un attribut non persisté en base. Si j’enregistrais une ligne était créée dans l’historique.Alors que si je ferme il ne détectait pas de changement à raison (pas de confirmation pour quitter).

J’ai remarqué que c’était parce que je le faisais dans le code. En déplaçant son alimentation dans l’attribut lui même (expression calculée) je n’avais plus ce problème.

Dans ce cas j’ai pu le faire facilement (une seule requête) mais j’imagine que si le calcul est plus compliqué, le mettre dans l’expression calculée est peut être plus délicat.

Vous pouvez écrire des expressions complexes via une fonction auto-appelante:

(function() {
    // L'expression complexe ici
    return <resultat>;
})();

Et/ou vous pouvez aussi invoquer des méthodes de votre object dans votre expression…

Bonjour,
J’ai de nouveau le problème sur un 4.0.
Cette fois j’ai bien vérifié, aucune modification de champ effectuée dans le initUpdate.
Je ne sais pas dans quel sens chercher. Qu’est-ce qui pourrait influencer la détection d’une modification et donc la création d’un historique?

La création d’un record historique est d’abord conditionné par un appel à la méthode isHistoric de l’objet métier considéré.

La méthode par défaut vérifie juste la valeur du flag “Historique” du paramétrage de l’objet.

Ensuite ça boucle sur les attributs de l’objet qui existent aussi sur l’objet historique (exclusion faite des attributs techniques updated_dt et updated_by) et si un des attributs a changés (au sens de la méthode ObjectField.hasChanged()) l’historisation est effectuée.

Pour investiguer tracez les changements de vos attributs dans une surchage du isHistoric, genre:

	@Override
	public boolean isHistoric()
	{
		for (ObjectField f : getFields())
			AppLog.info(getClass(), "isHistoric", f.getInput() + " : " + f.hasChanged(), getGrant());
		return super.isHistoric();
	}

Et vérifiez les attributs définis sur l’objet historique correspondant

1 Like