Probleme de validateandSave() qui récupère ne sauvegarde pas ma nouvelle valeur

Tags: #<Tag:0x00007fdd46643c48>

Bonjour,

J’ai un petit sosucis avec la méthode validateAndSave()

J’ai un adapter qui me permet d’importer des données dans l’un de mes objets
Dans celui-ci soit le record n’existe pas et donc il le crée soit il existe et il modifie seulement le champ statut (pwoGenStatus)

Voila mon code:

							pwoOA.setValues(listPwoInDb.get(0), true);
							pwoOA.setFieldValue("pwoGenStatus", values[8].trim().toUpperCase());
							
							appendLog(pwoOA.toJSON());
							try {
								pwoOATool.validateAndSave();
								nbCPUpdated++;
								appendLog(pwoOA.toJSON());
								

Cependant, j’ai un soucis lors du validateAndSave()

Voici mon résultat avant la méthode:

2020-10-02 13:04:38,369 INFO  [] {"row_id":"9","pwoOaxCode":"0001","pwoOaxLabel":"CENTRAL - RENAULT","pwoGenDescription":"CENTRAL - RENAULT","PwoPorScope":"BOP","PwoPorBelongingType":true,"PwoPorSource":"RENAULT","PwoPorFiscalYear":2020,"pwoGenStatus":"VALIDATED","pwoPorPpcId":null,"pwoPorPpcId__pwoPpcCode":null,"pwoPorPpcId__pwoPpcLabel":null,"pwoPorOatId":"1","pwoGenStartDate":"2020-10-02","pwoGenEndDate":null,"pwoPorOatId__pwoOatDesignation":"OPERATIONAL","pwoSicSite":{"object":"PwoSiteCountryService","row_id":"81","label":"Country","userkeylabel":"FR","icon":"url"},"pwoCurrency4ex":{"object":"Pwo4exCurrencyService","row_id":"49","label":"Currency","userkeylabel":"EUR","icon":"object"},"row_metaobject_id":null}

Mon résultat après:

2020-10-02 13:04:39,280 INFO  [] {"row_id":"9","pwoOaxCode":"0001","pwoOaxLabel":"CENTRAL - RENAULT","pwoGenDescription":"CENTRAL - RENAULT","PwoPorScope":"BOP","PwoPorBelongingType":true,"PwoPorSource":"RENAULT","PwoPorFiscalYear":2020,"pwoGenStatus":"DRAFT","pwoPorPpcId":null,"pwoPorPpcId__pwoPpcCode":null,"pwoPorPpcId__pwoPpcLabel":null,"pwoPorOatId":"1","pwoGenStartDate":"2020-10-02","pwoGenEndDate":null,"pwoPorOatId__pwoOatDesignation":"OPERATIONAL","pwoSicSite":{"object":"PwoSiteCountryService","row_id":"81","label":"Country","userkeylabel":"FR","icon":"url"},"pwoCurrency4ex":{"object":"Pwo4exCurrencyService","row_id":"49","label":"Currency","userkeylabel":"EUR","icon":"object"},"row_metaobject_id":null}

J’ai seulement changé la clé pwoGenStatut en “VALIDATED” ce qui a été pris en compte, on peut le voir avec le premier JSON
Cependant apres le validateAndSave(), on remarque que la valeur de pwoGenStatut repasse à “DRAFT” qui était le status avant modification

Ce qui est étrange
D’un côté, c’est que le probleme apparait seulement avec le statut “VALIDATED”, lorsque l’import change le statut en un autre statut, la modification se fait bien
Et de l’autre côté, lorsque je prends l’un des records, et que je le change manuellement au statut “VALIDATED”, la modification se fait bien
Il n’y a que quand je passe par l’adapter qu’il n’accepte pas la modification, j’ai beau regarder dans les logs de l’adapter et de Simplicité, je ne vois aucune erreur

Sauriez-vous quel est le probleme ?

Cordialement,
KWu

Est-ce que la transition DRAFT=>VALIDATED est bien autorisée au user qui exécute l’adapter ?

Les changements de valeur d’un state model sont habilités, le fait que ça marche pour un user X ne garantit donc pas que ça marche pour un user Y…

Dans les deux cas, c’est moi qui ai fait les deux executions, que ce soit pour l’adapter ou pour la modification manuelle.
Vue que ca marche pour l’un, cela devrait marcher pour le deuxieme avec le meme utilisateur, je suppose
Et meme en vérifiant les transition permission j’ai bien le droit de faire la transition DRAFT => VALIDATED

Bonjour,

Est ce qu’il ne manque pas une donnée obligatoire pour passer à l’état VALIDATED ?

Regardez si vous n’auriez pas des contraintes et/ou du code qui pourrait restreindre la possibilité de changer de statut dans le contexte particulier de ce record accédé via un adapter.

Essayez de faire un changement de valeur sur un autre attribut (i.e. pas le statut) dans votre adapter pour voir ce que ça donne dans un contexte plus simple que la modif d’un attribut statut.

Il ne doit pas y avoir de contrainte différente entre l’adapter et la modification manuelle, dans mon code, je n’ai fais qu’un setFieldValue(“pwoGenStatus”, newStatus) et directement validateAndSave()
Il n’y a aucun autre code entre les deux, donc normalement il ne devrait pas y avoir de contrainte différente entre l’adapter et la modification manuelle
Et puisque la modification au statut Validated n’a pas été restreinte de maniere manuelle, il ne devrait y avoir aucune raison pour que ca restreint via l’adapter

Par ailleurs, le changement de statut marche pour d’autre statut mais seulement pas pour Validated

Tout ce que vous me dites me conforte dans l’idée que le pb est quelque part dans votre paramétrage (droits, contraintes, condition de transition d’état, …) ou votre code (par exemple les hooks de l’objet).

Il n’y a rien dans le code Simplicité qui traiterait différemment une transition d’état vis à vis d’une autre.

Assurez vous dans le code de votre adapter que la old value de votre attribut est bien celle que vous pensez.

Je conçois que j’ai surement fait une erreur dans mon paramétrage ou dans mon code, c’est justement pour celà que je vous sollicite afin de savoir si vous aviez des pistes a laquelle je n’aurais pas pensé ou peut-être voir une subtilité a laquelle je n’aurais pas fait attention

Pour la question de la old value et la new value, voila ce que j’ai rajouté pour vérifier:

pwoOA.setValues(listPwoInDb.get(0), true);
							
							pwoOA.setFieldValue("pwoGenStatus", values[8].trim().toUpperCase());
							appendLog("old value: " + pwoOA.getField("pwoGenStatus").getOldValue());
							appendLog("new value: " + pwoOA.getField("pwoGenStatus").getValue());
							
							try {
								pwoOATool.validateAndSave();
								nbCPUpdated++;
							} catch (Exception e) {
								stringFiller = "";
								for(int i = 0; i < lengthOACode - values[0].trim().length(); i++){
									stringFiller = stringFiller + "0";
								}
								appendLog("ERROR : Updating the OA (code : " + stringFiller + values[0].trim() + ")");
								appendLog(e.getMessage());
							}

Voila mon résultat:

2020-10-02 15:27:49,998 INFO  [] old value: DRAFT
2020-10-02 15:27:49,998 INFO  [] new value: VALIDATED

Ce qui est bien ce que je pensais
Pour le passage au statut Validated, il y a bien des validations que je fais pour tester si le record a le droit de passer à ce statut mais de ce que je vois, les records passent toutes les conditions, je n’ai aucun message d’erreur (la preuve en ait que je peux le passer de manière manuelle) mais il ne veut toujours pas sauvegarder le changement de statut via l’adapter

A nouveau le fait de pouvoir faire une transition d’état dans un contexte donné (une mise à jour via la UI) ne garantit en rien que ça puisse se faire dans un autre contexte (une MAJ batch dans un adapter).

Par exemple, selon la manière dont votre code est écrit (je ne parle pas du code de l’adapter mais des hooks de votre objet), le comportement peut être différent entre un update UI et un update batch. Par exemple certains hooks (par exemple les init*) ne sont pas appelés via un simple validateAndSave, idem pour les pre/postSelect si vous ne faites qu’itérer sur une liste issue d’un search etc…