Horizontale Filter auf der Ebene von Subskriptionen, Gruppen oder Benutzern verwenden eine SQL-Klausel, um Daten von der Quellendatenquelle auszuwählen. Der Inhalt der SQL-Klausel wird über die Seite "Zeilen" im Notizbuch Erweiterte Subskription - Definition für DB2 DataPropagator-Subskriptionen bzw. die Seite "Zeilen" im Notizbuch Erweiterte Replikationssubskription für JDBC-Subskriptionen gesteuert. Gehen Sie wie folgt vor, um eines dieser Notizbücher zu öffnen:
Gehen Sie wie folgt vor, um Daten auf der Subskriptionsebene zu filtern
Geben Sie eine SQL-Klausel auf der Seite "Zeilen" des Notizbuchs Subskription in das Feld Alle erforderlichen Zeilen ein. Die gesamte SQL-Klausel muss in einer Zeile und im folgenden Format eingegeben werden:
Stadt='meinWert'
Geben Sie am Anfang der SQL-Klausel nicht WHERE ein. WHERE wird der in das Feld eingegebenen Klausel automatisch hinzugefügt. Die folgende Klausel z. B. synchronisiert nur die Spalten, die den Wert "10573 Berlin" in der Spalte "Stadt" haben:
Stadt='10573 Berlin'
Gehen Sie wie folgt vor, um Daten auf der Gruppenebene zu filtern
Stadt=':fcity.'
Dabei ist :fcity. ein Parameter für den Spaltenwert.
Es wird empfohlen, dass Sie Ihren Parameternamen eindeutige Bezeichnungen geben, indem Sie zusätzlichen Text hinzufügen. Beginnen Sie z. B. den Parameternamen mit einem Doppelpunkt (:), und beenden Sie ihn mit einem Punkt (.).
10573 Berlin
Sie können auch einen Sonderwert verwenden. Mit dem Wert $USERNAME können Sie eine Sync Server-Benutzer-ID als Wert dieses Parameters einfügen. Dadurch können Sie Zeilen, die von bestimmten Benutzern erstellt wurden, mit der entsprechenden Sync Server-Benutzer-ID in ein bestimmtes Feld in die Datenquelle einfügen.
Jeder Benutzer, der dieser Gruppe zugeordnet ist, empfängt nur die Zeilen aus der Tabelle MPPerson, die den Wert 10573 Berlin in der Spalte "Stadt" haben. Andere Gruppen empfangen abhängig von den konfigurierten Filtern die gesamte Tabelle MPPerson oder eine bestimmte Untermenge der Tabelle MPPerson.
Gehen Sie wie folgt vor, um Daten auf der Benutzerebene zu filtern
city=':fcity.' und id=':fid.'
Dabei ist :fcity. ein Parameter für den Wert in der Spalte "Stadt" und :fid. ein Parameter für den Wert in der Spalte "ID".
10573 Berlin
900000401
Der Benutzer empfängt nur Datensätze, die den Wert 10573 Berlin in der Spalte "Stadt" und 900000401 in der Spalte "ID" haben. In der Tabelle MPPerson gibt es einen Datensatz mit diesem Wert. Andere Benutzer, die derselben Gruppe zugeordnet sind, empfangen nur Zeilen aus der Tabelle MPPerson, die den Wert 10573 Berlin in der Spalte "Stadt" und den Wert in der Spalte "Benutzer" haben, der durch ihre Datenfilter festgelegt wurde. Andere Gruppen empfangen abhängig von der Konfiguration der Filter die gesamte Tabelle MPPerson oder eine bestimmte Untermenge der Tabelle MPPerson.
In einigen Situationen der Datenbank- und Benutzerverwaltung ist es erforderlich, im Feld Zeilenuntermenge für einzelne Benutzer eine komplexe SQL-WHERE-Klausel zu definieren, um die Zeilen, die eine Gruppe oder ein Benutzer anzeigen kann, einzuschränken. Bei der Definition der Filter können Sie auf eine Tabelle in der Spiegeldatenbank zurückgreifen, Parameter für die Gruppe oder den Benutzer verwenden oder auch eine Kombination dieser beiden Methoden anwenden. Die grundlegenden Schritte zum Erstellen eines einfachen horizontalen Filters sind in Definieren einfacher horizontaler Filter erläutert.
DB2 Everyplace Sync Server enthält eine Untermenge für die standardmäßige SQL-WHERE-Implementierung, die für die Filter verwendet werden kann. Informationen zur Syntax dieser Untermenge finden Sie in Syntax für Filter.
Im folgenden Beispiel wird dargestellt, wie Sie auf andere Tabellen in der Spiegeldatenbank zurückgreifen und einen Parameter für das horizontale Filtern verwenden können.
Angenommen, Sie verwalten zwei Tabellen mit den Namen "PLZTab" und "Unternehmen", die sich beide in der Spiegeldatenbank befinden. "PLZTab" enthält die Postleitzahlen einiger Städte (siehe Tabelle 4), während die Tabelle "Unternehmen" einige Unternehmen und deren Postleitzahlen enthält (siehe Tabelle 5). Nun sollen Benutzer in Stuttgart nur die Unternehmen in der eigenen Stadt anzeigen können. Sie haben eine Gruppe erstellt und ihr diese Benutzer zugeordnet.
Stadt | Postleitzahl |
---|---|
Stuttgart | 70563 |
Stuttgart | 70565 |
Berlin | 10574 |
Tabelle 5. Tabelle "Unternehmen"
Unternehmen | Postleitzahl |
---|---|
IBM | 70565 |
Unternehmen 1 | 70563 |
Unternehmen 2 | 82008 |
Unternehmen 3 | 91052 |
Nun geben Sie in das Feld Zeilenuntermenge für einzelne Benutzer auf der Seite "Zeilen" folgende Klausel ein:
(postleitzahl) IN (SELECT postleitzahl FROM PLZTab WHERE Stadt = ':fcity.')
Dabei ist :fcity. ein Parameter für den Wert der Spalte "Stadt", der für die Gruppe auf Stuttgart gesetzt wurde.
Anschließend vervollständigen und schließen Sie das Notizbuch
Subskription erstellen. Nach der Synchronisation sehen die
Benutzer folglich in der Tabelle "Unternehmen" auf ihren Einheiten nur die
folgenden Zeilen:
Tabelle 6. Zeilen, die Benutzer auf ihren Einheiten sehen
Unternehmen | Postleitzahl |
---|---|
IBM | 70565 |
Unternehmen 1 | 70563 |
Beim Erstellen einer Replikationssubskription in Mobile Devices Administration Center (MDAC) können Sie zum Filtern von Daten für Einzelbenutzer eine Klausel verwenden, die der WHERE-Klausel in SQL sehr ähnlich ist. Geben Sie die Klausel in das Feld Zeilenuntermenge für einzelne Benutzer im Notizbuch Erweiterte Replikationssubskription für DataPropagator-Subskriptionen bzw. im Notizbuch Erweiterte Replikationssubskription für JDBC-Subskriptionen ein.
Wenn Sie das unten dargestellte Syntaxdiagramm verwenden, müssen Sie u. a. folgende Einschränkungen beachten:
Filter .-Logischer Operator AND oder OR-. V | >>---| dimension |------------------+-------------------------->< dimension |--+-spaltenname--IN--| unterauswahl |-----------+--------------| | .-,-----------. | | V | | +-(----spaltenname-+--)--IN--| unterauswahl |-+ '-| einfachermonadischerfilter |--------------' unterauswahl |--(--| SELECT-klausel |--| FROM-klausel |----------------------> >--+-------------------+--)-------------------------------------| '-| WHERE-klausel |-' SELECT-klausel .-,-----------. V | |--SELECT----spaltenname-+--------------------------------------| FROM-klausel |--FROM--| tabellenverweis |------------------------------------| WHERE-klausel |--WHERE--| einfacherfilter |-----------------------------------| tabellenverweis |--+---------------+--tabellenname------------------------------| '-schemaname--.-' einfacherfilter .-Logischer Operator AND oder OR-. V | |----| einfachermonadischerfilter |-+---------------------------| einfachermonadischerfilter |--+-NOT--| einfachermonadischerfilter |-+----------------------| +-(--| einfacherfilter |--)-----------+ '-| einfachesvergleichselement |------' einfachesvergleichselement |--| ausdruck |--| einfachesvergleichselementende |-------------| ausdruck |--+-| funktion |--+--------------------------------------------| +-spaltenname---+ '-| konstante |-' funktion |--+---------------+--funktionsname--(--+------------------+----> '-schemaname--.-' | .-,------------. | | V | | '---| ausdruck |-+-' >--)------------------------------------------------------------| einfachesvergleichselementende |--+-+-| operator |-+--| ausdruck |--------------------+--------| | '-IN-----------' | +-IS--+-----+--NULL---------------------------------+ | '-NOT-' | '-+-----+--BETWEEN--| ausdruck |--AND--| ausdruck |-' '-NOT-' operator |--+-=----+-----------------------------------------------------| +-<>---+ +->----+ +-<----+ +->=---+ +-<=---+ +-!=---+ +-!<---+ +-!>---+ '-LIKE-'