Makro-Debugger

Makros werden client- und serverseitig ausgeführt. Daher besteht der Makro-Debugger auch aus einem Server- und aus einem Client-Teil, die über IPC (Inter Process Communication / System.Runtime.Remoting.Channels.Ipc) kommunizieren. IPC bietet die Möglichkeit Aufrufe bidirektional auszuführen. So ist es möglich, dass die Sage 100 Makro-Aufrufe an den Debugger weitergibt und der Debugger gleichzeitig Befehle über das Befehls- und Direktfenster an die Sage 100 sendet. Als Client fungiert immer der Macro-Handler (Assembly des Sage 100 Systems), der sowohl im Sage 100-Client als auch im ApplicationServer die Makros abarbeitet. Der Server ist im diesem Szenario der Makro-Debugger innerhalb des AppDesigners.

Damit der Debugger im AppDesigner verwendet werden kann, ist es notwendig den AppDesigner als Administrator zu aufzurufen. Wurde der AppDesigner nicht als Administrator aufgerufen, beendet er sich beim Start des Debuggers und wird mit erweiterten Rechten neu gestartet, falls der Anwender diese besitzt.

Der Makro-Debugger der Sage 100 orientiert sich in seiner Funktionalität, der Bedeutung der Fenster, der Schaltflächen, Tasten-Kombinationen und Optik an Visual Studio. Analog zu Visual Studio werden auch im AppDesigner die Konfigurationen der Fenster im Entwurfs- und im Debug-Modus getrennt verwaltet.

Beim erstmaligen Aufruf, kann es möglich sein, dass Sie Fenster nach Ihrem Bedürfnissen verschieben oder anders andocken müssen. Folgende Fenster sind vorhanden:

  • Debugger-Fenster
  • Haltepunkte
  • Ausgeführte Aktionen
  • Ausgabe
  • Lokal
  • Überwachen
  • Direktfenster
  • Befehlsfenster

Im Menüband unter "Debug Ansicht" können Sie Fenster ein-/ausblenden. Bitte beachten Sie, dass das Ausgabefenster sowohl für den Standard, als auch für den Debugger verwendet wird. Die Option für das Ein-/Ausschalten befindet sich daher in der Menügruppe "Aktuelle Ansicht". Ein sinnvolle Konfiguration könnte so aussehen:

Im Debuggerfenster befindet sich eine Symbolleiste mit Aktionen zur Steuerung des Debuggens.

Die Aktionen sind von links nach rechts:

  • Ausführen/Fortsetzen (F5)
  • Pause
  • Beenden
  • Einzelschritt (F10)
  • Schritt in Untermakro (F11)
  • Ausführen bis Rücksprung (Umschalt+F11)
  • Nächste Anweisung setzen (oder per Drag&Drop)
  • Kopieren (Strg+C)
  • Alle auswählen (Strg+A)
  • Haltepunkt setzen (Strg+B, Togglen mit F9 oder Doppelklick)
  • Haltepunkt aktivieren
  • Haltepunkt deaktivieren
  • Haltepunkt löschen
  • Alle Haltepunkte aktivieren (Strg+F9)
  • Alle Haltepunkte deaktivieren (Strg+Alt+F9)
  • Alle Haltepunkte löschen (Strg+Umschalt+F9)
  • Makro-Editor öffnen (F12)

Um in einem Makro anzuhalten, gibt es drei Möglichkeiten:

  • Man drückt auf Pause und hält damit in der ersten Zeile des nächsten, ausgeführten Makros an.
  • Man öffnet in den Metadaten eines Elements das Makro, das man debuggen will und setzte dort in einer Zeile einen Haltepunkt.
  • Man führt in der Sage 100 eine Aktionen durch und schaut im Fenster „Ausgeführte Aktionen“, welche Makros abgelaufen sind. Per Doppelklick kann man das Makro im Debugger-Fenster öffnen und dort einen Haltepunkt setzen.

