Modifier la liste : perte des valeurs des attributs de l'objet parent

Request description

Bonjour,

Dans le cas de la modification en liste d’un objet C (table d’association) permettant de lier un objet A à un objet B nous avons remarqué que les valeurs des attributs de l’objet parent A étaient perdus à partir de l’ajout d’une seconde ligne et devenait incohérent à partir de l’ajout de la 3e.

Pour donner un peu de contexte, dans notre application on est dans un cas similaire aux liens entre DemoClient, DemoContact et DemoOrder. Quand on crée un DemoContact on a besoin pour une règle de gestion de connaitre le client qui est sur la commande associée au DemoContact qu’on est entrain de créer :

Steps to reproduce

A partir du module de Demo :

  1. Importer le dataset du module de Demo.

  2. Au niveau du code de DemoClient.java ajouter le code suivant :

@Override
public void initRefSelect(ObjectDB parent) {
	// AppLog.warning("DEBUG / parent: " + parent, null, getGrant());
	if (!Tool.isEmpty(parent) && "DemoContact".equals(parent.getName())) {
		String orderClientId = parent.getFieldValue("demoOrdCliId");
		AppLog.warning("DEBUG / orderClientId: " + orderClientId, null, getGrant());
	}
}
  1. Créer deux commandes. Commande 1 client 1 et commande 2 client 2.

  1. Au niveau de la commande n°2, créer un contact en prenant client 2.

  1. Ouvrir la commande n°1. Créer un contact en passant par “Modifier la liste”.

  1. Cliquer sur “Ajouter une ligne” puis sur la loupe au niveau de l’attribut “Code client” :

  1. Dans les logs on peut voir qu’on a orderCLientId qui vaut 1 ce qui correspond bien au row_id de notre client sur la commande 1 où on se trouve.

  1. Fermer la pop-up de sélection d’un client :

  1. Cliquer sur “Ajouter une ligne” puis sur la loupe au niveau de l’attribut “Code client” de la 2nde ligne :

  1. Dans les logs on peut voir qu’on a orderCLientId qui vaut “chaine de caractère vide”. On a perdu l’info sur le client au niveau de la commande où on se trouve :

u

  1. Fermer la pop-up de sélection d’un client.
  2. Cliquer sur “Ajouter une ligne” puis sur la loupe au niveau de l’attribut “Code client” de la 3e ligne :

  1. Dans les logs on peut voir qu’on a orderCLientId qui vaut 2. Ca ne correspond pas au row_id du client sur la commande n°1, c’est celui de la commande n°2 :

Technical information

Instance /health

[Platform]
Status=OK
Version=6.2.12
BuiltOn=2025-06-27 18:57
Git=6.2/52d763856412a8eb1564748d6d391f60e1b9c921
Encoding=UTF-8
EndpointIP=
EndpointURL=
TimeZone=UTC
SystemDate=2025-07-17 14:09:55

[Application]
ApplicationVersion=1.0.0
ContextPath=
ContextURL=
ActiveSessions=1
TotalUsers=7
EnabledUsers=5
LastLoginDate=2025-07-17 13:24:46

[Server]
ServerInfo=Apache Tomcat/9.0.106
ServerType=WEB
ServerDevMode=false
ServerCompiler=true
ServerActiveSessions=1
ServerSessionTimeout=30
CronStarted=true

[OS]
Name=Linux
Architecture=amd64
Version=6.6.87.2-microsoft-standard-WSL2
DockerImageName=almalinux9
SystemEncoding=UTF-8

[JavaVM]
Version=21.0.7
Vendor=Eclipse Adoptium
VMName=OpenJDK 64-Bit Server VM
VMVersion=21.0.7+6-LTS
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.13 2020 09 02
HeapFree=157349
HeapSize=410624
HeapMaxSize=487424
TotalFreeSize=234149

[Cache]
ObjectCache=279
ObjectCacheMax=10000
ObjectCacheRatio=2
ProcessCache=1
ProcessCacheMax=10000
ProcessCacheRatio=0
APIGrantCache=0
APIGrantCacheMax=1000
APIGrantRatio=0

[Database]
Vendor=3
VendorName=postgresql
ProductName=PostgreSQL
ProductVersion=14.18 (Debian 14.18-1.pgdg120+1)
DriverName=PostgreSQL JDBC Driver
DriverVersion=42.7.7
DBDate=2025-07-17 14:09:55
DBDateOffset=0
DBPatchLevel=6;P02;070eeaa53c5b6fd9eacbce674cd833d7;12
UsingBLOBs=true

[Healthcheck]
Date=2025-07-17 14:09:55
ElapsedTime=633

Merci Florent pour ce rapport détaillé, on va regarder!

Bonjour Florent,

On reproduit bien le comportement observé.
Il semblerait que ça provienne des row_id temporaires attribués aux différentes lignes de contact ajoutées lors du click sur “Ajouter une ligne”.
La plateforme ne détecte pas correctement que les lignes de Contact sont en mode création et donc un select est fait pour valoriser les données de parent avec comme row_id celui mentionné plus haut. Le select renvoie ensuite un Contact existant mais lié à un Client différent, d’où le mauvais orderClientId dans les logs.

On va corriger, ça sera disponible sur la prochaine révision de la 6.2

La correction a été livrée en 6.2.14

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