Skip to main content
Skip table of contents

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

CODE
| 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


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.