Will man ein bestimmtes Makro Schritt für Schritt debuggen, dann kann man auch wie folgt vorgehen.

  • Man blendet sich aus dem Menüband unter "Aktuelle Ansicht" die Fenster "Navigation" und "Eigenschaften" ein
  • Man wählt aus der Navigation das Element aus
  • Man öffnet aus dem Eigenschaftsfenster den Makro-Editor und setzt mit "Strg+B" einen Haltepunkt

Debugger-Fenster

Im Debugger-Fenster lässt sich der Ablauf des Makros optisch nach verfolgen. Der gelbe Pfeil markiert hierbei die Zeile, die als nächstes durchlaufen wird. Wurde eine Zeile bereits durchlaufen und dabei ein Parameter aufgelöst, wird der Parameter-Ausdruck fett und im Tooltip der aufgelöste Wert angezeigt. Parameter von Zeilen, die nicht durchlaufen werden, werden auch nicht evaluiert.

Es stehen die gewohnten Funktionalitäten eines Debuggers wie Fortsetzen/Pause/Stop/Einzelschritt und das Durchlaufen/Herausspringen von/aus Untermakros zur Verfügung. Auch lässt sich der aktuelle Ausführungs-Cursor über die Symbolleiste sowie über Drag&Drop verschieben. Hierbei sind besonders lokale Variablen zu beachten, die an der neuen Stelle evtl. noch nicht initialisiert sind.

Makro-Blöcke aus angehängten Elementen werden in alternierender Farbe (weiß und hellblau) dargestellt.

Über die Funktion „Makro-Editor öffnen (F12)“ springt man je nach selektierter Zeile entweder in das Makro des Original- oder des angehängten Elements. Dort kann man, wenn es sich um ein eigenes Element handelt, Änderungen vornehmen und speichern. Die Änderungen werden clientseitig jedoch erst wirksam, wenn der Dialog in der Sage 100 geschlossen und neu geöffnet wurde.

Makro-Code wird interpretiert, nicht kompiliert und kann daher sofort nach dem neuem Laden verwendet werden. Sowohl der Sage 100-Client als auch der ApplicationServer müssen dafür nicht neu gestartet werden. Auf eine Änderungsmöglichkeit des Codes im Debugger-Fenster wurde daher verzichtet.

Haltepunkt-Fenster

In diesem Fenster werden alle definierten Haltepunkte sowie evtl. festgelegt Bedingungen für den Haltepunkt angezeigt. Man kann alle bzw. einzelne Haltepunkte löschen (Symbolleiste) bzw. de-/aktivieren (Checkbox). Bedingungen können nur über das Debugger-Fenster bzw. den Makro-Editor (jeweils rechte Maustaste im Bereich "Zeile") angelegt und gelöscht werden, denn nur dort stehen alle Variablen und Felder des jeweiligen Kontexts zur Verfügung.

Bedingungen für Haltepunkte

An diesem Haltepunkt wird nur gestoppt, wenn die Bedingung erfüllt ist, d.h. der eingegebene Ausdruck zu „True“ evaluiert wurde.

Tritt während der Evaluierung ein Fehler auf, bekommt der Debugger den Fokus, zeigt den Fehler an und bleibt am Haltepunkt stehen.

Definiert werden die Bedingungsausdrücke über den Ausdrucks-Editor. Felder, Variablen und Parameter werden Kontext bezogen zur Verfügung gestellt.

Ausgeführte Aktionen-Fenster

In diesem Fenster sehen sie, wo sie sich innerhalb der Makroabläufe befinden.

Hier zu sehen: Im Makro „Beim Anzeigen“ wurde eine Änderung am Hauptlagerplatz sowie an der Artikelgruppe vorgenommen, was wiederum die „Nach Änderung“-Makros der beiden Felder ausgelöst hat. So lassen sich auch komplexe Aufrufhierarchien nachverfolgen.

In der Spalte „Prozess“ kann man erkennen, ob das Makro clientseitig (MS ACCESS oder ControlCenter-Isolation-Process) oder serverseitig (AppServer-WindowsService, -Console oder -IsolationProcess) ausgeführt wird.

