Ricerche predefinite in SugarCRM CE 6.5 o SuiteCRM

Scritto sabato 03 novembre 2018

In​ SugarCRM CE 6.5 o in SuiteCRM​ ogni utente può creare, su ogni modulo, dei filtri di ricerca salvati da riutilizzare più volte nella ListView, inoltre il sistema "ricorda" l'ultima ricerca fatta in un determinato modulo.

Molto spesso però i clienti chiedono che si definiscano dei filtri di ricerca predefiniti che tutti gli utenti, o gli utenti di un determinato ruolo, si ritrovino già pronti nei moduli su cui lavorano più frequentemente, oppure che qualche modulo "parta sempre" con una determinata ricerca preimpostata.

Ho trovato un interessante articolo di Chad Hutchins che mi ha messo sulla strada giusta per fare entrambe queste cose.

Utilizzando il logic_hook "after_login" è possibile applicare dei filtri o delle ricerche salvate a tutti gli utenti nel momento in cui effettuano il login.

Occorre quindi aggiungere un logic_hook in custom/modules/Users/logic_hook.php così:

$hook_array['after_login'][] = Array(0,
'Logic hook per la creazione di filtri e delle ricerche predefiniti per l\'utente corrente',
'custom/modules/Users/UsersHooks.php', 'UsersHooks', 'addDefaultFilters');

 Dopodiché si crea il file custom/modules/Users/UsersHooks.php (nel metodo addDefaultFilters vengono mostrati due esempi di utilizzo):

<?php

require_once('modules/SavedSearch/SavedSearch.php');
require_once('modules/MySettings/StoreQuery.php');

class UsersHooks {

    /**
     * Logic hook per la creazione di filtri e delle ricerche predefiniti per l'utente corrente
     * @param object $bean
     * @param object $event
     * @param array $arguments
     */
    function addDefaultFilters(&$bean, $event, $arguments) {
        // Crea una filtro di partenza sulle aziende clienti
        $this->createStoreQuery('Accounts', array('searchFormTab' => 'advanced_search', 'query' => true,
            'account_type_advanced' => 'Customer', 'search_module' => 'Accounts', 'action' => 'index',
            'orderBy' => 'NAME', 'sortOrder' => 'ASC'));
        // Crea una ricerca salvata sulle aziende prospect
        $this->createSavedSearch('Accounts', 'Aziende prospect', array('searchFormTab' => 'advanced_search', 'query' => true,
            'account_type_advanced' => 'Prospect', 'search_module' => 'Accounts', 'action' => 'index',
            'orderBy' => 'NAME', 'sortOrder' => 'ASC'));
    }

    /**
     * Creazione SavedSearch per l'utente corrente
     *
     * @param string $strModule Il modulo su cui creare la SavedSearch
     * @param string $strName Il nome da assegnare alla SavedSearch
     * @param array $arySearchQuery La ricerca da salvare
     */
    private function createSavedSearch($strModule, $strName, $arySearchQuery) {
        global $current_user, $db;

        $beanSavedSearch = new SavedSearch('');
        $beanSavedSearch->name = $strName;
        $beanSavedSearch->search_module = $strModule;
        $beanSavedSearch->contents = base64_encode(serialize($arySearchQuery));
        $beanSavedSearch->assigned_user_id = $current_user->id;
        $strQuery = 'SELECT id FROM saved_search WHERE deleted = "0" AND assigned_user_id = "'
            . $current_user->id . '"' . ' AND search_module =  "' . $strModule . '" AND name = "' . $strName . '"';
        $rst = $db->query($strQuery);
        if ($row = $db->fetchByAssoc($rst)) {
            $beanSavedSearch->id = $row['id'];
            $strId = $beanSavedSearch->save();
            $GLOBALS['log']->debug('SavedSearch ' . $strName . ' for module ' . $strModule . ' updated for user '
                . $current_user->name . ' [' . $current_user->id . ']: ' . $row['id']);
        }
        else {
            $beanSavedSearch->new_schema = true;
            $strId = $beanSavedSearch->save();
            $GLOBALS['log']->debug('SavedSearch ' . $strName . ' for module ' . $strModule . ' created for user '
                . $current_user->name . ' [' . $current_user->id . ']: ' . $strId);
        }
    }

    /**
     * Creazione StoreQuery per l'utente corrente
     *
     * @param string $strModule Il modulo su cui creare la StoreQuery
     * @param array $arySearchQuery La ricerca da salvare
     */
    private function createStoreQuery($strModule, $arySearchQuery) {
        $beanStoreQuery = new StoreQuery();
        $beanStoreQuery->query = $arySearchQuery;
        $beanStoreQuery->SaveQuery($strModule);
    }
}
?>

 Problemi? Contattaci per una consulenza professionale su SugarCRM CE o SuiteCRM.