Erweiterungen Anzeige-/ Editierregel erstellen Geschätzte Lektüre: 3 Minuten Anzeige- und Editierregeln können sowohl bei den allgemeinen Tabellen-Einstellungen (Abb. 1) als auch bei den Tabellenrechten der einzelnen Benutzergruppen (Abb. 2) eingetragen werden. Die Editierregel der allgemeinen Tabellen-Einstellungen erreichen Sie indem Sie bei der entsprechenden Tabelle auf das Symbol klicken. Eine auf diese Weise eingestellte Regel gilt global für alle Benutzergruppen. Eine Anzeigeregel bewirkt, dass ein bestimmter Datensatz oder eine Tabelle in der Detailansicht nur bei Erfüllung der Regel angezeigt wird. Der Datensatz oder die Tabelle kann jedoch trotzdem noch im Hintergrund über ein Skript, eine Limbas-Funktion, geändert werden. Wird eine Regel als Editierregel angelegt, kann der Datensatz oder die Tabelle sowohl in der Oberfläche, als auch über ein Hintergrundskript nur noch unter Einhaltung der Regel geändert werden. Abb.1: Einfügen einer Anzeige- oder Editierregel bei den allgemeinen Tabellen-Einstellungen Für das vom Return-Wert der Funktionen abhängige Verhalten gilt: false: Bewirkt keine Veränderung verglichen mit dem Verhalten, wenn keine Regel eingetragen wäre. Die Tabelle oder das Tabellenfeld wird angezeigt bzw. ist editierbar. true: Die Tabelle oder das Tabellenfeld wird NICHT angezeigt bzw. ist NICHT editierbar. Die aufzurufenden Funktionen können in ext_gtab.inc implementiert werden. Im Funktionsaufruf können folgende Variablen verwendet werden: $ID: Datensatz ID $gtabid: Tabellen ID $fieldid: Feld ID $key: Schlüssel des gresult-Arrays des aktuellen Datensatzes. Dieser Schlüssel ist nicht immer vorhanden. $gresult[]: Array mit Rückgabe-Ergebnis des letzten Datenbank-Zugriffs, dies kann der Inhalt der ganzen Tabelle oder eines Datensatzes sein. Dieses Array ist nicht immer vorhanden. Abb.2: Möglichkeiten zum Einfügen einer Editierregel bei den Tabellenrechten der Benutzerregeln Nachfolgender Code wird in den Extensions unter EXTENSIONS/CRM/ext_gtab.inc eingebunden. Beispiel: /** * * Date is only shown if the date in which the function is set is before the date of the parameter * @param number $ID * @param number $gtabid * @param number $key * @param array &$gresult * @param string $year */ function extShowDateBeforeYear($ID, $gtabid, $key, &$gresult, $year) { # time stamp to be compared $tsYear = strtotime($year."-01-01"); # time stamp from DB entry $tsDB = strtotime($gresult[$gtabid][$key][0]); # time in database before $year, field is shown if ($tsDB < $tsYear) { return false; } # value in DB later, field is not shown return true; } Wird diese Funktion für ein Tabellenfeld vom Typ Datum bei der Anzeigeregel wie folgt eingetragen, so wird dieses in der Detail- und Bearbeitungsansicht eines Datensatzes nur angezeigt, wenn ein Datum vor dem Jahr 2000 eingetragen ist: return extShowDateBeforeYear($ID, $gtabid, $key, $gresult, 2000); Das Beispiel wurde in der Demo-Anwendung beispielhaft in der Tabelle Zahlungseingang eingefügt. Beispiel: <div style="float:left"> /** *The field or the table is only shown on the given day of the week *@param string $day */ function extShowOnlyOnWeekday($day) { $today = getdate(); if ($today[weekday] == $day) { return false; } return true; } Wird diese Funktion bei den Tabellenrechten einer Benutzergruppe als Regel für Schreibrecht wie folgt eingetragen, so kann diese Benutzergruppe die Tabelle nur an Freitagen editieren. return extShowOnlyOnWeekday("Friday"); Diese Zeile muss in einem der beiden in Abb.2 geöffneten Felder eingetragen werden. Das Feld links oben betrifft die gesamte Tabelle, das Feld rechts unten den jeweiligen Datensatz. In der Demo Anwendung wurde das Beispiel für die Benutzergruppe admin in der Tabelle Positionen eingetragen.