Exporter des données métier depuis le module

Tags: #<Tag:0x00007fe293c30d20>

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.