Microsoft Dynamics AX - Ausnahmebehandlung in X++

0 | 4966 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Microsoft Dynamics AX - Ausnahmebehandlung in X++" mit Ihrem Wissen!

Anzeige Hier werben

Des Öfteren lese ich, dass in vielen Unternehmen Microsoft Dynamics AX eingesetzt wird. Microsoft Dynamics AX ist ein objektorientiertes ERP-System. Dieses gehört zur Produktreihe von Microsoft Business Solutions und ist von Entwicklern her, total unterbesetzt!

Daher verfasse ich hier eine kleinen Text, in der Hoffnung, Personen die über Google Informationen zu AX suchen, hierher geleitet werden! Denn hier finden sich deutlich mehr Entwickler als in anderen Foren & meinem Blog.

Einleitung - Was kann das ERP-System von Microsoft Dynamics

Das ERP-System kann durch die sog. Axapta-Programmiersprache X++ angepasst und beliebig erweitert werden. Die Programmiersprache X++ ist dabei eine Mischung aus den Programmiersprachen Java, BASIC, C++ und SQL. Die Tabellen, Objekte und Methoden sind zum größten Teil Open Source und können dadurch beliebig angepasst werden.

Durch eine sog. Layerstruktur kann ein durch den Kunden angepasstes Objekt trotzdem released werden. Es gibt insgesamt 16 Layer, wovon jeweils zwei Layer logisch verknüpft sind. Die Layer setzten aufeinander auf, d. h. eine Änderung eines Objektes in einem höheren Layer verdeckt das Objekt im darunterliegenden.

Ausnahmebehandlung in X++

Transaktionen

Axapta besitzt ein Transaction Tracking System (TTS), das einzelne Datenbankaktionen als Transaktionen
zusammenfasst (kapselt), gemeinsam ausgeführt, und bei einem Fehler auch wieder gemeinsam
rückgängig macht.

Die hierfür nötigen Befehle in X++ lauten:

  • ttsbegin (Beginn einer Transaktion)
  • ttscommit (Abschluß der aktuellen Transaktion)
  • ttsabort (Rollback "Abbruch" der aktuellen Transaktion)

Jeglicher schreibende Zugriff auf Tabellen der Datenbank sollte nur innerhalb des TTS
erfolgen!

Die Zugriffe werden intern an einer temporären Kopie der Tabelle(n) durchgeführt, und bei Erreichen des
ttscommit; in die echten Tabellen übernommen. Tritt während der Ausführung einer Operationsfolge
innerhalb einer Transaktion ein Fehler auf, ist der Befehl ttsabort; zu geben, um zum Zustand vor Beginn
der Transaktion zurückzukehren.

Der Entwickler ist selber für sinnvolle Kapselung und Abschluß bzw. Abbruch von
Transaktionen zuständig!

Systemweit gibt es nur eine Instanz des TTS, wenn Beginn und Ende zu weit auseinanderliegen (im Code
wie in der Ausführungslogik), sind unvollendete Transaktionen und somit evtl. Datenverluste möglich.

Abfangen von Ausnahmen

Um Transaktionen oder andere, möglicherweise fehlerträchtige Vorgänge programmiertechnisch zu
kapseln, besitzt X++ drei Befehle zur Ausnahmebehandlung:

  • try { ... } (beginnt einen neuen überwachten Codeabschnitt)
  • throw { <Ausnahme> } (lässt einen Ausnahmefall programmiert eintreten)
  • catch { <Ausnahme> } (fängt eine Ausnahme ab)

Die Ausnahmen sind vom internen Enum-Typ, Exception.

Folgende Werte sind vordefiniert:

  • Exception:info (im Fall einer informativen Mitteilung)
  • Exception:warning (dient zur Anzeige einer Warnung)
  • Exception:error (für schwerwiegende Fehler)
  • Exception:deadlock (tritt ein, wenn Axapta eine Blockierung in der Datenbank erkennt)
  • Exception:internal (dient zur Anzeige interner Entwicklungsfehler in Axapta „Sorry“)
  • Exception:break (weist auf Drücken der Tastenkombination <STRG>-C hin)
  • Exception:dderror (weist auf einen Fehler in der Klasse DDE-Kernel hin)
  • Exception:sequence (Sequenz- Abfolge- Fehler)

Ein kurzes abschließendes Beispiel dazu:

 
Text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
static void job1(args _a)
{
    int e = 5;
;
    try {
        classes1::method1(e);
    }
    catch (Exception::error) {
        box::stop('method1 went wrong');
    }

static void method1(int a)
{
    if(a == 5) {
        throw(Exception::Error);
        // Code nach Throw wird nicht mehr ausgeführt!
    }
}


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 4 Personen an der Seite "Microsoft Dynamics AX - Ausnahmebehandlung in X++" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Microsoft Dynamics AX - Ausnahmebehandlung in X++" hier bearbeiten.

Mitarbeiter