You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2019-05-23 17:14:10

albatard
Member
Registered: 2019-05-07
Posts: 4

API critères de recherche manquants.

Bonjour,

Je souhaite gérer les versions de mes logiciels dans GLPI via l'API et je rencontre des difficultés.

Pour faire court quand ordinateur envoie les informations de ses logiciels installés, je veux regarder si la SoftwareVersion existe pour ce Software et cette version,
afin de l'associer si elle existe, ou de la créer dans le cas contraire.

Or il m'est impossible de faire une recherche de SoftwareVersion par software_id, le critère n'étant pas disponible.

Pire, j'ai voulu contourner ce manque de manière peu orthodoxe , en faisant une recherche sur le nom de version, puis pour chacun des objets de la liste
retournée un GET pour avoir toutes les information et pouvoir vérifier. Mais il m'est même impossible de réucpérer l'ID des SoftwareVersion retournées par
la recherche, donc impossible de faire un GET sur chacune (même en tatonnant avec forcedisplay[0]=XX)

Pouvez vous svp, m'indiquer la marche à suivre pour récupérer l'information dont j'ai besoin?

Cordialement.

Last edited by albatard (2019-05-24 16:26:03)

Offline

#2 2019-05-24 17:00:48

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 4,545

Re: API critères de recherche manquants.

vous pouvez avec l'url ci dessous récupérer toutes les versions d'un logiciel

$url="/search/Software/";
$url .= "?is_deleted=0&as_map=0";
$url .="&criteria[0][field]=1&criteria[0][searchtype]=contains&criteria[0][value]=monLogiciel";
$url .="&forcedisplay[0]=5";

ou même avec le nom de version et nom de logiciel

$url="/search/Software/";
$url .= "?is_deleted=0&as_map=0";
$url .="&criteria[0][field]=1&criteria[0][searchtype]=contains&criteria[0][value]=Monlogiciel";
$url .="&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=maversion";
$url .="&forcedisplay[0]=5";

et pour une recherche par softwareid

$url="/search/Software/";
$url .= "?is_deleted=0&as_map=0";
$url .="&criteria[0][field]=2&criteria[0][searchtype]=contains&criteria[0][value]=MonSoftwareID";
$url .="&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=5.03.01";

$url .="&forcedisplay[0]=5";


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+formcreator2.5.2 PHP7.0 Mariadb10
*GLPI 9.4.2(behaviours2.2.1+fusioninventoty 9.4+1.1+applicatifs2.5.0+fields 1.9.1)hebergé sur serveur mutualisé.

Offline

#3 2019-05-24 17:17:14

albatard
Member
Registered: 2019-05-07
Posts: 4

Re: API critères de recherche manquants.

Bonjour,

Merci de votre réponse.

Cependant, si cette solution répond bien à la première aprtie de mon problème (que j'vais a final réussi a contourner), elle ne me sert à obtenir que les noms de version et non les ID.

Or, je souhaite récupérer ensuite l'ID de la version pour créer mon objet d'association computer_softwareVersion, et c'est ce qui pose au final problème.

Cordialement.

Offline

#4 2019-05-25 15:36:57

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 4,545

Re: API critères de recherche manquants.

si vous n'avez pas peur et que vous avez vraiment besoin de ce ID vous pouvez modifier la classe software et ajouter un critère de recherche dans la fonction  rawSearchOptions()

inserez ligne 662 ( en version 9.4)

$tab[] = [
         'id'                 => '1002',
         'table'              => 'glpi_softwareversions',
         'field'              => 'id',
         'name'               => __('ID'),
         'forcegroupby'       => true,
         'datatype'           => 'number',
         'massiveaction'      => false,
         'joinparams'         => [
            'jointype'           => 'child'
         ]
      ];

et ensuite vous pouvez ajouter  dans votre appel d'api  forcedisplay[0]=1002 pour récupérer l'id de version.

j'ai un doute sur l'index 1002 ( je ne sais pas comment sont arttibués ces index, je ne pense pas avoir de collision mais...)
il y a un risque à modifier le coeur car vous perdrez  la modif à la prochaine version.
il est probablement possible de demander l'ajout dans le coeur de la prochaine version


$url="/search/Software/";
$url .= "?is_deleted=0&as_map=0";
$url .="&criteria[0][field]=1&criteria[0][searchtype]=contains&criteria[0][value]=Monlogiciel";
$url .="&criteria[1][field]=5&criteria[1][searchtype]=contains&criteria[1][value]=maversion";
$url .="&forcedisplay[0]=1002";


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+formcreator2.5.2 PHP7.0 Mariadb10
*GLPI 9.4.2(behaviours2.2.1+fusioninventoty 9.4+1.1+applicatifs2.5.0+fields 1.9.1)hebergé sur serveur mutualisé.

Offline

#5 2019-05-25 16:31:33

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 4,545

Re: API critères de recherche manquants.

pour associer une nouvelle version à un logiciel(c'est que que vous voulez faire si j'ai bien compris) il y a une methode plus simple :

$url="/Softwareversion/";
  $fields = '{"input": { "softwares_id": $mySoftware_ID , "name": "manouvelleversion","states_id": 1,"entities_id": 0,"is_recursive": 1,"comment": "version créée par api","operatinsystems_id":0}}'  ;

puis vous faites un post pour créer la version associée au logiciel


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+formcreator2.5.2 PHP7.0 Mariadb10
*GLPI 9.4.2(behaviours2.2.1+fusioninventoty 9.4+1.1+applicatifs2.5.0+fields 1.9.1)hebergé sur serveur mutualisé.

Offline

#6 2019-05-27 10:03:23

albatard
Member
Registered: 2019-05-07
Posts: 4

Re: API critères de recherche manquants.

Bonjour,

Ce n'est pas jouter une nouvelle version qui pose problème, et je n'ai aps accès au code source de l'instance de GLPI avec laquelle j'interagis. Je vais essayer de décrire mon besoin plus clairement.

J'ai des ordinateurs avec des paquets "maison" qui se connectent à GLPI via l'api afin de renseigner un certains nombre d'information, dont les versions de ces paquets (il y a 4 paquets différents pour l'instant).

Je souhaite donc pour chaque ordinateur connaitre la version du paquet actuellement installée. Quand l'ordinateur se connecte je cherche donc à savoir si la version (SoftwareVersion) du paquet toto existe déjà, et si oui je crée

une association (computer_softwareversion) mais pour cela il me faut l'id de l'objet SoftwareVersion, que je ne peut pas récupérer. Si la version n'existe pas encore, je la crée (ce cas fonctionne bien car je récupère l'id lors de

la création). En l'état GLPI crée un objet SoftwareVersion à chaque fois qu'un nouvel ordinateur se connecte avec la même version d'un paquet.

La solution (sale) que j'envisage d'utiliser est de faire un GET sur /glpi/apirest.php/Software/1/SoftwareVersion puis une boucle for sur le tableau obtenu pour chercher la version correspondante...

Cordialement.

Offline

Board footer

Powered by FluxBB