Exporter des données métier depuis le module

Bonjour,

Lorsque j’utilise la fonction “exporter les données” depuis le formulaire du module, Simplicité ne créé plus un xml nommé data… est-ce que la P24 a changé l’exportation des données?

Fabrice

A partir de la P24 les donnée sont gérées en DataSets:

Attention les datasets font partie du commit Git des modules (on les retrouve sous forle de fichiers ZIP dans le répertoire data) , pour que vos repo Git ne grossissent pas abusivement veillez à faire le ménage régulièrement dans vos anciens dataset

Je n’avais pas vu le nouvel onglet…
Mais chez moi, il reste désespérément vide…

Faut-il configurer quelque chose?

Il faut configurer les “ordres d’export” dans vos objets métier dont les data sont exportables.
S’il est non renseigné rien est exporté.

Veillez à respecter un ordre cohérent avec vos foreign-keys = les objets terminaux en premier, puis les objets avec des références.

l’ordre d’export est bien indiqué,

Dans ce cas ça devrait s’exporter. Y a-t-il des logs serveur ?

Votre copie d’écran montre des champs mal traduits en français (dt name, dt file au lieu de Nom et Fichier) comme si votre instance n’était pas bien à jour.

Et quid d’éventuels messages dans les logs ?

pour les logs :

2020-06-19 17:35:03,569 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://lsllcot01.lausanne.ch:20188||ECORED0001|system|com.simplicite.util.ObjectDirect|save||Erreur Dataset
org.postgresql.util.PSQLException: ERROR: null value in column “dt_file” violates not-null constraint
Detail: Failing row contains (7, 2020-06-19 17:35:03, SOI_0477, 2020-06-19 17:35:03, SOI_0477, 61, CourrierDEJQ-data-20200619173503, null, Created by module’s data export on 2020-06-19 17:35:03).
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2268)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:313)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:448)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:369)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:125)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
at com.simplicite.util.engine.DBAccess.update(DBAccess.java:1706)
at com.simplicite.util.engine.ObjectManager.create(ObjectManager.java:1844)
at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2906)
at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:441)
at com.simplicite.util.ObjectDB.save(ObjectDB.java:1135)
at com.simplicite.util.ObjectDB.save(ObjectDB.java:1122)
at com.simplicite.util.tools.BusinessObjectTool.create(BusinessObjectTool.java:326)
at com.simplicite.util.tools.BusinessObjectTool.validateAndCreate(BusinessObjectTool.java:381)
at com.simplicite.objects.System.Module.exportData(Module.java:746)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.simplicite.util.engine.ObjectManager.invokeActionSync(ObjectManager.java:3718)
at com.simplicite.util.ObjectDirect.invokeAction(ObjectDirect.java:669)
at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:1952)
at com.simplicite.util.ScriptedObjectDB.invokeAction(ScriptedObjectDB.java:1008)
at com.simplicite.webapp.tools.JSONServletTool.action(JSONServletTool.java:1577)
at com.simplicite.webapp.ObjectJson.action(ObjectJson.java:652)
at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:590)
at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:137)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

pour la version :

Status=OK
Version=4.0.P24
BuiltOn=2020-05-26 20:03 (revision a069f3c9496feed069f51158423237d1ece77297)

Cette colonne est facultative, comment est-ce possible ?
@scampano ça te dit quelque chose ?

Par ailleurs la cause initiale est sans doute en amont de ce pb d’écriture en base au moment de la constitution du fichier de data (car s’il n’y a pas de fichier - la colonne dt_file nulle - c’est qu’il y a un pb d’export).

Il doit donc y avoir d’autres stacktraces/erreurs dans les logs avant ce stacktrace d’écriture en base qui n’est à priori qu’une conséquence.

ci-dessous le log system depuis ma connexion à l’instance jusqu’à l’export des données :

