Historisation d'un objet qui se fait sans le changement d'un objet commun

4.0
Historisation d'un objet qui se fait sans le changement d'un objet commun
0
Tags: #<Tag:0x00007f4a087dcf40>

#1

Bonjour,

Je souhaite historiser l’objet “Locataire”, je ne garde en champs commun que le statut :

Donc le seul déclencheur de cette historisation est censée être le changement de statut.

Ecran%20Locataire%201

Pourtant, quand je change la PP ou la PM, en conservant le même statut, il historise quand même !

Ecran%20Locataire%202

La valeur du statut est vidé lors de ce changement de PP ou PM :

J’ai aussi essayé d’ajouter isHistoric dans l’editor de code, le résultat est le même.

Pour info, dans l’editor de code, nous avons cette postSelect :

// Calcul de l'anciennté d'un locataire, on prend la min de date de début de bail 
ImmoTenant.postSelect = function () {  
	if (!this.getContext().isList()) {
		var tenantId = this.getField("tenantId").getValue() ;
		var minDate = Tool.getCurrentDate();
		
		var o = this.getGrant().getTmpObject("ImmoLease");
		o.resetFilters();
		o.getField("tenantId").setFilter(tenantId);
		var rows = o.search();
		for (var i = 0; i < rows.size(); i++) {
		    var row = rows.get(i);
		    o.setValues(row);
		    var val = o.getField("leaseStartDate").getValue();
		    if (val  < minDate) { minDate = val}
		}
		var seniority = Tool.diffDate(Tool.getCurrentDate(),minDate)
		var c = this.getField("tenantSeniority");
		c.setValue(-seniority/365);	
		console.log("seniority " + seniority/365);
	}
};
ImmoTenant.isHistoric = function() {
    // In this example an historization is done only when the object's status had changed
console.error("this.getStatus()" + this.getStatus());
console.error("this.getOldStatus()" + this.getOldStatus());
						
    return (this.getStatus() != this.getOldStatus());

};

Merci d’avance pour votre aide.
Abed.


(David AZOULAY) #2

Dans le démo l’objet DemoOrderHistoric historise les changements sur les attributs demoOrdStatus et demoOrdQuantity, de DemoOrder.

Tout se passe comme il faut (un record historique n’est enregistré que lors des transitions d’état et/ou quand on change la quantité en état Pending), NB: il n’y a pas de hook isHistoric implémenté dans DemoOrder

Regardez en quoi votre cas diffère de celui là.


#3

Je retrouve le même “bug” dans Demo :
Je change le code client, qui n’est pas historisé :
Ecran%20Demo%201

Et pourtant une historisation est faite :

Concernant isHistoric , comme je l’ai dit, le pb est le même avec ou sans ce hook.


(David AZOULAY) #4

Ok je reproduis le pb que vous décrivez mais uniquement sur la UI responsive. Sur la UI legacy ça marche comme il faut.

@francois tu vois une raison pour qu’une modif sur un attribut FK non historisé génère quand même une historisation dans le cas de la UI responsive ?

NB: une modif sur un attribut non historisé qui n’est pas une FK (la date de livraison dans ce cas) ne génère, elle, pas d’historisation


(François Genestin) #5

Corrigé.
Sans old-value l’historique ne sait pas filtrer sa création.
Cela venait d’un pb de populate de la FK qui vidait les “old values” entre le “get” et le “save” de l’objet côté serveur.


(David AZOULAY) #6

La correction a été poussée sur la branche master.

PS: J’ai changé la catégorie du post en “defect”


#7

Je confirme que le pb est résolu. Merci.