Cet article propose un Patch fonctionnel sur SugarCRM 6.5.9 pour traiter une problématique récurrente sur les forums de SugarCRM, et qui a souvent pour réponse : « ce n’est pas possible ».
En effet l’identifiant est indispensable pour mettre à jour ses données dans SugarCRM lors d’un import.
Il existe un article sur le sujet (http://www.eggsurplus.com/home/content/import-update-by-email-address/ ), mais le processus est très compliqué et surtout il ne fonctionne qu’avec le module « Contact ».
Voici donc un petit « patch » qui vous permettra d’importer et mettre à jour vos données (vos contacts par exemple) en fonction de l’adresse email.
Attention : pour que ce patch fonctionne, l’adresse email doit être de type « email » et non pas « varchar ». Cette précision est surtout valable pour les « custom modules ».
Il faut éditer le fichier « modules/Import/Importer.php » et trouver la fonction « importRow($row) ».
Rendez-vous ensuite vers la fin de la fonction :
// if the id was specified $newRecord = true; if ( !empty($focus->id) ) { ...
Juste avant « // if the id was specifie » rajoutez le code suivant :
//PATCH TO UPDATE BY EMAIL //if the email was specified if ( !empty($focus->email1) ) { // check if it already exists $query = "SELECT email_addresses.email_address , {$focus->table_name}.id FROM email_addresses, {$focus->table_name}, email_addr_bean_rel WHERE {$focus->table_name}.id = email_addr_bean_rel.bean_id AND email_addresses.id = email_addr_bean_rel.email_address_id AND {$focus->table_name}.deleted = 0 AND email_addr_bean_rel.bean_module = '".get_class($focus)."' AND LOWER(email_addresses.email_address) = LOWER('{$focus->email1}') GROUP BY email_addresses.email_address;"; $result = $focus->db->query($query) or sugar_die("Error selecting sugarbean: "); $dbrow = $focus->db->fetchByAssoc($result); if (isset ($dbrow['id']) && $dbrow['id'] != -1) { $focus->id = $dbrow['id'] ; } }
Que fait cette fonction ?
Elle regarde si vous avez renseigné une adresse email lors de votre import. Si c’est le cas, elle va aller chercher si un identifiant est lié à cet email. Si un identifiant est trouvé, il est rajouté dans « $focus », ce qui suffira à faire la mise à jour, car maintenant l’identifiant SugarCRM est spécifié !
Aller plus loin : cette fonction peut être modifiée selon vos besoins : il suffit de changer la condition d’entrée et la requête SQL et de bien penser à retourner l’identifiant et de le rajouter dans « $focus ».