Server-Nachrichten

Aus TRENZ PartnerNet
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Befehle von der Datenbank aus an den Client

Überblick

Die Tabelle ServerMessages_Slave wird vom Web-Service bei bestimmten Aktionen abgerufen, um Befehle an den Client zurückzuliefern:

  • beim Öffnen, Speichern und Aktualisieren eines Containers,
  • beim Ändern von Werten in einer Container-Liste (Listen-Bearbeiten),
  • beim Klick eines Buttons,
  • beim Laden der Benachrichtigungen (alle 60 Sekunden).

Der Aufruf eines solchen Befehls (Spalte Command) mitsamt Parametern (Spalte Arguments) wird als Server-Nachricht bezeichnet. Diese muss immer an einen Benutzer gerichtet sein. Soll sich ein Aufruf auf mehrere Benutzer auswirken, so müssen mehrere Nachrichten angelegt werden.

Parameter müssen grundsätzlich mit doppelten Anführungszeichen (“”) umschlossen sowie mit Kommata (,) voneinander getrennt werden.

Spalten

  • id: Wird automatisch gesetzt.
  • UserID: Der User der die Nachricht auslesen soll.
  • Command: Der eigendliche Befehl der vom Client ausgeführt werden soll.
  • Priority: Optional kann eine Priorität angegeben werden. Niedrigere Werte werden dabei zuerst ausgeführt. Ein Wert NULL (das Standardverhalten) entspricht der Priorität 32767; eine solche Nachricht würde also zuletzt ausgeführt.
  • Arguments: Die Parameter der Nachricht.
  • Read: Nach erfolgreichem Verarbeiten einer Nachricht markiert der Client diese als gelesen; Spalte wird auf True gesetzt.

Befehle

Befehl Parameter Beschreibung Beispiel
AskFieldValue string ContainerIDs, int FieldID, string Prompt Ein Dialog mit dem Titel Prompt und dem Feld mit angegebener ID öffnet sich, und wird für die Container mit angegebenen IDs (Komma-separiert) gesetzt.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_AskFieldValue
    ('123,124,125', 1, 'Feldwert setzen')
AskFiles string AfterStoredProcedure, string Title, bool MultiSelect, ContainerID Ein Öffnen-Dialog mit Titel Title und der Auswahl einer oder mehrerer Dateien (MultiSelect) wird angezeigt, und diese Dateien daraufhin in die Datenbank hochgeladen. Die Prozedur AfterStoredProcedure wird mit den Parametern ContainerID, UseriD und einer Komma-separierten Liste aller neuen Bild-IDs aufgerufen, z.B., um Zuordnungen durchzuführen.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_AskFiles
    ('Demo_AfterAskFiles', 'Dateien zuordnen', 1, 123)
CloseContainer int ContainerID Einen bereits offenen Container mit angegebener ID schließen.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_CloseContainer
    (123)
OpenContainer int ContainerID Einen beliebigen Container mit angegebener ID öffnen.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_OpenContainer
    (123)
PrintContainerReport int ContainerID, int ReportID Den angegebenen Bericht für den angegebenen Container drucken.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_PrintContainerReport
    (123, 1)
RefreshField int ContainerID, string FieldIDs, bool SkipIfNotOpen Die Felder mit angegebenen IDs (Komma-separiert) im Container mit angegebener ID aktualisieren. Wenn SkipIfNotOpen True ist, wird dies nur durchgeführt, wenn der entsprechende Container offen ist.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_RefreshField
    (123, '1,2,3', 1)
ReloadContainer int ContainerID, bool SkipIfNotOpen Einen bereits offenen Container mit angegebener ID erneut laden. Wenn SkipIfNotOpen True ist, wird dieser nur dann neu geladen, wenn er bereits offen ist.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_ReloadContainer
    (123, 1)
ReloadTree Lädt den Explorer-Baum neu.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_ReloadTree()
ShowMessage MessageBoxIcon Type, string Message Einen Dialog mit angegebenem Text (Message) darstellen. Als Type werden Error, Warning und Info unterstützt; das Icon wird entsprechend angepasst.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_ShowMessage
    ('Info', 'Alles bestens!')
SuggestContainer int userID, int ContainerID, string message Erzeugt einen Container-Vorschlag, int userID Gibt dabei den "Sender" des Vorschlags an.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_SuggestContainer
    (142, 123, 'Schau dir das mal an')
SwitchToTab int ContainerID, int TabID, bool SkipIfNotOpen Zum angegebenen Reiter wechseln. Wenn SkipIfNotOpen True ist, wird dies nur durchgeführt, wenn der entsprechende Container offen ist.
INSERT INTO ServerMessages_Slave
    (UserID, Command, Arguments)
SELECT 1, *
FROM dbo.elSMsg_SwitchToTab
    (123, 2, 1)

Anwendungsbeispiele

  • Explorer neu laden mit ReloadTree
INSERT INTO ServerMessages_Slave(UserID, Command, Arguments)
SELECT aensab, 'ReloadTree',  FROM inserted

Bei demjenigen Benutzer, der den jeweiligen Datensatz zuletzt geändert hat (aensab), wird der Explorer neu geladen.

  • Feld nachladen mit RefreshField
IF UPDATE(c123)
    INSERT INTO ServerMessages_Slave(UserID, Command, Arguments)
    SELECT
        aensab,
        'RefreshField',
        '"' + cast(datensatz_id as varchar(255)) + '","123","True"'
    FROM inserted

Ein Trigger prüft, ob sich das Feld c123 geändert hat (z.B. durch einen anderen Trigger), und schreibt in diesem Fall eine Server-Nachricht, dass der Wert dieses Feldes vom Client für den in datensatz_id stehenden Container (hier 1000) aktualisiert werden sollte. Die Nachricht geht dabei an den aensab, also genau den Benutzer, der zuletzt eine Änderung ausgelöst hast. Falls der Container gar nicht offen ist, passiert nichts (True). id UserID Command Priority Arguments Read

6   252     RefreshField  NULL      "1000","123","True"  NULL

  • Container öffnen mit OpenContainer; ursprünglichen Container schließen mit CloseContainer
INSERT INTO container(Typ, bezeichnung, bezeichnung_lang, isDocument, [Status], [root], erfdat, erfsab, aendat, aensab)
VALUES(1, newid(), newid(), 1, '', 0, getdate(), 9999, getdate(), 9999)

DECLARE @CID int
SET @CID = scope_identity()

INSERT INTO zz_1_0(datensatz_id, c4)
VALUES(@CID, newid())

INSERT INTO ServerMessages_Slave(UserID, Command, Arguments)
SELECT
    252,
    'OpenContainer',
    '"' + cast(@CID as varchar(255)) + '"'

INSERT INTO ServerMessages_Slave(UserID, Command, Arguments)
SELECT
    252,
    'CloseContainer',
    '"' + cast(@CONTAINER_ID as varchar(255)) + '"'

Ein Button legt einen neuen Container (@CID; hier 1000) an, der daraufhin gleich geöffnet wird. Schließlich wird der ursprüngliche Container (CONTAINER_ID) durch eine zweite Nachricht geschlossen. id UserID Command Priority Arguments Read

6   252     OpenContainer  NULL      "1000"     NULL

Meine Werkzeuge