Event "vor Menüausführung"
Event "vor Menüausführung"
Der Event wird vor der Ausführung eines Menüpunktes aufgerufen.
Als logische Rückgabe muss festgelegt werden, ob die Original-Funktion noch ausgeführt werden soll (TRUE) oder nicht (FALSE).
Wenn von einem "Menüpunkt" gesprochen wird sind immer gleichzeitig zugeordnete Buttons, Shortcuts und die interne Ausführung der entsprechenden Funktion gemeint.
Der Event ist u.a. für die folgenden Operationen geeignet (siehe Beispiele unten):
Sperren eines Menüpunktes per Codeblock
Ersetzen der Funktion eines Menüpunktes durch einen Codeblock
Ergänzen der Funktion eines Menüpunktes durch einen Codeblock
Umleiten der Funktion eines Menüpunktes durch einen Codeblock
Hinweis:
Der Event darf niemals generell FALSE zurückliefern, da das gesamte System sonst unwiderruflich gesperrt würde.
Es erfolgt zwar eine entsprechende Validierung des Ereignisses beim ersten Aufruf, diese ist jedoch auf Grund der möglichen Komplexität nicht 100%-ig sicher.
Beispiel
| nEvtNo:P1, oAction:P2, oForm:P3,
aResult, oDab050, oDab055, oMyAct, oMainTable |
// Aufruf erfolgt vor der Ausführung einer Aktion (Menüpunkt, Button, o.ä.)
// Rückgabe = True/False, Aktion ausführen/nicht ausführen
// =============================================================================
// BSP 1: Klassennamen und Actionnamen zur Identifikation eines Menüpunktes
// ermitteln und später anwenden
// =============================================================================
Meld(Classname(oForm) + ': ' + oAction.Name,),
// =============================================================================
// BSP 2: Funktion "Lieferfreigabe" in der Auftragsverwaltung komplett ersetzen
// =============================================================================
if Classname(oForm) = 'TFormMainProcessOrders' and
oAction.Name = 'A_DelivRelease' then
Meld('Lieferfreigabe über eigene Funktion erledigt...'),
aResult := False,
else
aResult := True,
endif,
// =============================================================================
// BSP 3: oForm als Container (Datenmodul) verwenden und z.B. DAB050, DAB055 der
// Auftragsbearbeitung ermitteln.
// Funktioniert mit fast allen Fenstern, es sollte aber überprüft werden,
// ob die rückgelieferte Tabelle tatsächlich die gewünschte ist...
// =============================================================================
if Classname(oForm) = 'TFormMainProcessOrders' and
oAction.Name = 'A_New_Pos' then //-> Neue Auftragsposition
// Dab050, DAB055 ermitteln
oDab050 := DBGetTable( oForm, waDAB050, 'DAB050' ),
oDab055 := DBGetTable( oForm, waDAB055, 'DAB055' ),
// Eigene Verarbeitung
Meld('Schritt 1: ' + oDab050:ANUMMER),
// =============================================================================
// BSP 4: Origininal Funktion eines Menüpunktes bzw. Fensters ausführen !
// =============================================================================
// ACHTUNG!!! Der Aufruf der Action (oAction), so wie er hier steht würde zu einer
// einer Rekursion führen!!! (A_New_Pos würde wieder dieses Event aufrufen und so fort)
// Hier müsste also eine entsprechende globale Variable eingesetzt wurden,
// die das verhindert !!!
// ActionExecute(oAction),
// ALTERNATIVE: (für abweichende Action des Fensters):
// BSP: Aus "Neue Position" wird "Position Löschen"...
startseq
oMyAct := FindObject(oForm,'A_Delete_Pos'),
ActionExecute(oMyAct),
onerror
stopseq,
// Eigene Verarbeitung
Meld('Schritt 2: Aktuelle Auftr.Pos: ' + oDab055:APNUMMER),
aResult := FALSE, // Keine weitere, interne Ausführung des Menüpunktes
endif,
// =============================================================================
// BSP 5: Alternative Methode, um die Haupttabelle eines Fensters zu ermitteln.
// Funktioniert mit den meisten dockbaren Fenstern, z.B. Kontaktpersonen
// =============================================================================
if Classname(oForm) = 'TFormEditContacts' and
oAction.Name = 'A_Delete' then //-> Löschen
// Haupttabelle ermitteln
oMainTable := FindObject(oForm,'MainTable'),
Meld('Maintable alias: ' + oMainTable.AliasName ),
Meld('Löschen verboooooten ...'),
aResult := FALSE, // Keine weitere, interne Ausführung des Menüpunktes
endif,
// =============================================================================
// WICHTIG: Immer ein definiertes Ergebnis zurückliefern !!!
// =============================================================================
aResult