Synchro DataLink KO pour les champs de type "Bloc note"

Request description

Lors de la synchronisation par DataLink d’un objet ayant un champ de type “Bloc note”, l’instance de DataLink d’arrivée (en v6.2) crée une entrée de journal à chaque resynchronisation.

Steps to reproduce

This request concerns an up-to-date Simplicité instance
and these are the steps to reproduce it:

  1. Configuration à l’arrivée (base v6) :

  2. Configuration au départ (base v5.3) :

  3. Log système générée lors de la synchro DataLink :
    2026-01-29 19:09:15,846|SIMPLICITE|WARN||http://bca-71077-cron-86ddd46c5d-jbnvv:8080||WARN|system|com.simplicite.util.engine.DataLinks$Host|importData||Event: importData error rowid=2017142 err={"code":"ERR_FIELD_MAX_SIZE","field":"AppPersonRoleAssessmentComment","level":"E","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40093 > 40000)","label":"Maximum field size exceeded: If requested, refused or missing account (0000000-na), please add a comment (Size 40093 > 40000)","params":{"code":"ERR_FIELD_MAX_SIZE","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40093 > 40000)","field":"AppPersonRoleAssessmentComment","level":"ERROR"}}

  4. Record en base au départ (base v5.3) :

  5. Record en base à l’arrivée (base v6.2) :

Technical information

Instance /health

[Platform]
Status=OK
Version=6.2.15
BuiltOn=2025-08-15 11:39
Git=6.2/309efbdf46b217e3145711d1c47c3e5ad5459aa5
Encoding=UTF-8
EndpointIP=100.88.23.96
EndpointURL=http://bca-71077-cron-86ddd46c5d-jbnvv:8080
TimeZone=Europe/Paris
SystemDate=2026-01-29 19:20:08

[Application]
ApplicationVersion=1.0.0
ContextPath=
ContextURL=https://bcsi-legal-cron.gke2.ope.gcp.renault.com
ActiveSessions=2
LastLoginDate=2026-01-29 18:56:24

[Server]
ServerActiveSessions=2
ServerSessionTimeout=30
CronStarted=true

[JavaVM]
HeapFree=263689
HeapSize=505856
HeapMaxSize=2019328
TotalFreeSize=1777161

[Cache]
ObjectCache=688
ObjectCacheMax=10000
ObjectCacheRatio=6
ProcessCache=0
ProcessCacheMax=10000
ProcessCacheRatio=0
APIGrantCache=0
APIGrantCacheMax=1000
APIGrantRatio=0

[Healthcheck]
Date=2026-01-29 19:20:08
ElapsedTime=9

Simplicité logs
2026-01-29 19:01:01,169|SIMPLICITE|WARN||http://bca-71077-cron-86ddd46c5d-jbnvv:8080||WARN|system|com.simplicite.util.engine.DataLinks$Host|importData||Event: importData error rowid=1815088 err={"code":"ERR_FIELD_MAX_SIZE","field":"AppPersonRoleAssessmentComment","level":"E","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","label":"Maximum field size exceeded: If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","params":{"code":"ERR_FIELD_MAX_SIZE","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","field":"AppPersonRoleAssessmentComment","level":"ERROR"}}
2026-01-29 19:01:01,169|SIMPLICITE|ERROR||http://bca-71077-cron-86ddd46c5d-jbnvv:8080||ERROR|system|com.simplicite.util.engine.DataLinks|syncData||Event: syncData: validation error {"code":"ERR_FIELD_MAX_SIZE","field":"AppPersonRoleAssessmentComment","level":"E","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","label":"Maximum field size exceeded: If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","params":{"code":"ERR_FIELD_MAX_SIZE","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","field":"AppPersonRoleAssessmentComment","level":"ERROR"}} on object STOCK VM
2026-01-29 19:00:31,520|SIMPLICITE|ERROR||http://bca-71077-cron-86ddd46c5d-jbnvv:8080||ECOREDB001|system|com.simplicite.util.engine.ObjectManager|query||Error SQL query: jdbc/simplicite: select * from (select null as c0, null as c1, null as c2, t.legal_text_statut as c3, null as c4, null as c5, null as c6, null as c7, null as c8, null as c9, null as c10, null as c11, count(*) as count from service t group by t.legal_text_statut) t0 order by t0.c3 asc
    org.postgresql.util.PSQLException: ERROR: relation "service" does not exist
2026-01-29 19:00:24,095|SIMPLICITE|WARN||http://bca-71077-cron-86ddd46c5d-jbnvv:8080||WARN|system|com.simplicite.util.engine.DataLinks$Host|importData||Event: importData error rowid=1875548 err={"code":"ERR_FIELD_MAX_SIZE","field":"AppPersonRoleAssessmentComment","level":"E","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","label":"Maximum field size exceeded: If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","params":{"code":"ERR_FIELD_MAX_SIZE","text":"If requested, refused or missing account (0000000-na), please add a comment (Size 40049 > 40000)","field":"AppPersonRoleAssessmentComment","level":"ERROR"}}

Browser logs
---paste content of the **relevant** browser-side logs---
Other relevant information

----E.g. type of deployment, browser vendor and version, etc.----

Merci pour ton retour.

Ce “vieux” champ était une bidouille sur la UI pour passer l’ancienne valeur (avec tout l’historique) et la nouvelle (qui contient juste la saisie), ça doit pas bien aimer la synchro effectivement, on va regarder pour bidouiller un peu plus cette API :innocent:

Sinon le mode d’affichage moderne du bloc-note est de passer en rendering d’activités + listes de cases à cocher façon trello. La persistance est alors un JSON qui ne “concatènera” rien, ça fera un annule et remplace lors de la synchro master>slave.

1 Like

Bonsoir François,

merci pour ta réponse super rapide.

J’ai contourné le pb en forçant un reset du champ (UPDATE) sur la base.

Bonne soirée.

Pour t’éviter de faire un “update” tous les soirs, à partir de la prochaine 6.2.22, le champ “bloc-note textuel” sera traité comme un simple champ “texte long” lors de la synchronisation via DataLink : annule et remplace la valeur.

Par contre, il faudra voir si par API REST le fonctionnement par concaténation convient.
On ne s’est jamais vraiment posé la question, mais à priori une mise à jour distante par API doit être vue comme une mise à jour via la UI : le bloc-note textuel doit empiler la donnée envoyée dans l’historique du bloc-note avec l’horodatage.

Mais bon ça veut dire qu’on ne peut jamais faire de RAZ du champ même par API. Du coup ça se discute.

Pour le bloc-note d’activités (en JSON), charge à celui qui met à jour par API de ne pas écraser l’existant, Simplicité ne gère pas un merge “malin” des JSON. Le cas ne s’est jamais présenté.

1 Like

Bonjour François,

Merci beaucoup pour ton retour rapide et la prise en compte en 6.2.22.

En ce qui concerne la stratégie de mise à jour, je conviens qu’il faut que le modèle se comporte de manière similaire dans le cadre des transactions UI et API REST. La réinitialisation du journal pourrait être pris en charge par une action habilitée distincte des opérations d’enregistrement et de PUT.

Le contexte DataLink est quand à lui particulier et en effet il est préférable de synchroniser intégralement le contenu servi par le master.

1 Like

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