You are not logged in.
Bonjour,
Sous GLPI 9.4.3, nous avons rencontré un problème lorsque nous souhaitions transféré un matériel (par exemple un ordinateur) d'entité.
Nous avions le message d'erreur suivant :
[19-Aug-2019 12:00:11 Europe/Paris] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Empty IN are not allowed' in D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php:546
Stack trace:
#0 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(516): DBmysqlIterator->analyzeCriterion(Array)
#1 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(506): DBmysqlIterator->analyseCrit(Array)
#2 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(288): DBmysqlIterator->analyseCrit(Array)
#3 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(94): DBmysqlIterator->buildQuery(Array, '', false)
#4 D:\glpi\data\www\glpitest\inc\dbmysql.class.php(580): DBmysqlIterator->execute(Array, '', false)
#5 D:\glpi\data\www\glpitest\inc\transfer.class.php(2784): DBmysql->request(Array)
#6 D:\glpi\data\www\glpitest\inc\transfer.class.php(2719): Transfer->transferSingleSupplier('1')
#7 D:\glpi\data\www\glpitest\inc\transfer.class.php(1077): Transfer->transferInfocoms('Computer', '9984', '9984')
#8 D:\glpi\data\www\glpitest\inc\transfer.class.php(203): in D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php on line 546
Après analyse plus poussé, le problème se produit lorsque le matériel est lié à un fournisseur qui n'a pas de contrats.
En regardant le fichier transfert.class.php nous avons modifié les lignes suivantes afin que tout rentre dans l'ordre (en se basant sur d'autres lignes de cette classe) :
Dans la function transferSingleSupplier($ID)
--> ligne 2775, ajout du contrôle "if (isset($this->needtobe_transfer['Contract']) && count($this->needtobe_transfer['Contract'])) { " avant de lancer la requête avec un tableau vide
--> ligne 2792, amélioration du controle en ajoutant le count : "if (isset($this->needtobe_transfer[$itemtype]) && count($this->needtobe_transfer[$itemtype])) { "
A votre disposition si besoin de plus de précisions
Cordialement
Offline
Pour information, on retrouve aussi les problème pour un matériel lié à un fournisseur sans contacts.
--> fichier transfert.class.php, function transferSupplierContacts($ID, $newID) {
Ajout de la ligne
if (isset($this->needtobe_transfer['Contact']) && count($this->needtobe_transfer['Contact'])) {
avant la requête
$iterator = $DB->request([
'FROM' => 'glpi_contacts_suppliers',
'WHERE' => [
'suppliers_id' => $ID,
'NOT' => ['contacts_id' => $this->noneedtobe_transfer['Contact']]
]
]);
Offline
Bonjour,
Sous GLPI 9.4.3, nous avons rencontré un problème lorsque nous souhaitions transféré un matériel (par exemple un ordinateur) d'entité.
Nous avions le message d'erreur suivant :[19-Aug-2019 12:00:11 Europe/Paris] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Empty IN are not allowed' in D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php:546
Stack trace:
#0 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(516): DBmysqlIterator->analyzeCriterion(Array)
#1 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(506): DBmysqlIterator->analyseCrit(Array)
#2 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(288): DBmysqlIterator->analyseCrit(Array)
#3 D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php(94): DBmysqlIterator->buildQuery(Array, '', false)
#4 D:\glpi\data\www\glpitest\inc\dbmysql.class.php(580): DBmysqlIterator->execute(Array, '', false)
#5 D:\glpi\data\www\glpitest\inc\transfer.class.php(2784): DBmysql->request(Array)
#6 D:\glpi\data\www\glpitest\inc\transfer.class.php(2719): Transfer->transferSingleSupplier('1')
#7 D:\glpi\data\www\glpitest\inc\transfer.class.php(1077): Transfer->transferInfocoms('Computer', '9984', '9984')
#8 D:\glpi\data\www\glpitest\inc\transfer.class.php(203): in D:\glpi\data\www\glpitest\inc\dbmysqliterator.class.php on line 546Après analyse plus poussé, le problème se produit lorsque le matériel est lié à un fournisseur qui n'a pas de contrats.
En regardant le fichier transfert.class.php nous avons modifié les lignes suivantes afin que tout rentre dans l'ordre (en se basant sur d'autres lignes de cette classe) :
Dans la function transferSingleSupplier($ID)--> ligne 2775, ajout du contrôle
if (isset($this->needtobe_transfer['Contract']) && count($this->needtobe_transfer['Contract'])) {
avant de lancer la requête avec un tableau vide
--> ligne 2792, amélioration du controle en ajoutant le count :
if (isset($this->needtobe_transfer[$itemtype]) && count($this->needtobe_transfer[$itemtype])) {
A votre disposition si besoin de plus de précisions
Cordialement
Offline