pluginsGLPI / formcreator

GLPI Plugin Formcreator (DOWNLOAD : https://github.com/pluginsGLPI/formcreator/releases)
http://www.teclib-edition.com
GNU General Public License v3.0
174 stars 125 forks source link

Champs d'un objet GLPI selectionné #3374

Closed EC2311 closed 1 year ago

EC2311 commented 1 year ago

Bonjour

Est-il possible de 'recuperer' des champs secondaires d'une table selectionnée en tant qu'objetGLPI ? Ex : on choisit glpi_users je selectionne un utilisateur : ok

dans le ticket généré, comment afficher le champs 'name' de cette table ?

Merci

btry commented 1 year ago

Bonjour

Vous pouvez utiliser des tags avec la syntaxe suivante ##answer_42.property## .

Le mot property est à remplacer par le nom en anglais de la propriété souhaitée. Les valeurs disponibles sont récupérables dans les critères de recherche de l'objet concerné. Si la propriété contient des espaces, il faut les remplacer par des underscores _ . La première lettre de la propriété doit être ne majuscule.

En version 2.14 il y aura une fonctionnalité pour rencre tout cela plus facile: https://github.com/pluginsGLPI/formcreator/pull/3301

EC2311 commented 1 year ago

merci bien pour votre reponse. cela fonctionne quelque soit les versions formcreator ?

answer_671.Name##, sachant que cette question correspond au choix de l'utilisateur

Merci

btry commented 1 year ago

Cela fait pas mal de temps que la fonctionnalité existe. Je n'ai plsu en tête la date d'introduction de la fonctionnalité. Comme vous êtes forcément passé en GLPI 10 sur toutes vos instances (normalement), vous aurez forcément accès à cette syntaxe.

EC2311 commented 1 year ago

Bonjour Merci pour votre reponse,

Version 2.13.7 formcreator la zone n'est pas renseignée dans le texte et genere une erreur dans la log (id inconnu dans dropdownfield.class.php) en remplacant "name" par "field" cela fonctionne. $searchOption = $item->getSearchOptionByField("field", $property);

     // Execute search
     $data = Search::prepareDatasForSearch(get_class($item), [
        'criteria' => [
           [
              'field'      => $searchOption['id'],

si l'on souhaite récupérer le champs "locations_id" (de la table glpi_users) et donc son 'name' associé -> ko : le tableau $searchOption est vide.

Ce serait bien de pouvoir utiliser ces "zones supplémentaires" dans les tests de conditions (masqué sauf si, etc) En l'occurence comme ici seules sont listées les questions, ajouter une question type 'zone annexe' ? qu'en pensez vous ?

btry commented 1 year ago

Bonjour

J'ai fait un test avec un formulaire simple dans lequel je sélectionne un utilisateur. Aucune modification du code n'a été faite. Dans le ticket cible j'ai utilisé la balise ##answer_914.Location##

La balise est bien résolue : j'obtiens le nom du lieu de l'utilisateur. Je pense que vous n'avez pas utilisé le bon nom de propriété.

En ce qui concerne l'utilisation de cette fonctionnalité dans les conditions, ce n'est pas dans la roadmap. Je pense qu'il faudrait éviter cette fonctionnalité pour pouvoir déplacer la mise à jour de la visibilité des questions côté navigateur. Actuallement c'est le serveur qui s'en charge et cela peut causer des ralentissements.

EC2311 commented 1 year ago

j'ai installé une v10 "neuve" sans migration et uniquement le plugin formcreator : ca passe en effet sans souci Mais image

table glpi_users (uniquement dans le formulaire) Location : ok Firstname : ko

[2023-09-29 11:32:05] glpiphplog.WARNING: *** PHP User Warning (512): No search option found for Firstname in C:\wamp64\www\glpi\plugins\formcreator\inc\field\dropdownfield.class.php at line 732 Backtrace : ...rmcreator\inc\field\dropdownfield.class.php:732 trigger_error() plugins\formcreator\inc\formanswer.class.php:1359 GlpiPlugin\Formcreator\Field\DropdownField->parseObjectProperties() plugins\formcreator\inc\targetticket.class.php:831 PluginFormcreatorFormAnswer->parseTags() plugins\formcreator\inc\formanswer.class.php:994 PluginFormcreatorTargetTicket->save() plugins\formcreator\inc\formanswer.class.php:1226 PluginFormcreatorFormAnswer->generateTarget() src\CommonDBTM.php:1324 PluginFormcreatorFormAnswer->post_addItem() plugins\formcreator\ajax\formanswer.php:60 CommonDBTM->add()

pourtant la zone Firstname existe bien dans la table, je pense egalement dans la searchoption (?) vu que cette zone apparait dans les filtres ?

Je continue mes tests

EC2311 commented 1 year ago

j'ai ajouté ceci lors de l'appel

     $property = str_replace("_", " ", $property);
     $searchOption = $item->getSearchOptionByField("name", $property);

     **if(!isset($searchOption['id']))
     {
         $property=strtolower($property);
         $searchOption = $item->getSearchOptionByField("field", $property);
     }**

si le champs spécifié dans le formulaire n'est pas connu en tant que name, le searchOption['id'] est alors non trouvé : test avec la valeur en tant que champs de la table (field) (ex prénom, ou name etc)

cela permet d'elargir les champs disponibles ? De maniere générale, il faudrait peut etre prévoir le cas où la personne spécifie un champs non existant car sinon on a une belle erreur en interactif. Qu'en pensez vous ?

btry commented 1 year ago

Bonjour

Vous avez spécifié la propriété Firstname, mais dans le code de GLPI, la propriété est "First name". Quand il y a un espace, remplacez-le par un underscore, et ça doit fonctionner sans patch.

Exemple : ##answer_1.First_name##

https://github.com/glpi-project/glpi/blob/caa066572fdedc2e61b26db23d25fd366a31792f/src/User.php#L3606

EC2311 commented 1 year ago

En effet! méconnaissance complete de ma part pour le fonctionnement un grand merci

btry commented 1 year ago

Bonjour

La question étant résolue, je ferme ce ticket.