©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
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.
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:
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:
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.
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten