Ein Condition-Handler ist zuständig entweder
Conditions, die eine Meldung aus einer Meldungsruppe ausgeben, die einer Meldungsklasse zugeordnet ist, werden immer von Class-Handlern behandelt und gelangen nie in einen von der Anwendung installierten Severity-Handler.
Die TAA-Infrastruktur unterstützt für .NET-Module „Proc-Handler“ und „ID-Handler“: bullet Für einen Proc-Handler wird in einem Modul eine Methode definiert, deren Name der TAA-Infrastruktur als Prozedur für den Proc-Handler angegeben wird. Diese Methode wird von der TAA-Infrastruktur aus aufgerufen, wenn eine Condition, für die dieser Condition-Handler zuständig ist, geraised wird.
Der Proc-Handler erhält als Argumente
Der Proc-Handler sollte nach der Bearbeitung der Condition einen der folgenden Aktionscodes zurückliefern, auf die das Modul reagieren kann:
Ein ID-Handler ist ein Stück Code in einer .NET-Fehlerbehandlungs-Routine (Exception Handling).
Wenn die TAA-Infrastruktur feststellt, dass für eine Condition ein ID-Handler zuständig ist, führt sie für diese Condition einen throw aus; die Exception ist vom Typ TeamWiSE.TAA.TaaCondition. Diese Exception kann vom nächstgelegenen Catch-Block abgefangen und bearbeitet werden:
catch (TeamWiSE.TAA.TAACondition cnd) { Console.WriteLine("{0} Caught exception TAA.", cnd); }
Über taaCndHdlIdGet() können Sie abfragen, welche Handler-ID für die geraiste Condition zuständig ist, um entsprechend zu reagieren.
Methoden der Klasse ModlEnv
Severity Handler
System.Boolean cndHdlPush ( System.UInt16 nSev ) System.Boolean cndHdlIdSet ( System.UInt16 nSev , System.UInt32 nId ) System.Boolean cndHdlProcSet ( System.UInt16 nSev , System.String sDllEntry )
Class Handler
System.Boolean cndClassHdlPush ( String sClass ) System.Boolean cndClassHdlIdSet ( String sClass , System.UInt32 nId ) System.Boolean cndClassHdlProcSet (String sClass , System.String sDllEntry )
Um einen neuen Conditionhandler zu installieren, d.h. der Infrastruktur bekanntzugegen, welche Routine Conditions ab einer bestimmten Severity bzw. aus einer bestimmten Meldungsklasse bearbeiten soll, müssen Sie zunächst einen neuen Eintrag in der Liste bekannter Conditionhandler erzeugen. Dies geschieht über die Methode cndHdlPush/cndClassHdlPush. Als Argument geben Sie dabei an, ab welcher Severity bzw. für welche Meldungsklasse der der Condition-Handler aktiviert werden soll.
Anschließend müssen Sie für den installierten Condition-Handler angeben, mit welcher Prozedur die Conditions bearbeitet werden sollen. Dies geschieht über die Anweisungen cndHdlIdIdSet/cndClassHdldDSet bzw. CndhdlProcSet/cndClassHdlProcSet:
Me.cndHdlPush(TAACondition.Severity("Warning")); Me.cndHdlProcSet(TAACondition.Severity("Warning"), "My_Hdl_W"); Me.cndHdlPush(TAACondition.Severity("Severe")); Me.cndHdlIdSet(TAACondition.Severity("Warning"), 1);
Me.cndClassHdlPush("ALLGEMEIN"); Me.cndClassHdlProcSet("ALLGEMEIN", "My_Hdl_A"); Me.cndClassHdlPush("PRIVATE"); Me.cndClassHdlIdSet("PRIVATE", 1);
Mit den Anweisungen cndHdlIDSet/cndClassHdlIdSet und cndHdlProcSet/cndClassHdlProcSet ist es auch möglich, einen ConditionHandler zu verändern: Die Infrastruktur sucht den zuletzt in dem Modul installierten Condition-Handler für die angegebene Severity bzw. Meldungsklasse und weist diesem die angegebene Prozedur bzw. ID zu. Frühere Zuweisungen gehen dabei verloren.
Die TAA-Infrastruktur bildet Stapel (Stacks) für die Conditionhandler; Sie können in einem Modul mehrere Conditionhandler für dieselbe Severity bzw. Meldungsklasse installieren. Bei einem CndRaise gilt der zuletzt installierte.
Severity Handler
System.Boolean cndHdlPop ( System.UInt16 nSev ) System.Boolean cndHdlClear (System.UInt16 nSev ) System.Boolean cndHdlReset ( )
Class Handler
System.Boolean cndClassHdlPop ( String sClass ) System.Boolean cndClassHdlClear ( String sClass) System.Boolean cndClassHdlReset ( )
Durch CndHdlPop/CndClassHdlPop können Sie einzelne Conditionhandler wieder vom Stapel entfernen, und zwar wird immer der oberste vom Stapel ( = der zuletzte installierte) Conditionhandler entfernt.
Me.cndHdlPop(TAACondition.Severity("Severe"));
CndHdlClear/CndClassHdlClear entfernt alle in dem Modul installierten Conditionhandler der angegebenen Severity bzw. Meldungsklasse.
Me.cndHdlClear(TAACondition.Severity("Severe"));
Noch einen Schritt weiter geht CndHdlReset/cndClassHdlReset: Diese Methode entfernt alle von dem Modul installierten Conditionhandler für Severities bzw. Meldungsklasse.
Me.cndHdlReset( );
Severity Handler
System.Boolean cndHdlReplace ( System.UInt16 nSev )
Class Handler
System.Boolean cndClassHdlReplace ( String sClass )
Diese Methode entfernt den obersten, in dem Modul installierten Condition Handler für eine Severity bzw. Meldungsklasse und ersetzt ihn durch einen neuen.
Für den neuen Conditionhandler muss anschließend noch angegeben werden, ob es sich um einen Proc- oder Id-Handler handelt und welche Prozedur ausgeführt werden soll (CndHdlProcSet, CndHdlIdSet).
Severity Handler
System.Boolean cndHdlIsProc ( System.UInt16 nSev ) System.Boolean cndHdlIsId ( System.UInt16 nSev ) System.Boolean cndHdlIsControl ( System.UInt16 nSev ) System.UInt32 cndHdlIdGet ( System.UInt16 nSev )
Class Handler
System.Boolean cndClassHdlIsProc ( String sClass ) System.Boolean cndClassHdlIsId ( String sClass ) System.Boolean cndClassHdlIsControl ( String sClass ) System.UInt32 cndClassHdlIdGet ( String sClass )
Mit den Methoden cndHdlIs…/cndClassHdlIs… können Sie abfragen, von welchem Typ der aktuell für eine Severity bzw. Meldungsklasse installierte ConditionHandler ist.
Dabei braucht der zu dem Zeitpunkt für die Severity oder Meldungsklasse angegebene Conditionhandler nicht unbedingt in dem aktuellen Modul installiert worden sein.
Im Falle von Severity-Handlern gelten für die Suche dieselben Regeln, die beim CndRaise angewandt werden:
Bei ID-Handlern ist auch die ID abfragbar. Dies ist notwendig, um in der Fehlerbehandlungsroutine für ID-Handler entscheiden zu können, welche Aktion auszuführen ist.