Erreur Statut lors de l'import CSV

Bonjour,
Je rencontre un pb lors de l’import de l’objet Bail à cause d’un contrôle de statut dans le postValidate :

if ((this.getField("tenantId").getValue() != 'LOCA-00000' ) & (this.getField("leaseStatus").getValue() == "10")) {
	console.error("ERROR : Saisie de locataire interdite pour ce statut" + this.getField("leaseImmoTenantid").getValue());
    return Message.formatError("ERR_TENANT", null, "leaseStatus");

Le bail en question n’a pourtant pas de statut à 10, pourtant, lors de l’import, il le considère comme “10”. Du coup, ca tombe en anomalie.

Voici une partie de log de l’import :
2018-02-23 15:45:48,715 INFO [] Start import object ImmoLease:
2018-02-23 15:45:48,715 INFO [] Found field leaseId = [BAIL-00002]
2018-02-23 15:45:48,715 INFO [] Found field leaseStatus = [100]
2018-02-23 15:45:48,715 INFO [] Found field leaseImmoTenantid.tenantId = [LOCA-00007]
2018-02-23 15:45:48,715 INFO [] New record key row_id
2018-02-23 15:45:48,715 INFO [] Action: INSERT
2018-02-23 15:45:48,716 ERROR [] Validation error: [ERR_TENANT#ERROR#leaseStatus]

Merci d’avance pour votre aide.

et un test avec && ?

Le problème reste le même avec &&

Quoi qu’il en soit un ET s’écrit && en javascript.

Revenons aux bases :
L’import est comme une saisie en upsert = créer si clé fonctionnelle inconnue, modifier sinon.
L’import n’est pas un accès direct en base (type sql*loader), il respecte les regles comme si c’était l’IHM qui envoyait les données ligne par ligne.

Donc si le statut est un state-model et que c’est une création, le statut sera forcé à l’état initial “10” même si vous spécifiez “100”. Il faut ensuite importer un changement de statut pour respecter vos regles de gestion.

On va regarder pour voir comment “sauter” des étapes de state-model lors d’un import.
mais si ce n’avait pas été fait c’est pour des raisons d’intégrité des données, mais ce serait pratique de pouvoir avoir un mode lazy.

Le champ leaseStatus est il un champ lié à un diagramme d’état ?

PS: en mettant votre code sous une balise markdown typée (ici ````javascript) il y aurait la coloration syntaxique ce qui rendrait votre extrait de code encore plus lisible, ex:

if ((this.getField("tenantId").getValue() != 'LOCA-00000' ) & (this.getField("leaseStatus").getValue() == "10")) {
	console.error("ERROR : Saisie de locataire interdite pour ce statut" + this.getField("leaseImmoTenantid").getValue());
    return Message.formatError("ERR_TENANT", null, "leaseStatus");```

@david, Oui, c’est bien un champs lié à un diagramme d’état.

Pour ce qui est de markdown (que je découvre), auriez-vous une préconisation d’un logiciel à utiliser ? Je suis passé par “Dingus” que j’ai trouvé sur le net.

@François, si le statut est par défaut à “10”, la ligne ne sera pas insérée à cause du contrôle en place.
Faut-il donc, encore une fois, empêcher ce contrôle dans le cas d’un import ? Si oui, les lignes auront elles la valeur “10” ( ce qui ne m’arrange pas bien sûr) ?

Ok, l’import est une creation ou une mise à jour ?

Pour ce qui est du markdown, il n’y a besoin d’aucun outil supplémentaire, les messages postés dans ce forum supportent par défaut la syntaxe markdown (c’est d’ailleurs pour cela qu’il y a un preview pane à droite de la boite de saisie). Pour la syntaxe il y a plein d’infos sur le net, par exemple https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet

Pour mémoire, la syntaxe markdown est aussi utilisée dans tous les champs texte “Description” de Simplicité afin de pouvoir mettre en forme les informations documentaires de votre paramétrage. C’est aussi markdown qui est utilisé dans la rubrique Documentation pour rédiger des docs ad-hoc

Comme c’est la première fois que je fais l’import pour cet objet, c’est une création, les prochaines fois, cela sera une mise à jour.

Bonjour,
@françois, @david, avez-vous du nouveau concernant le pb de changement de statut lors de l’import d’un objet possédant un diagramme d’état ? Avez-vous trouvé une solution pour “sauter” les étapes de state-model lors d’un import ?

Je confirme que s’il n’ y a pas de contrôle sur le statut dans l’objet (Ex. dans notre module : Locataire, Investisseur ou Bien), toutes les lignes seront insérées mais avec un statut initial ! et s’il y a un contrôle sur le statut (Ex. dans notre module “Bail”) les lignes tombent en erreur.

Merci d’avance.
Abed.

Un objet ne peut pas être à la fois contraint et permissif.

C’est normal car cet import n’est pas fait pour transgresser les règles que vous avez mises en place (sauf à mettre des isBatchInstance dans votre code - ou paramétrer un objet dédié aux imports “bruts” sans aucune regle de gestion mais sur les mêmes champs). L’objet est contraint par un state-model. Il en va de même pour un champ obligatoire, une clé inexistante… ça rejettera l’import.

La cas particulier d’un import d’un “nouvel objet dans un état avancé” par contre n’est pas à considérer comme une création lors de l’import, on va faire l’évolution pour que ça passe sans rejet.

Voilà la modification a été apportée pour rendre passant les états avancés lors d’import.
Ce sera disponible demain sur les environnements synchronisés sur le master.

J’ai refait les tests aujourd’hui et c’est toujours le statut initial qui est importé.
Exemple l’objet Bien qui possède un diagramme d’état :
Avant import :


Après import :

A moins que l’instance “formation1” ne soit pas synchronisé avec le Master, la solution ne marche pas encore.
Abed.

De mon côté j’ai réussi à importer une commande de la démo en état final. Je vais refaire un test.

Je ne sais pas si votre formation1 est en auto-upgrade.
@David me dit que vous êtes bien sur le master

@françois oui l’instance formation1 et l’instance e3m sont bien en autoupdate et le serveur demo.simplicite.io sur lequel se trouvent ces instances suit bien la branche master de la 4.0

Bonjour,

J’ai refait les tests ce matin, et je confirme que le pb est maintenant réglé.

Merci.