Project

General

Profile

Anomalie #12586

[IHM] Erreur d'initialisation du plugin dataTable

Added by Cyril VAZQUEZ 11 months ago. Updated 8 months ago.

Status:
Clôturée
Priority:
1-Majeur
Assignee:
-
Target version:
Start date:
12/04/2019
Due date:
Spent time:
Itération:
191220
Extension/Module:
Fonction:
SCRUM - Valeur:
3 - Must

Description

Le système renvoie une erreur "Undefined index 'dataTable'"... lorsque le presenter tente d'accéder au plugin d'un élément HTML pour le configurer.

Analyse

Le template HTML contient un élément avec classe "dataTable".

<table class="dataTable">

L'erreur survient lorsque le presenter accède au plugin pour le configurer (colonnes de tri...) par le code suivant :

$dataTablePlugin = $this->view->getElementsById('id')->plugin['dataTable'];

Le tableau de plugins est vide alors que la présence d'une classe html dataTable a provoqué le déploiement d'une instance d'objet dependency\html\plugins\dataTable\dataTable au chagrment du HTML dans l'objet Document.

Le tableau des plugins a été vidé à un moment de l'exécution, car l'objet DOMElement de l'élément a été remplacé par un nouveau !!!

Ce problème survient lorsque la quantité de données (taille? nombre d'objets?) utilisée dans le processus est importante.

Solution de contournement

À définir lors du sprint lors de la reproduction de l'anomalie.

History

#1 Updated by Cyril VAZQUEZ 11 months ago

  • Description updated (diff)

#2 Updated by Elodie SOME-BLAD 11 months ago

  • Description updated (diff)

#3 Updated by Cyril VAZQUEZ 11 months ago

  • Status changed from A traiter to A tester
  • % Done changed from 0 to 90

Après analyse, il est impossible de déterminer pourquoi et dans quelles conditions l'ensemble des objets DOMNode du DOMDocument sont remplacés.

Cela peut survenir lors de la fusion, de la traduction, ou autres opérations qui manipulent l'arbre DOM, sans doute lorsque le nombre de noeuds dans l'arbre excède une certaine limite, en nombre ou mémoire utilisée...

Solution de contournement :
- Nouveau composant dependency\html\PluginContainer pour gérer les plugins, avec déploiement des plugins à l'accès
- ajout des méthodes à dependency\html\Element pour instancier un nouveau PluginContainer à l'accès
- modification des méthodes dependency\html\Document pour addPlugins et savePlugins (optimisation par déplacement de la méthode de déploiement de plugin dans la class Element)

Si le presenter demande un plugin d'élément qui n'existe plus (déployé au chargement du HTML dans Document mais perdu à cause de ce bug...), une nouvelle instance du plugin lui sera servie.

  1. presenter demande le plugin dataTable d'un élément qui a été remplacé par le bug
  2. l'objet PluginContainer n'existe pas, l'élément en crée un nouveau
  3. la clé 'dataTable' et donc l'instance de plugin n'existent pas dans l'instance du PluginManager, il en instancie une nouvelle et la renvoie

A tester sur la branche fix/12586_DataTable_init issue de develop.

#4 Updated by Cyril VAZQUEZ 10 months ago

Le PluginContainer était initialisé lors d'un accès à l'itérateur par foreach($element->plugin...)
Retiré un appel à detDate dans l'écran principal, inutile et qui faisait planter le script pour les utilisateurs adminG et adminF qui n'ont aps accès au formulaire sur lequel pointait le script.

#5 Updated by Elodie SOME-BLAD 10 months ago

  • Status changed from A tester to Clôturée

Testé, livré et clôturé, publié en 2.5.2 socle.

#6 Updated by Elodie SOME-BLAD 8 months ago

  • Target version changed from 2.6 to 2.5

Also available in: Atom PDF