In dieser Übung erweitern Sie Ihre lokale Klasse um Attribute für den Abflughafen und den Zielflughafen und lesen die Werte für diese Attribute aus einer Datenbanktabelle aus.
Aufgabe 1: Vorlage kopieren
Kopieren Sie die Vorlageklasse. Alternativ können Sie Ihre Lösung aus der vorherigen Übung kopieren.
Schritte
Kopieren Sie die Klasse /LRN/CL_S4D400_CLS_CONSTRUCTOR in eine Klasse in Ihrem eigenen Paket (Namensvorschlag: ZCL_##_SELECT, wobei ## für Ihre Gruppennummer steht).
Öffnen Sie den Quelltext der globalen Klasse /LRN/CL_S4D400_CLS_CONSTRUCTOR.
Verknüpfen Sie die View Project Explorer mit dem Editor.
Klicken Sie in der View Project Explorer mit der rechten Maustaste auf die Klasse /LRN/CL_S4D400_CLS_CONSTRUCTOR, um das Kontextmenü zu öffnen.
Wählen Sie im Kontextmenü Duplicate ...
Geben Sie den Namen Ihres Pakets in das Feld Package ein. Geben Sie im Feld Name den Namen ZCL_##_SELECT ein, wobei ## für Ihre Gruppennummer steht.
Passen Sie die Beschreibung an, und wählen Sie Next.
Bestätigen Sie den Transportauftrag, und wählen Sie Finish.
Aufgabe 2: Zusätzliche Attribute deklarieren
Erweitern Sie die lokale Klasse lcl_connection um die privaten Instanzattribute airport_from_id und airport_to_id. Fügen Sie der Implementierung der Methode get_output Ausgabedaten für die neuen Attribute hinzu.
Notiz
Die neuen Attribute sind noch nicht gefüllt. Um sie zu füllen, fügen wir dem Konstruktor in einer der nächsten Aufgaben dieser Übung eine SELECT-Anweisung hinzu.
Schritte
Wechseln Sie in die lokale Klasse lcl_connection.
Wählen Sie in der globalen Klasse Local Types.
Fügen Sie der Klassendefinition folgende private Attribute hinzu:
Attribute
| Attributname | Umfang | Datentyp |
|---|
| airport_from_id | Instanz | /DMO/AIRPORT_FROM_ID |
| airport_to_id | Instanz | /DMO/AIRPORT_TO_ID |
Passen Sie den Quelltext wie folgt an:
12345678910
PRIVATE SECTION.
DATA carrier_id TYPE /dmo/carrier_id.
DATA connection_id TYPE /dmo/connection_id.
DATA airport_from_id TYPE /dmo/airport_from_id.
DATA airport_to_id TYPE /dmo/airport_to_id.
ENDCLASS.
Erweitern Sie die Implementierung der Methode get_output. Hängen Sie weitere Zeichenketten-Templates an den Returning-Parameter r_output an. Betten Sie die neuen Attribute als Ausdrücke in die Zeichenketten-Templates ein.
Navigieren Sie zur Implementierung der Methode get_output.
Passen Sie den Quelltext wie folgt an:
1234567
APPEND |--------------------------------| TO r_output.
APPEND |Carrier: { carrier_id }| TO r_output.
APPEND |Connection: { connection_id }| TO r_output.
APPEND |Departure: { airport_from_id }| TO r_output.
APPEND |Destination: { airport_to_id }| TO r_output.
Aktivieren Sie die Klasse. Führen Sie sie aus, und analysieren Sie die Konsolenausgabe.
Drücken Sie Strg + F3, um die Klasse zu aktivieren.
Drücken Sie F9, um die Klasse auszuführen.
Aufgabe 3: Die Datenbanktabelle analysieren
Analysieren Sie die Definition der Datenbanktabelle /DMO/CONNECTION.
Schritte
Öffnen Sie das Entwicklungsobjekt, das die Definition der Datenbanktabelle /DMO/CONNECTION enthält.
Wählen Sie in der Eclipse-Symbolleiste ///Open ABAP Development Object, oder drücken Sie Strg + Umschalt + A.
Geben Sie im Eingabefeld als Suchzeichenfolge /dmo/con ein.
Klicken Sie in der Liste der passenden Einträge auf /DMO/CONNECTION (Datenbanktabelle), und wählen Sie OK.
Öffnen Sie die Elementinformationen (F2) für die Datenbanktabelle /DMO/CONNECTION.
Klicken Sie auf /dmo/connection nach dem Schlüsselwort define table, und drücken Sie F2, um die Elementinformationen anzuzeigen.
Aufgabe 4: Daten aus der Datenbank lesen
Implementieren Sie im Methodenkonstruktor der lokalen Klasse lcl_connection eine SELECT-Anweisung, die Werte für die neuen Attribute aus der Datenbanktabelle /DMO/CONNECTION liest.
Schritte
Kehren Sie zur lokalen Klasse lcl_connection in Ihrer globalen Klasse zurück.
Öffnen Sie in der Editor-View von Eclipse die Registerkarte ZCL_##_SELECT.
Wählen Sie in der globalen Klasse Local Types.
Navigieren Sie zur Implementierung der Methode constructor.
Suchen Sie nach der Quelltextzeile METHOD constructor..
Fügen Sie nach der Anweisung ENDIF. eine SELECT-Anweisung hinzu, die einen Einzelsatz aus der Datenbanktabelle /DMO/CONNECTION liest.
Passen Sie den Quelltext wie folgt an:
123456789
IF i_carrier_id IS INITIAL OR i_connection_id IS INITIAL.
RAISE EXCEPTION TYPE cx_abap_invalid_value.
ENDIF.
SELECT SINGLE
FROM /dmo/connection
Implementieren Sie die FIELDS-Klausel. Lesen Sie die Tabellenfelder airport_from_id und airport_to_id.
Hinweis
Verwenden Sie die automatische Vervollständigung (Strg + Leertaste), um die Feldnamen einzugeben.
Geben Sie nach FROM /DMO/CONNECTIONFIELDS ein.
Drücken Sie nach einem Leerzeichen Strg + Leertaste, und wählen Sie airport_from_id.
Drücken Sie nach einem Komma und einem Leerzeichen erneut Strg + Leertaste, und wählen Sie airport_to_id.
Die vollständige FIELDS-Klausel sollte wie folgt aussehen:
123
FIELDS airport_from_id, airport_to_id
Implementieren Sie die WHERE-Bedingung. Schränken Sie alle Schlüsselfelder der Datenbanktabelle (mit Ausnahme des Mandantenfeldes) mit den Werten der Importing-Parameter i_carrier_id und i_connection_id ein. Vergessen Sie nicht, als Escape-Zeichen für die Parameter das Präfix @ voranzustellen.
Hinweis
Verwenden Sie die automatische Vervollständigung (Strg + Leertaste), um die Element- und Parameternamen einzugeben.
Fügen Sie den folgenden Quelltext nach der FIELDS-Klausel hinzu:
1234
WHERE carrier_id = @i_carrier_id
AND connection_id = @i_connection_id
Implementieren Sie die INTO-Klausel. Speichern Sie das SELECT-Ergebnis in den Attributen airport_from_id und airport_to_id. Vergessen Sie nicht, als Escape-Zeichen für die Attribute das Präfix @ voranzustellen.
Hinweis
Verwenden Sie die automatische Vervollständigung (Strg + Leertaste), um die Attributnamen einzugeben.
Passen Sie den Quelltext wie folgt an:
123456
WHERE carrier_id = @i_carrier_id
AND connection_id = @i_connection_id
INTO ( @airport_from_id, @airport_to_id ).
Die vollständige SELECT-Anweisung sollte wie folgt aussehen:
12345678
SELECT SINGLE
FROM /dmo/connection
FIELDS airport_from_id, airport_to_id
WHERE carrier_id = @i_carrier_id
AND connection_id = @i_connection_id
INTO ( @airport_from_id, @airport_to_id ).
Implementieren Sie die Fehlerbehandlung nach der SELECT-Anweisung. Überprüfen Sie den Inhalt des Systemfeldes sy-subrc. Wenn er ungleich Null ist, muss die Ausnahme CX_ABAP_INVALID_VALUE ausgelöst werden.
Fügen Sie den folgenden Quelltext nach der SELECT-Anweisung hinzu:
12345
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE cx_abap_invalid_value.
ENDIF.
Aktivieren Sie die Klasse. Führen Sie sie aus, und analysieren Sie die Konsolenausgabe. Prüfen Sie, ob die Ausgabe für die neuen Attribute Daten anzeigt.
Drücken Sie Strg + F3, um die Klasse zu aktivieren.
Drücken Sie F9, um die Klasse auszuführen.