2020-06-24 07:42:42,646 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://lserveur.domaine:xxxxx||ECORED0001|system|com.simplicite.util.ObjectDirect|save||Erreur Dataset
org.postgresql.util.PSQLException: ERROR: null value in column “dt_file” violates not-null constraint
Detail: Failing row contains (10, 2020-06-24 07:42:42, xxxx, 2020-06-24 07:42:42, xxxx, 61, CourrierDEJQ-data-20200624074242, null, Created by module’s data export on 2020-06-24 07:42:42).
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2268)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:313)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:448)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:369)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:125)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
at com.simplicite.util.engine.DBAccess.update(DBAccess.java:1706)
at com.simplicite.util.engine.ObjectManager.create(ObjectManager.java:1844)
at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2906)
at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:441)
at com.simplicite.util.ObjectDB.save(ObjectDB.java:1135)
at com.simplicite.util.ObjectDB.save(ObjectDB.java:1122)
at com.simplicite.util.tools.BusinessObjectTool.create(BusinessObjectTool.java:326)
at com.simplicite.util.tools.BusinessObjectTool.validateAndCreate(BusinessObjectTool.java:381)
at com.simplicite.objects.System.Module.exportData(Module.java:746)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.simplicite.util.engine.ObjectManager.invokeActionSync(ObjectManager.java:3718)
at com.simplicite.util.ObjectDirect.invokeAction(ObjectDirect.java:669)
at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:1952)
at com.simplicite.util.ScriptedObjectDB.invokeAction(ScriptedObjectDB.java:1008)
at com.simplicite.webapp.tools.JSONServletTool.action(JSONServletTool.java:1577)
at com.simplicite.webapp.ObjectJson.action(ObjectJson.java:652)
at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:590)
at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:137)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2020-06-24 07:42:35,575 WARN [com.simplicite.util.ObjectCore] SIMPLICITE|http://lserveur.domaine:xxxxx||WARN|system|com.simplicite.util.ObjectCore|getTitle||Evénement: Deprecated method, please use Syntax error: use [VALUE:field] instead of deprecated [field] in expression .[sta_state]
2020-06-24 07:42:35,575 WARN [com.simplicite.util.ObjectCore] SIMPLICITE|http://lserveur.domaine:xxxxx||WARN|system|com.simplicite.util.ObjectCore|getTitle||Evénement: Deprecated method, please use Syntax error: use [VALUE:field] instead of deprecated [field] in expression [sta_lovname].[sta_state]
2020-06-24 07:40:33,042 WARN [com.simplicite.util.ObjectCore] SIMPLICITE|http://lserveur.domaine:xxxxx||WARN|system|com.simplicite.util.ObjectCore|getTitle||Evénement: Deprecated method, please use Syntax error: use [VALUE:field] instead of deprecated [field] in expression .[sta_state]
2020-06-24 07:40:33,042 WARN [com.simplicite.util.ObjectCore] SIMPLICITE|http://lserveur.domaine:xxxxx||WARN|system|com.simplicite.util.ObjectCore|getTitle||Evénement: Deprecated method, please use Syntax error: use [VALUE:field] instead of deprecated [field] in expression [sta_lovname].[sta_state]
2020-06-24 07:40:32,901 WARN [com.simplicite.util.ObjectCore] SIMPLICITE|http://lserveur.domaine:xxxxx||WARN|system|com.simplicite.util.ObjectCore|getTitle||Evénement: Deprecated method, please use Syntax error: use [VALUE:field] instead of deprecated [field] in expression .[sta_state]
2020-06-24 07:40:32,901 WARN [com.simplicite.util.ObjectCore] SIMPLICITE|http://lserveur.domaine:xxxxx||WARN|system|com.simplicite.util.ObjectCore|getTitle||Evénement: Deprecated method, please use Syntax error: use [VALUE:field] instead of deprecated [field] in expression [sta_lovname].[sta_state]
2020-06-24 07:40:30,543 INFO [com.simplicite.util.tools.LicenseTool]

Le document est crée que si l’objet est créé, donc il y a un moment où la colonne est nulle, puis le document lui est rattaché.

A mon avis, c’est un vieux bug ou patch incomplet de l’objet DataSet (cf pb de traduction des champs).
Il faut passer un ALTER sur votre base pour remettre la colonne en facultatif (via le DB Access).

Sur PG ça doit être comme ça :

ALTER TABLE m_dataset ALTER COLUMN dt_file DROP NOT NULL

C’est parfait! après cette commande tout est rentré dans l’ordre. Les exports se font bien.

Merci

On va patcher ça car il se peut que d’autres instances dans cette version aient le problème.
Merci pour les infos.

  • Un champ peut être obligatoire de façon logique, mais il sera facultatif en base : la règle logique peut changer dynamiquement via hook, contraintes…
  • Pour les champs documents, il y une référence croisée avec la table m_document, donc la création se passe en 3 étapes : création du dataset sans doc, création de m_document qui référence le row_id du dataset, puis update du dataset pour pointer sur le row_id du document

La colonne physique dt_file a dû être livré initialement par erreur en obligatoire, puis redevenue facultative dans le setup… je ne vois pas d’autres explications.

Bonjour,

Je relance ce post pour un problème d’export également. J’ai un module qui n’exporte pas les données.

J’ai saisi un ordre d’export, mais rien n’y fait : Error during module PFO data export: null

logs système :

2020-07-13 08:37:39,754 ERROR [com.simplicite.objects.System.Module] SIMPLICITE|http://serveur||ERROR|SOI_xxxx|com.simplicite.objects.System.Module|exportData||Evénement: Error during module PFO data export
java.lang.NullPointerException
at com.simplicite.objects.System.Module.exportData(Module.java:719)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.simplicite.util.engine.ObjectManager.invokeActionSync(ObjectManager.java:3718)
at com.simplicite.util.ObjectDirect.invokeAction(ObjectDirect.java:669)
at com.simplicite.util.ObjectDB.invokeAction(ObjectDB.java:1952)
at com.simplicite.util.ScriptedObjectDB.invokeAction(ScriptedObjectDB.java:1008)
at com.simplicite.webapp.tools.JSONServletTool.action(JSONServletTool.java:1577)
at com.simplicite.webapp.ObjectJson.action(ObjectJson.java:652)
at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:590)
at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:137)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)

version : Simplicité version4.0 patch level P24Built on2020-05-26 20:03 (revision a069f3c9496feed069f51158423237d1ece77297)

Cette erreur signale juste que l’export ne retourne rien.
Il faut essayer de voir s’il y a une autre exception Java en amont.

  • Pouvez vous exporter un autre module avec le même user ?
  • Le user SOI_xxxx a-t-il les droits de lecture sur le Module et sur tous les objets du module ?

Bonjour François,

oui je peux exporter tous les autres modules avec ce user et il a les droits CUD sur tous les objets.

Est-ce que ça pourrait être un problème d’ordre d’export?

Il y a un null pointer du fait que le service d’export termine dans un cas non prévu. On peut renforcer le code pour indiquer “erreur pas d’export” à la place du null, mais cela ne solutionnera pas votre export, ni la raison pour laquelle un objet ne s’exporte pas.

Seuls les logs (simplicité ou catalina en amont ou “cause by”) peuvent nous en dire plus.
Essayez de voir d’autres points de sortie en erreur. Sans logs complète nous sommes dans le noir.

via les logs system il n’y a rien d’autre que ce message. Je vais voir pour trouver des logs via SIM.

@scampano
Est ce que ce problème te dit quelque chose ?