You are not logged in.
Pages: 1
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
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...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
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
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...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
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...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
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
Pages: 1