Ein Doppelklick auf einen Eintrag öffnet das Makro im Debugger.

Ausgabe-Fenster

In diesem Fenster werden technische Meldungen des AppDesigners und des Makro-Debuggers ausgegeben.

Dabei handelt es sich um detaillierte Informationen über die interne Ausführung eines Makros im Debugger, detaillierte Informationen über ausgeführte referenzielle Umbenennungen oder technischen Meldungen im Fehlerfalle.

Über die Auswahlliste kann zwischen den spezifischen Ausgaben des Makro-Debuggers und der Standartausgabe gewechselt werden.

Lokal-Fenster

Es werden drei Bereiche von Informationen angezeigt:

  • Lokale Variablen
  • Elementfelder
  • Datenfelder

Lokale Variablen stehen client- und serverseitig zur Verfügung und ihr Wert ist immer änderbar. Elementfelder (Dialogfelder) stehen nur clientseitig zur Verfügung. Ändern lässt sich Wert, Sichtbarkeit, Schreibschutz und Aktivierungsstatus. Datenfelder (Felder im Daten-Container) stehen client- und serverseitig zur Verfügung, Ihr Wert lässt sich allerdings nur in serverseitigen Makros ändern. Clientseitig haben Dialoge Vorrang. Der Dialog-Wert wird in die Daten publiziert, nicht umgekehrt.

Das Ändern von Werten geht vorbei an aller Programmlogik und Plausibilitätsprüfung.

Überwachen-Fenster

Im Überwachungsfenster können vier Arten von Informationen dargestellt werden:

  • Ausdrücke
  • lokale Variablen
  • Elementfelder
  • Datenfelder.

Über das "Plus-Symbol“ können Elemente hinzugefügt und über das "X im roten Kreis hinter dem Eintrag“ wieder entfernt werden. Sie gelten ausschließlich für den Bereich (Scope) in dem sie definiert wurden. Ist ein Überwachungsausdruck nicht im aktuellen Scope, so wird dies durch den "roten Kreis mit weißen X“ vor dem Namen symbolisiert.

Ausdrücke werden automatisch ausgewertet und dargestellt. Werte lokaler Variablen sind änderbar, Elementfelder nicht, weder Wert noch Sichtbarkeit, Schreibschutz und Aktivierungsstatus. Der Wert von Datenfeldern nur wenn das Makro serverseitig ausgeführt wurde.

Direktfenster

Das Direktfenster dient zur Abfrage und Zuweisung von Werten.

Um Werte abzufragen, muss die Zeile mit einem Fragezeichen beginnen, um Werte zuzuweisen, mit einem Größer-Zeichen.

In clientseitigen Makros lassen sich Werte von lokalen Variablen und Elementfeldern abfragen und ändern, in serverseitigen Makros von Datenfeldern und Variablen. Fehlermeldungen, wie sie beim Abfragen nicht existierender Felder auftreten, werden direkt unterhalb des auslösenden Ausdrucks ausgegeben. Die Cursor-Tasten nach oben/nach unten (up/down) können dazu verwendet werden, durch vorherige Eingaben zu navigieren und Befehle so zu wiederholen.

Die Bedienung und Funktionalität entspricht zu großen Teilen der des Ausdruckeditors.

Befehlsfenster

Im Befehlsfenster lassen sich Makrobefehle ausführen.

Es stehen nicht alle Befehle zur Verfügung (z.B. Bedingungen und Schleifen). Ein Kopieren/Einfügen aus dem Debugger-Fenster oder Makro-Editor ist möglich. Auch das Navigieren durch die Befehlshistorie mit den Pfeiltasten (up/down) sowie der Symbolleiste zur Wiederholung von Befehlen wird unterstützt. Einige Befehle, die bestimmte Umgebungsbedingungen benötigen, wie etwa das Aufrufen von Berichten und Auskünften, werden u.U. erst am Ende des aktuell laufenden Makros ausgeführt.