Entwickler, der außergewöhnliche CRM- und Laravel-Lösungen liefert

Als erfahrener Entwickler spezialisiere ich mich auf Laravel- und Vue.js-Entwicklung, die Implementierung von Vtiger CRM sowie auf vielfältige WordPress-Projekte. Meine Arbeit zeichnet sich durch kreative, dynamische und benutzerzentrierte Weblösungen aus, die individuell an die Bedürfnisse meiner Kunden angepasst werden.

In vielen Unternehmen ist es von zentraler Bedeutung, stets die aktuellsten Daten zu sehen. Insbesondere im Modul "Kontakte" von Vtiger CRM kann es vorkommen, dass ständig neue Kundeneinträge hinzugefügt werden. Um die Benutzerfreundlichkeit zu erhöhen, kann es daher hilfreich sein, die Liste der Kontakte automatisch zu aktualisieren, sobald ein neuer Kontakt in der Datenbank erscheint – ganz ohne manuelles Neuladen der Seite.

Automatische Aktualisierung der Kontaktliste in Vtiger CRM 7.2

In vielen Unternehmen ist es von zentraler Bedeutung, stets die aktuellsten Daten zu sehen. Insbesondere im Modul "Kontakte" von Vtiger CRM kann es vorkommen, dass ständig neue Kundeneinträge hinzugefügt werden. Um die Benutzerfreundlichkeit zu erhöhen, kann es daher hilfreich sein, die Liste der Kontakte automatisch zu aktualisieren, sobald ein neuer Kontakt in der Datenbank erscheint – ganz ohne manuelles Neuladen der Seite.

In diesem Beitrag erkläre ich, wie Sie per einfachem Code zwei Dateien anpassen und so die automatische Aktualisierung der Kontaktliste in Vtiger CRM 7.2 implementieren.

Funktionsweise

Beim Laden der Kontaktliste ermittelt der JavaScript-Code den aktuell letzten Kontakt in der Datenbank (eine sog. "Bookmark"). Danach wird in regelmäßigen Abständen (alle 10 Sekunden) ein AJAX-Aufruf gestartet, der überprüft, ob nach dieser Bookmark neue Kontakte eingetragen wurden. Falls neue Kontakte vorhanden sind, wird per AJAX die Tabelle neu geladen und die neuen Datensätze werden angezeigt. Somit sehen alle Nutzer sofort, wenn ein Kollege einen neuen Kontakt anlegt.

Schritt 1: PHP-AJAX-Controller für Live-Updates erstellen

Erstellen Sie in Ihrem Modul "Kontakte" eine neue Datei
 modules/Contacts/actions/LiveUpdateAjax.php
mit folgendem Inhalt:


<?php

class Contacts_LiveUpdateAjax_Action extends Vtiger_Action_Controller {

    public function checkPermission(Vtiger_Request $request) {
        // optional: zusätzliche Berechtigungsprüfung einbauen
    }

    public function __construct() {
        $this->exposeMethod("getContacts");
        $this->exposeMethod("getLastId");
    }

    public function process(Vtiger_Request $request) {
        $mode = $request->get("mode");
        if (!empty($mode)) {
            $this->invokeExposedMethod($mode, $request);
        }
    }

    public function getContacts(Vtiger_Request $request) {
        $response = new Vtiger_Response();
        global $adb;
        $result = array();
        $res = $adb->pquery('SELECT contactid FROM vtiger_contactdetails INNER JOIN vtiger_crmentity ON vtiger_contactdetails.contactid = vtiger_crmentity.crmid WHERE contactid > ? AND vtiger_crmentity.deleted = 0 ORDER BY contactid DESC', array($request->get('record')));
        if (0 < $adb->num_rows($res)) {
            while ($row = $adb->fetchByAssoc($res)) {
                $result[] = array('id' => $row['contactid']);
            }
        }
        $response->setResult($result);
        $response->emit();
    }

    public function getLastId(Vtiger_Request $request) {
        global $adb;
        $res = $adb->pquery('SELECT contactid FROM vtiger_contactdetails ORDER BY contactid DESC LIMIT 1');
        $contactid = $adb->query_result($res, 0, 'contactid');
        $response = new Vtiger_Response();
        $response->setResult(array('id' => $contactid));
        $response->emit();
    }
}

Diese Datei stellt zwei Methoden bereit:

  • getLastId – ermittelt den aktuell letzten Kontakt (Bookmark) in der Datenbank.
  • getContacts – gibt alle Kontakte zurück, deren ID über der Bookmark liegt.

Schritt 2: JavaScript-Anpassung für die Live-Aktualisierung

Erstellen bzw. bearbeiten Sie die Datei
 layouts/v7/modules/Contacts/resources/List.js
und fügen Sie folgenden Code ein:


Vtiger_List_Js("Contacts_List_Js", {
    lastId: false,
}, {
    registerUpdateContactsEvent: function () {
        var self = this;
        var params = {
            module: 'Contacts',
            action: 'LiveUpdateAjax',
            mode: 'getLastId'
        }
        app.request.post({data: params}).then(
            function(err, data) {
                if (err === null) {
                    Contacts_List_Js.lastId = data.id;
                    setInterval(self.runUpdate, 10000);
                }
            }
        );
    },

    runUpdate: function() {
        var params = {
            module: 'Contacts',
            action: 'LiveUpdateAjax',
            mode: 'getContacts',
            record: Contacts_List_Js.lastId
        }
        app.request.post({data: params}).then(
            function(err, data) {
                data.forEach(function(entity) {
                    Contacts_List_Js.lastId = entity.id;
                });
                if (data.length > 0) {
                    var listInstance = new Vtiger_List_Js();                    
                    listInstance.loadListViewRecords();
                }
            }
        );
    },

    registerEvents : function() {
        this._super();
        this.registerUpdateContactsEvent();
    }
});

Erklärung zum JavaScript-Code:

  1. Beim Laden der Seite ruft die Funktion registerUpdateContactsEvent das Modul über einen AJAX-Aufruf auf, um die aktuelle letzte Kontakt-ID abzurufen.
  2. Diese ID wird als Bookmark (Contacts_List_Js.lastId) gespeichert.
  3. Anschließend wird mit setInterval alle 10 Sekunden die Funktion runUpdate aufgerufen, die prüft, ob Einträge mit einer höheren ID existieren.
  4. Falls neue Kontakte gefunden werden, wird die ListView per AJAX neu geladen – die Seite selbst wird nicht neu geladen.

Fazit

Mit diesen einfachen Erweiterungen in PHP und JavaScript wird die Kontaktliste in Vtiger CRM 7.2 automatisch aktualisiert, sobald ein neuer Kontakt hinzugefügt wird. Dieses Feature verbessert die Echtzeit-Kommunikation und Kollaboration im Team, da alle Mitarbeiter sofort über neue Einträge informiert werden, ohne die Seite manuell neu laden zu müssen.