Wo steht das denn? Das wäre mir neu.Und schließlich steht in der SAP-Doku, dass solche IDs auch durch das Programm selbst aktiviert werden können. Aber wie?
Da fängt es schon an. Wenn ich einen Report habe, für den ich solch ID erstellen will, was ist in dem Zusammenhang dann ein "Prozess"? Mir fehlt da noch das große Bild.Das schöne an der SAAB (log-Points, Asserts und Break-Points) ist, dass du für einen Prozess oder eine Teilproblematik IDs erstellen kannst.
Ich bin weniger auf der Suche nach einem Best Practice und mehr nach einem verständlichen Einstieg. Wo und wie stelle ich ein, was der ID-behaftete ASSERT machen soll, wenn seine Bedingung verletzt ist? Wie aktiviere ich ihn programmgesteuert (was der SAP-Doku zufolge möglich sein soll)? Gibt es Beispiele für die Nutzung ID-behafteter ASSERTs? Ich will nur verstehen, wie das Ding syntaktisch bzw. mechanisch funktioniert. Was ich dann damit anstelle, überlege ich mir schon selber.Da wird es keinen Best-Practice geben.
M.W. gar nicht. Ich glaube du hast die Doku falsch interpretiert..DeathAndPain hat geschrieben:Wie aktiviere ich ihn programmgesteuert (was der SAP-Doku zufolge möglich sein soll)?
Wenn du in der SAAB den Infobutton drückst (Strg+F8), dann bekommst du schon die Antwort auf deine Frage, ob das die IDs sind für das Assert Kommando.DeathAndPain hat geschrieben:Sind das die Gruppen, die vom ASSERT für die ID genutzt werden? Wenn ja, wie gehe ich damit um, und wo stelle ich ein, was das Programm machen soll
Du musst eigentlich schon zur Designtime, also beim Programmieren, den Fehlerzustand kennen und diesen als Bedingung für deinen ASSERT definieren. Was ich mir vorstellen könnte, wie du das von dir beschriebene Szenario bewerkstelligen kannst, wäre mit BREAK-POINTs und ASSERTs zu arbeiten: Am Beginn deines Programms einen BREAK-POINT mit ID setzen, eine Hilfsvariable definieren und diese bei deinem ASSERT abfragen. Wenn du dann deine Checkpoint-Gruppe aktivierst, bleibt der Debugger am Anfang stehen, du setzt die Variable auf den gewünschten Wert. Sobald dann der ASSERT erreicht ist, bleibt das Programm dann wieder stehen und du kannst prüfen, warum es zu der "Verletztung" der Bedingung gekommen ist.DeathAndPain hat geschrieben:Eine mögliche Idee wäre ein Watchpoint, wenn ich im Entwicklungssystem einem seltsamen Effekt auf der Spur bin. Ich könnte mir vorstellen, dass es schneller geht, rasch einen ASSERT mit dem in Frage stehenden Feldwert reinzustellen, der mir im richtigen Moment den Debugger anschmeißt, als das Programm zu starten, auf einen Breakpoint laufen zu lassen, manuell einen Watchpoint einzustellen und dann bis zum Watchpoint weiterlaufen zu lassen.
Dafür kann man aber einen WatchPoint auf das Ziel des Feldsymbols (Tabellenzeile, Strukturfeld usw.) legen. Toll wäre es da natürlich, wenn der Debugger das sofort und korrekt aus einem Feldsymbol auflösen könnte.DeathAndPain hat geschrieben:Erst recht, nachdem ich heute leidvoll lernen musste, dass man auf Feldsymbole keine Watchpoints legen kann (vor allem in LOOPs). Das ist dann wieder ein großer Pluspunkt für Workareas statt Feldsymbolen - und da ich sperrige Workareas Mist finde, ein großer Pluspunkt für Tabellenkopfzeilen.
Was soll das denn bringen?adt hat geschrieben:Am Beginn deines Programms einen BREAK-POINT mit ID setzen, eine Hilfsvariable definieren und diese bei deinem ASSERT abfragen.
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
a-dead-trousers
Du hast das "Big Picture" nicht bedacht:ewx hat geschrieben:Was soll das denn bringen?
An relevanten Stellen kann ich BREAK-POINT id xyz. programmieren und dann hält das Programm dort an, wenn ich die Checkpoint-Gruppe aktiviere.
Warum sollte ich erst einen Break-Point definieren, dann eine Variable umsetzen, um diese mit ASSERT abzufragen?!
Genau dafür sind die ASSERTIONS. Dafür brauche ich doch vorher keinen BREAK-POINT...?!a-dead-trousers hat geschrieben: Im Programm werden zig Zeilen Code durchlaufen, hundert Objekte instanziert und irgendwann beim tausendsten Schleifendurchlauf steht statt einer 0 eine 1 drinnen.
Der BREAK-POINT ist nur dazu da, um beim Eisntieg in das Programm die Abbruch-Bedingung (z.B. suche alle Ergebnisse mit 1) für den ASSERT zu setzen.ewx hat geschrieben:Genau dafür sind die ASSERTIONS. Dafür brauche ich doch vorher keinen BREAK-POINT...?!a-dead-trousers hat geschrieben: Im Programm werden zig Zeilen Code durchlaufen, hundert Objekte instanziert und irgendwann beim tausendsten Schleifendurchlauf steht statt einer 0 eine 1 drinnen.
DeathAndPain hat geschrieben:Ich könnte mir vorstellen, dass es schneller geht, rasch einen ASSERT mit dem in Frage stehenden Feldwert reinzustellen, der mir im richtigen Moment den Debugger anschmeißt, als das Programm zu starten, auf einen Breakpoint laufen zu lassen, manuell einen Watchpoint einzustellen und dann bis zum Watchpoint weiterlaufen zu lassen.
Meistens endet das bei mir in einem Kurzdump des Debuggersewx hat geschrieben:Plus: Genau dafür gibt es Layer-aware-Debugging und Debugger-Scripting...
Watchponts auf Feldsymbole geht mit einem Workaround. Man kann ja einem Breakpunkt eine Bedingung mitgeben - und in dieser Bedingung nun kann man auch ein Feldsymbol mitgeben. Das entspricht dann etwa einem Watchpoint.a-dead-trousers hat geschrieben:Dafür kann man aber einen WatchPoint auf das Ziel des Feldsymbols (Tabellenzeile, Strukturfeld usw.) legen. Toll wäre es da natürlich, wenn der Debugger das sofort und korrekt aus einem Feldsymbol auflösen könnte.DeathAndPain hat geschrieben:Erst recht, nachdem ich heute leidvoll lernen musste, dass man auf Feldsymbole keine Watchpoints legen kann (vor allem in LOOPs). Das ist dann wieder ein großer Pluspunkt für Workareas statt Feldsymbolen - und da ich sperrige Workareas Mist finde, ein großer Pluspunkt für Tabellenkopfzeilen.