Bonjour, J’ai bien compris cette partie et je suis donc parvenue au fonctionnement de cette liaison simple. J’ai toutefois une liaison plus compliquée à mettre en œuvre et je crois que je n’appréhende pas correctement le paramètre joinparams.
Le plugin sur lequel je travaille étend ticketstasks. Le plugin stocke les informations standard dans la table glpi_tickettasks et les informations spécifiques aux plugins dans sa table glpi_plugin_monplugin_tickettasks. Cette table dispose donc d’une liaison avec glpi_tickettasks qui se nomme tickettasks_id. Cette table contient aussi une liaison vers glpi_users avec un champ nommé user_arbitre. Ce plugin doit ajouter des éléments de recherche dans les tickets, et par exemple, un champ « Arbitre » correspondant à la liaison entre glpi_users.id et glpi_plugin_monplugin_tickettasks.user_arbitre. Pour que cela fonctionne, je dois donc procéder à des liaisons multiples (ticket -> tickettasks -> monplugin_tickettasks), voici ce que j’ai tenté et qui ne fonctionne pas : function plugin_monplugin_getAddSearchOptions($itemtype) { $opt = array(); if ($itemtype == 'Ticket') { $opt['arbitrage'] = 'Arbitrage'; $opt[400]['table'] = 'glpi_users'; $opt[400]['field'] = 'name'; $opt[400]['name'] = 'Arbitre'; $opt[400]['linkfield'] = 'user_arbitre'; $opt[400]['datatype'] = 'itemlink'; $opt[400]['right'] = 'own_ticket'; $opt[400]['joinparams'] = array('beforejoin' => array('table' => 'glpi_plugin_monplugin_tickettasks', 'joinparams' => array('beforejoin' => array('table' => 'glpi_tickettasks','joinparams' => array('jointype' => 'child'))))); } return $opt; } Le champ apparait bien dans la liste des éléments de recherche, mais la jointure dans requête SQL renvoyée n’est pas correcte. Le debug m’informe que Unknown column 'glpi_tickettasks.plugin_monplugin_tickettasks_id' in 'on clause' Pour ce que je cherche à faire, la jointure est inversée. Elle devrait être du type glpi_tickettasks.id = glpi_plugin_monplugin_tickettasks.tickettasks_id La requête generée est SELECT 'yannick.moli...@dixinfor.com' AS currentuser, `glpi_tickets`.`id` AS ITEM_0, `glpi_tickets`.`name` AS ITEM_1, `glpi_tickets`.`id` AS ITEM_1_2, `glpi_tickets`.`content` AS ITEM_1_3, `glpi_tickets`.`status` AS ITEM_1_4, `glpi_entities`.`completename` AS ITEM_2, `glpi_tickets`.`status` AS ITEM_3, `glpi_tickets`.`date_mod` AS ITEM_4, `glpi_tickets`.`date` AS ITEM_5, `glpi_tickets`.`priority` AS ITEM_6, GROUP_CONCAT(DISTINCT `glpi_users_647c2805c3795643b0f52f520e7cdb86`.`id` SEPARATOR '$$$$') AS ITEM_7, GROUP_CONCAT(DISTINCT CONCAT(`glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`users_id`, ' ', `glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`alternative_email`) SEPARATOR '$$$$') AS ITEM_7_2, GROUP_CONCAT(DISTINCT `glpi_users_c5e682856a6d6fe48b5aed8f8b238708`.`id` SEPARATOR '$$$$') AS ITEM_8, GROUP_CONCAT(DISTINCT CONCAT(`glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`users_id`, ' ', `glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`alternative_email`) SEPARATOR '$$$$') AS ITEM_8_2, `glpi_itilcategories`.`completename` AS ITEM_9, `glpi_tickets`.`due_date` AS ITEM_10, `glpi_tickets`.`status` AS ITEM_10_2, `glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`name` AS ITEM_11, `glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`realname` AS ITEM_11_2, `glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`id` AS ITEM_11_3, `glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`firstname` AS ITEM_11_4, `glpi_tickets`.`id` AS id FROM `glpi_tickets` LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` = `glpi_entities`.`id` ) LEFT JOIN `glpi_tickets_users` AS glpi_tickets_users_a900a61824c3906cc82f90407e525192 ON (`glpi_tickets`.`id` = `glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`tickets_id` AND `glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`type` = 1 ) LEFT JOIN `glpi_users` AS glpi_users_647c2805c3795643b0f52f520e7cdb86 ON (`glpi_tickets_users_a900a61824c3906cc82f90407e525192`.`users_id` = `glpi_users_647c2805c3795643b0f52f520e7cdb86`.`id` ) LEFT JOIN `glpi_tickets_users` AS glpi_tickets_users_74690f2626744a37ace4c70dd87cea83 ON (`glpi_tickets`.`id` = `glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`tickets_id` AND `glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`type` = 2 ) LEFT JOIN `glpi_users` AS glpi_users_c5e682856a6d6fe48b5aed8f8b238708 ON (`glpi_tickets_users_74690f2626744a37ace4c70dd87cea83`.`users_id` = `glpi_users_c5e682856a6d6fe48b5aed8f8b238708`.`id` ) LEFT JOIN `glpi_itilcategories` ON (`glpi_tickets`.`itilcategories_id` = `glpi_itilcategories`.`id` ) LEFT JOIN `glpi_tickettasks` ON (`glpi_tickets`.`id` = `glpi_tickettasks`.`tickets_id` ) LEFT JOIN `glpi_plugin_monplugin_tickettasks` AS glpi_plugin_monplugin_tickettasks_e5ca2f53018fdc28a31faf534186b3a2 ON (`glpi_tickettasks`.`plugin_monplugin_tickettasks_id` = `glpi_plugin_monplugin_tickettasks_e5ca2f53018fdc28a31faf534186b3a2`.`id` ) LEFT JOIN `glpi_users` AS glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b ON (`glpi_plugin_ridixinfor_tickettasks_e5ca2f53018fdc28a31faf534186b3a2`.`user_arbitre` = `glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`id` ) WHERE `glpi_tickets`.`is_deleted` = '0' AND ( `glpi_tickets`.`entities_id` IN ('0', '38', '80', '40', '9', '86', '81', '41', '32', '10', '42', '34', '55', '11', '53', '43', '76', '12', '89', '13', '63', '44', '45', '88', '48', '49', '87', '71', '3', '14', '36', '46', '93', '47', '15', '104', '77', '1', '82', '83', '90', '108', '74', '75', '16', '17', '26', '29', '67', '79', '50', '51', '27', '119', '25', '52', '54', '101', '117', '5', '56', '57', '70', '58', '59', '60', '19', '106', '102', '37', '61', '20', '78', '73', '91', '18', '62', '65', '64', '33', '103', '98', '35', '113', '84', '85', '95', '66', '2', '28', '30', '99', '21', '118', '72', '39', '115', '96', '105', '31', '22', '107', '92', '4', '100', '24', '68', '23', '69', '97', '116', '114', '94', '6', '7', '8', '109', '110', '111', '112') ) AND ( (`glpi_users_user_arbitre_3bf0be72301038f232c35fde040b8a1b`.`id` = '6') ) GROUP BY `glpi_tickets`.`id` ORDER BY ITEM_4 DESC Je n’ai pas trouvé, dans la classe ticket ou dans la classe computer, d’exemple dont je pourrais m’inspirer pour m’aider à résoudre ce problème, qui je pense viens d’un problème de compréhension du paramètre joinparams. La documentation en ligne à ce sujet est assez pauvre pour comprendre le fonctionnement. Pourriez-vous m’expliquer ou je fais erreur ou m’indiquer éventuellement un exemple dont je pourrais m’inspirer ? Merci, Yannick De : Glpi-dev [mailto:glpi-dev-boun...@gna.org] De la part de Julien Dombre Envoyé : mardi 13 mai 2014 22:23 À : glpi-dev@gna.org Objet : Re: [Glpi-dev] Jointure dans les recherches Bonsoir, Votre questionnement manque vraiment de précision pour vous apportez une réponse vraiment précise. Avoir plusieurs colonnes utilisateurs (ou autre d'ailleurs) n'a rien de bloquant. Vous avez le même cas dans la table glpi_tickets par exemple ou même glpi_computers. La définition des éléments est alors assez simple en suivant les coding standards de GLPI. Pour les computers par exemple la définition dans SearchOptions donne : $tab[24]['table'] = 'glpi_users'; $tab[24]['field'] = 'name'; $tab[24]['linkfield'] = 'users_id_tech'; $tab[24]['name'] = __('Technician in charge of the hardware'); $tab[24]['datatype'] = 'dropdown'; $tab[24]['right'] = 'own_ticket'; $tab[70]['table'] = 'glpi_users'; $tab[70]['field'] = 'name'; $tab[70]['name'] = __('User'); $tab[70]['datatype'] = 'dropdown'; $tab[70]['right'] = 'all'; Tout est dans le linkfield qui est spécifié pour l'élément 24. Par défaut ce champ de liaison (ce que vous appelé colonne) est calculé automatiquement à partir du nom de la table (glpi_users -> users_id). Pour l'élément 24 on le force à users_id_tech qui est le 2eme champ de liaison vers glpi_users. Ceci est vrai pour une liaison simple. Pour une liaison plus complexe il faut utilisé un autre parmètre "joinparam" pour spécifier la jointure plus complexe à utiliser. Cordialement, Julien Dombre Le 13/05/2014 22:11, Yannick MOLINET a écrit : Bonsoir, J’ai un problème avec le fonctionnement des jointures pour les commandes Search. La table de mon plugin contient plusieurs colonnes contenant des id utilisateurs et je ne peux donc pas utiliser les jointures par défaut pour effectuer les liaisons avec la table glpi_users. Je voudrais donc savoir comment je peux spécifier le nom de la colonne source dans la table de mon plugin ? Merci, Yannick _______________________________________________ Glpi-dev mailing list Glpi-dev@gna.org<mailto:Glpi-dev@gna.org> https://mail.gna.org/listinfo/glpi-dev
_______________________________________________ Glpi-dev mailing list Glpi-dev@gna.org https://mail.gna.org/listinfo/glpi-dev