You are not logged in.
Pages: 1
Bonjour,
Je viens d'identifier un problème pour l'exportation des Entités dont je voudrai vous faire part. Il semble que lors de l'export les sous-entités soient oubliées.
Ce phénomène ne semble se produire que pour les entités et pas pour les autres tables.
Tout d'abord voici comment le reproduire.
Mon glpi est en version 0.83.7.
La version de dumpentity installée est la 1.3.1.
je suis connecté avec le compte avec glpi qui dispose donc d'un profil de super-admin à partir de l'entité racine qui s'applique récursivement sur toutes les sous-entité.
De plus, j'ai une arborescence d'entité :
Entité racine
Entité 1
Entité 1 - 1
Entité 2
Entité 2 - 1
Comme nous allons provoquer l'erreur dans l'interface web il n'est pas nécessaire de client et de modèle dans le plugin Dumpentity.
Assurons nous maintenant que le compte glpi avec lequel nous sommes connecté a une vue depuis l'entité racine sur toute l'arborescence "Entité racine( Voir tous)".
Maintenant allons dans l'interface web du plugin dumpentity (Plugins... Export d'entité... Export complet) et cliquons sur Entités. On obtient alors un fichier glpi_entities.csv qui est ... vide !
Allons regarder le fichier des erreurs glpi\files\_log\sql-errors.log...
*** MySQL query error :
***
SQL: SELECT *
FROM `glpi_entities`
WHERE `id` IN (0,)
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3
Backtrace :
C:\Program Files (x86)\wamp\www\glpi\plugins\dumpentity\inc\model.class.php :583 DBmysql->query()
Effectivement il manque une partie de la requête sql.
D'après ce que j'ai pu voir avec d'autres tests l'erreur semble provenir de la méthode getSonsOf qui n'arriverait pas à récupérer les id des sous-entités.
Cordialement.
glpi 0.83.7 webservices 1.3.1 dumpentity 1.3.1 racks 1.3.2
Offline
Vous avez essayé en cliquant sur le chevron à droite de Entité racine ?
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Bonjour,
Tout à fait. J'avais bien veillé initialement à être sur Entité racine (Voir tous).
J'ai aussi fait des tests pour utiliser ce plugin en ligne de commande.
J'obtient le même genre d'erreur dans files\_log\sql-errors.log :
*** MySQL query error :
***
SQL: SELECT *
FROM `glpi_entities`
WHERE `id` IN (0,,0,17,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,19,84,21,86,87,88,89,90,91)
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0,17,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,19,84,21,86,87,88,89,90,91)' at line 3
Backtrace :
C:\Program Files (x86)\wamp\www\glpidevig\plugins\dumpentity\inc\model.class.php :583 DBmysql->query()
Je note que cette fois j'ai bien les id de toutes mes entités mais qu'il a une virgule en trop qui rend la syntaxe incorrecte.
Donc, contrairement à ce qu eje pensait initialement la fonction getsonsof ne semble pas être en cause. C'est plutôt du côté du traitement qui est fait à partir du résultat de cette fonction pour constituer le requête sql.
J'ai aussi remarqué qu'en ligne de commande ce phénomène se produit uniquement pour l'export des entités. L'export des ordinateurs fonctionne parfaitement quelque soit l'entité auquel l'appareil est attaché.
Je me suis donc intéressé à la fonction getCSV dans le fichier plugins\dumpentity\inc\model.class.php.
J'ai modifié les lignes 456 à 464 par :
$Sql = "SELECT *
FROM `$table`
WHERE `id` IN ($entity";
$ancestors = implode(getAncestorsOf("glpi_entities", $entity), ', ');
if ($ancestors!="") {
$Sql .= ",".$ancestors;
}
if ($recursive) {
//Dump entity + sub entities + entity's parents
$sons = implode(getSonsOf("glpi_entities", $entity),',');
if ($sons!="") {
$Sql .= ",".$sons;
}
}
$Sql .= ")";
Cette fois, il n'y a plus d'erreur sql.
Pour une exécution par script, on obtient bien l'ensemble des entités (sous réserve d'utiliser un client dumpentity avec sous-entité à oui).
Pour un export depuis l'interface, le résultat ne correspond qu'à l'entité en cours. La variable $recursive semble être toujours à false même lorsque on est sur "Entité racine (Voir tous)".
Je vais continuer à creuser la question...
Cordialement.
glpi 0.83.7 webservices 1.3.1 dumpentity 1.3.1 racks 1.3.2
Offline
Bonjour,
Comme je l'indiquais en fin de mon précédent message la variable $recursive est toujours à false lorsqu'on utilise l'interface web du plugin.
Cette valeur est fixée à la ligne 71 du fichier plugins\dumpentity\front\getCSV.php :
$recursive = false;
Ainsi que l'utilisateur soit sur "Entité racine" ou sur "Entité racine (Voir tous)" l'extraction n'est faite que pour l'entité courante.
Cordialement.
glpi 0.83.7 webservices 1.3.1 dumpentity 1.3.1 racks 1.3.2
Offline
Je viens de regarder le code.
Rien n'a jamais été prévu pour récupérer les données récursives en mode graphique.
Pour votre erreur sql, je vien de commiter une correction : https://forge.indepnet.net/projects/dum … isions/127
CentOS 6.5 - CentOS 7.x
PHP 5.6 - PHP 7.x - MySQL 5.6 - MariaDB 10.2 + APC + oOPcache
GLPI from 0.72 to dev version
Certifiée ITIL (ITV2F, ITILF, ITILOSA)
Offline
Merci
glpi 0.83.7 webservices 1.3.1 dumpentity 1.3.1 racks 1.3.2
Offline
Pages: 1