Lors de la sauvegarde d'un équipement dont le logical Id est affiché

Bonjour à tous,

J’ai découvert un bug dans le core de jeedom (même si je n’ai pas localisé où dans le code pour l’instant).

Des testeurs de la nouvelle version beta de mon plugin se sont plaints d’une duplication de leurs objets lorsqu’ils synchronisaient leurs objets avec le serveur.
J’ai découvert que cela arrivait suite à la sauvegarde dans un premier temps de changements de leur configuration de l’objet (changement de l’object id lié par exemple).

Après investigation, et comme rien n’avait changé dans le core depuis des mois, j’ai réalisé que le changement dans la page des équipements étaient qu’il y avait le logical Id d’afficher de l’équipement, contrairement à ma version stable. Et lors d’une sauvegarde, le logical Id disparaissait.
En regardant les logs, j’ai noté que le logical Id disparaissait de l’affichage car le logical Id était devenu un tableau de l’id répété deux fois, et non plus une string comme attendu.

Le fait de supprimer le logical Id de l’affichage a supprimé le problème.

En conclusion, il y a un bug dans le core qui transforme le logical Id en tableau lorsque ce dernier est affiché et donc fait partie des éléments du form lors de l’action save…

Reste à trouver d’où vient ce bug, ce n’est en tout pas directement dans l’action saveEqLogic de plugin.template.js. Si qqn a une idée…

Bonsoir,

Je vient de faire un test sur le plugin virtuel, debian11, core 4.4.19, et aucun soucis constaté.

Le repo de ton plugin est public, pour y jeter un œil ?

Ok je vient de réussir a reproduire, tu doit afficher 2x le data-l1key="logicalId" dans le eqlogictab

attends je regarde. je ne vois pas deux fois la commande mais je reregarde

Il faut l’afficher 1 seul fois.

ok ben c’est ça. Je ne pensais pas comme je ne l’affiche jamais deux fois, mais selon l’objet je ne l’affiche pas au même endroit. Du coup, effectivement il n’est pas visible, mais y est bien deux fois.
Merci pour le debug lol

1 « J'aime »

Sinon si tu veux quand même l’afficher a plusieurs endroits, tu peux utiliser la fonction saveEqLogic pour traiter les eqLogicAttr et conditionner le logicalId

Ex :

function saveEqLogic(_eqLogic) {
  if (isset(_eqLogic.logicalId) && Array.isArray(_eqLogic.logicalId)) {
    _eqLogic.logicalId = _eqLogic.logicalId[0]
  }
  return _eqLogic
}
1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.