You are not logged in.
Pages: 1
Topic closed
Bonjour à tous,
Débutante de GLPI, j'ai commencé depuis un moment par travailler avec: inventaire, mis au rebut, création de groupes/d'utilisateurs, création de contrats, de périphériques, d'entités...etc.
Mais depuis deux jours, j'ai un problème avec la création d'un rapport. J'ai bien installé le plugin reports, j'ai créé un fichier PHP et un fichier de langue qui lui est associé. Mon souci se pose au niveau de l'exécution de mon fichier PHP. Le fichier est bien reconnu mais le navigateur m'affiche une erreur 500. J'ai rectifié ma requête SQL qui d'ailleurs fonctionne bien quand je l'essaie dans PHPmyadmin. Quelqu'un aurait une solution pour moi svp? C'est vraiment important pour moi, je suis en stage et je dois vraiment avancer dans le travail. J'utilise la version 9.1 de GLPI. Je vous remercie et toutes mes excuses pour un quelconque dérangement
Ci-dessous, un aperçu de mon code PHP:
<?php
$USEDBREPLICATE = 1; //Le rapport sera routé vers la base esclave
$DBCONNECTION_REQUIRED = 0; // not really a big SQL request
include("../../../../inc/includes.php");
//Le nom du rapport est Liste des machines sous contrats
$report=new PluginReportsAutoReport("Computers with contracts");
$report->setColumns(array(new PluginReportsColumn('Name', __('Nom')), new PluginReportsColumn('Contract', __('Contrats')));
$query='SELECT glpi_computers.name AS Nom, glpi_contracts.name AS Contrats FROM glpi_computers, glpi_contracts
INNER JOIN glpi_contracts_items
WHERE glpi_computers.id=glpi_contracts_items.items_id AND glpi_contracts.id=glpi_contracts_items.id';
$report->setGroupBy('glpi_computers.name');
$report->setSqlRequest($query);
$report->execute();
?>
Last edited by miss (2017-05-15 09:05:25)
Offline
bonjour, la définition de vos colonnes me semble inhabituelle,
$report->setColumns(array(new PluginReportsColumn('Name', __('Nom')), new PluginReportsColumn('Contract', __('Contrats')));
$query='SELECT glpi_computers.name AS Nom, glpi_contracts.name AS Contrats FROM glpi_computers, glpi_contracts
le premier paramètre de PluginReportsColumn doit correspondre à l'alias que vous définissez dans la requete
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Merci pour votre répondre, mais c'est justement ce que je ne comprends pas bien dans la notion PHP d'un plugin, je n'ai fait que suivre le code du fichier location.php du fichier glpi/plugins/reports/report/Location.
J'ai quand même essayé de rectifier mon erreur suivant votre solution mais j'ai toujours l'erreur 500.
Merci de m'éclairer un peu plus sur mon erreur.
Last edited by miss (2017-05-12 15:10:58)
Offline
la colonne est définie par 2 paramètres, son nom ( cous avez mis Name) et le libellé qui s'affiche (vous avez choisi __('Nom') c'est à dire la traduction de nom dans les fichiers .mo et .po) .
new PluginReportsColumn('Name', __('Nom'))
pour un essai vous auriez pu mettre le libellé de la colonne en dur :
new PluginReportsColumn('Name',"LeLibellédeMaColonne")
ensuite dans votre requète sql, toutes les colonnes ne sont pas forcément dans le même ordre que dans l'affichage des colonnes, il faut dont indiquer quelle colonne de votre query correspond à la première colonne du tableau :
Il faut donc le même alias mysql de le nom de la colonne ( les mots en rouge DOIVENT être identiques, les mots en bleu aussi etc... dans le post précédent)
ensuite, comme vous avez défini un alias, le "group by" doit repondre cet alias plutot que le nom de la colonne. $report->setGroupBy('Nom');
vous avez une erreur dans votre sql car la requète vous retourne les pc mais aussi les imprimantes etc... il faut définir itemtype='computer'
ce qui donne :
$USEDBREPLICATE = 1;
$DBCONNECTION_REQUIRED = 0;
// Initialization of the variables
define('GLPI_ROOT', '../../../..');
include (GLPI_ROOT . "/inc/includes.php");
//titre du rapport dans la liste de selection, soit en dur ici, soit mettre à jour la variable dans les fichiers de traduction;
$report = new PluginReportsAutoReport("Computers with contracts");
//définition des colonnes de l'affichage;
$report->setColumns(array(new PluginReportsColumn('Nom',"Nom"), new PluginReportsColumn('Contrats', "Contrat")));
$query="SELECT glpi_computers.name AS Nom, glpi_contracts.name AS Contrats
FROM glpi_computers
INNER JOIN glpi_contracts_items ON glpi_computers.id=glpi_contracts_items.items_id AND glpi_contracts_items.itemtype='Computer'
JOIN glpi_contracts ON glpi_contracts.id=glpi_contracts_items.id ";
$report->setGroupBy('Nom');
$report->setSqlRequest($query);
$report->execute();
Html::footer();
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Merci beaucoup.
Je comprends mieux avec cette explication. Je suis vraiment contente. En corrigeant mes erreurs tout en suivant tout ce détail j'ai retrouvé le sourire. Cela fonctionne à merveille. Plus d'erreur 500. C'est vraiment gentil de prendre votre temps pour écrire tout ce détail. Toutes mes excuses pour le dérangement.
Aidez-moi à marquer ce sujet comme résolu, svp.
Last edited by miss (2017-05-12 15:38:43)
Offline
pour marquer résolu, vous devez modifier le titre (en editant le premier post)
je l'ai fait pour vous.
Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6
Offline
Pages: 1
Topic closed