Home PHP Comment importer et mettre à jour des données dans SugarCRM lorsque l’identifiant n’est pas disponible ?

Comment importer et mettre à jour des données dans SugarCRM lorsque l’identifiant n’est pas disponible ?

  Julien M. Développeur PHP 5 min 20 août 2013

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 ».

 

Lire les articles similaires

Laisser un commentaire

Social Share Buttons and Icons powered by Ultimatelysocial