Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Clientadministration » SQL Anywhere-Clients für MobiLink » Ereignis-Hooks für SQL Anywhere-Clients » Einführung in dbmlsync-Hooks » Hook-Prozeduren verwenden

 

#hook_dict-Tabelle

Unmittelbar bevor ein Ereignis-Hook aufgerufen wird, erstellt dbmlsync die #hook_dict-Tabelle in der entfernten Datenbank mit der folgenden CREATE-Anweisung. Das # vor dem Tabellennamen bedeutet, dass die Tabelle eine temporäre Tabelle ist.

CREATE TABLE #hook_dict(
name VARCHAR(128) NOT NULL UNIQUE,
value VARCHAR(10240) NOT NULL)

Das Dienstprogramm dbmlsync verwendet die Tabelle #hook_dict, um Werte an Hook-Funktionen weiterzugeben. Hook-Funktionen verwenden die Tabelle #hook_dict, um Werte an dbmlsync zurückzugeben.

Jede Hook-Prozedur empfängt Parameterwerte. In einigen Fällen können Sie den Wert ändern, damit ein neuer Wert zurückgegeben wird, andere Parameter wiederum sind schreibgeschützt. Jede einzelne Zeile in der Tabelle enthält den Wert für einen Parameter.

Wenn beispielsweise in der folgenden dbmlsync-Befehlszeile der sp_hook_dbmlsync_abort-Hook aufgerufen wird, enthält die Tabelle #hook_dict folgende Zeilen:

dbmlsync -c 'dsn=MyDsn' -n pub1,pub2 -u MyUser

#hook_dict-Zeile

Wert

publication_0

pub1

publication_1

pub2

MobiLink user

MyUser

Abort synchronization

false

Der abort-Hook kann die Werte aus der Tabelle #hook_dict abrufen und sie benutzen, um sein Verhalten anzupassen. Um beispielsweise den MobiLink-Benutzer abzurufen, verwenden Sie eine SELECT-Anweisung der folgenden Art:

SELECT value
FROM #hook_dict
WHERE name = 'MobiLink user'

I/O-Parameter können von Ihrem Hook aktualisiert werden, um das Verhalten von dbmlsync zu ändern. Ihr Hook könnte beispielsweise dbmlsync anweisen, die Synchronisation abzubrechen, indem die Synchronisationszeile 'abort' der Tabelle mit einer Anweisung der folgenden Art aktualisiert wird:

UPDATE #hook_dict
SET value='true'
WHERE name='abort synchronization'

Die Beschreibung der einzelnen Hooks listet die Zeilen in der Tabelle #hook_dict auf.

Beispiele

Folgendes Beispiel einer sp_hook_dbmlsync_delay-Prozedur veranschaulicht, wie die Tabelle #hook_dict verwendet wird, um Argumente weiterzugeben. Die Prozedur gestattet die Synchronisation nur außerhalb einer geplanten Auszeit des MobiLink-Systems zwischen 18:00 Uhr und 19:00 Uhr.

CREATE PROCEDURE sp_hook_dbmlsync_delay()
BEGIN
   DECLARE delay_val integer;
 SET delay_val=DATEDIFF(
   second, CURRENT TIME, '19:00');
 IF (delay_val>0 AND
     delay_val<3600)
 THEN
 UPDATE #hook_dict SET value=delay_val
   WHERE name='delay duration';
 END IF;
END

Die folgende Prozedur wird am Anfang der Synchronisation in der entfernten Datenbank ausgeführt. Sie ruft den aktuellen MobiLink-Benutzernamen auf (einen der Parameter, die für das Ereignis sp_hook_dbmlsync_begin verfügbar sind) und zeigt ihn im SQL Anywhere-Meldungsfenster an.

CREATE PROCEDURE sp_hook_dbmlsync_begin()
BEGIN
   DECLARE syncdef VARCHAR(150);
   SELECT '>>>syncdef = ' || value INTO syncdef
      FROM #hook_dict
      WHERE name ='MobiLink user name';
   MESSAGE syncdef TYPE INFO TO CONSOLE;
END