OKB-000243 | Reagieren auf Arbeitsbereichswechsel

Betrifft: ab orgAnice Pi

Frage: 

Über welches OrgDataEvent / Command habe ich Zugriff auf den Wechsel des Arbeitsbereichs oder der Arbeitsbereichsgruppe?

Antwort: 

Zunächst muss man sagen, dass es weder einen Event noch einen CommandID-Parameter für den Wechsel von Arbeitsbereichen oder Arbeitsbereichsgruppen gibt. Denn es gibt nur CommandID-Parameter für fest in orgAnice eingebaute Befehle und Arbeitsbereiche bzw. Arbeitsbereichsgruppen gehören nicht dazu.

Allerdings gibt es doch einen Lösungsansatz: Beim Wechsel von Arbeitsbereichen oder Arbeitsbereichsgruppen wird mehrmals das Event „CommandAvailable“ abgefeuert. Hier setzen wir an und vergleichen, ob sich seit dem letzten Aufruf der aktive Arbeitsbereich geändert hat. Wenn das der Fall ist, setzen wir bspw. eine bestimmte Tabelle als aktiv und merken uns den Arbeitsbereich, damit beim erneuten Aufruf von CommandAvailable nicht wieder die Tabelle als aktiv gesetzt wird. Der Code, der in der Prozedur COrgDataEvents.mOrgData_CommandAvailable hinzugefügt werden muss (am besten ganz unten vor dem Exit Sub), sieht folgendermaßen aus:

' Wurde der Arbeitsbereich geändert?

    If Not wsLastActiveWorkspace Is Workspaces.ActiveWorkspace Then

        Set wsLastActiveWorkspace = Workspaces.ActiveWorkspace

        ' Je Arbeitsbereich eine bestimmte Tabelle aktivieren

        Select Case Workspaces.ActiveWorkspace.Name

            Case "Vorgaenge" ' Vorgänge und Aktivitäten

                ActiveTable = gTables.GetTable(dbtblAktivitäten)

            Case "Adressen" ' Adressmerkmale

                ActiveTable = gTables.GetTable(dbtblAdressmerkmale)

        End Select

    End If

Wir müssen nur noch im Deklarationsteil der Prozedur eine neue statische Variable deklarieren:

Static wsLastActiveWorkspace As Workspace

Das war es! In dem o.a. Beispiel wird beim Wechsel in den Arbeitsbereich „Vorgänge und Aktivitäten“ die Aktivitäten-Tabelle, beim Wechsel den Arbeitsbereich „Adressmerkmale“ die Adressmerkmale-Tabelle aktiviert. Natürlich können an dieser Stelle auch weitere Aktionen und eigene Prozeduren ausgeführt werden.

Für den Einsatz in einer Datenbank sollte natürlich eine eigene CSTM_COrgDataEvents-Klasse erstellt werden.