
ADT - MIA Select Converter
Für MIA gibt es nun eine neue Aktion in den ABAP Development Tools, womit du deine alten Open SQL Statements nach ABAP SQL und ABAP Cloud konvertieren kannst.
Inhaltsverzeichnis
In diesem Artikel schauen wir uns ein Update zum Select Converter an und gehen auf die neue Integration in MIA ein und wie die Umsetzung erfolgt ist.
Einleitung
Auf dem ABAP Environment sind seit dem Release 2502 die IDE Actions verfügbar und wir haben bereits in einem älteren Artikel die erste Aktion mit MIA zur Verfügung gestellt. Mit IDE Actions kannst du die ABAP Development Tools an bestimmten Punkten erweitern und somit auf Basis von ABAP Erweiterungen vornehmen. So kannst du bestimmte Funktionen automatisieren, Code ersetzen oder Informationen extrahieren.
ABAP Select Converter
Vor einer Weile hatten wir den ABAP Select Converter zusammen mit dem CDS Extraktor vorgestellt. Dabei ging es vor allem um die Konvertierung von SELECT Statements in die neue Welt, weg von den klassischen Tabellen, hin zu Core Data Services. Der Extraktor stellt dabei über Git die Grundlage zur Verfügung und wie das Mapping auf Feldebene aussieht. Der Converter nimmt das SELECT Statement und zerlegt es in die Bestandteile, um dann Tabellen und Felder zu ersetzen.
Mittlerweile hat der Converter einen Overhaul bekommen und zerlegt nun das Statement komplett, um es als ABAP SQL in der neuen Syntax zu erzeugen. Damit wird nicht nur die Tabelle ausgetauscht, sondern auch das Statement einmal modernisiert.
Hinweis: Da es sich hierbei um eine komplexe Aktion handelt, kann es noch zu Fehlern oder Unschärfen kommen.
Action
Die neue IDE Action findest du jetzt im Open Source Projekt von MIA, dort ist die Aktion dokumentiert und kann zusammen mit den anderen Aktionen installiert werden.
Aufbau
Hierbei handelt es sich um eine recht einfache IDE Aktion die wir hier implementiert haben. Für die Aktion definieren wir eine Klasse und das sie nur in einer Klasse ausgeführt werden kann.
Dazu lesen wir in der Aktion den aktuellen Code des Objekts ein und ermitteln die Position der Selektion bzw. des Cursors. Weitere Informationen dazu findest du auch in der Doku unten.
DATA(resource) = CAST if_adt_context_src_based_obj( context->get_focused_resource( ) ).
DATA(sources) = resource->get_source_code( ).
DATA(position) = resource->get_position( ).
Im nächsten Schritt müssen wir das gesamte SELECT Statement aus dem Quellcode extrahieren. Dazu verwenden wir eine kleine Funktion, die den Anfang und das Ende sucht und den Select auf eine Zeile bringt.
DATA(extraction) = zcl_mia_strings=>extract_statement( statement = `SELECT`
sources = sources
start = position->pos-start ).
Hat die Ermittlung funktioniert, übergeben wir den SELECT an die API, diese ruft den Endpunkt des Select Converter auf, um das Statement zu konvertieren. Das Ergebnis erhalten wir dann in unserer Antwortstruktur zurück.
DATA(conversion) = zcl_mia_core_factory=>create_swh_tools( )->convert_select_statement(
request = VALUE #( statement = extraction-statement
abap_cloud = abap_true ) ).
Zum Abschluss übergeben wir das neue Statement an ein Source-Change-Result, dass uns dann den passenden Dialog anbietet, damit du als Entwickler das Ergebnis überprüfen kannst.
DATA(change_result) = cl_aia_result_factory=>create_source_change_result( ).
change_result->add_code_replacement_delta( content = conversion-data-new_statement
selection_position = position ).
result = change_result.
Ausführung
Wie führst du nun die eigentliche Aktion aus? Dazu musst du in deinem Quellcode das SELECT Statement markieren, welches du ersetzen möchtest. Dann startest du die IDE Action mit der Tastenkombination STRG + ALT + R und wählst die IDE Action "Migrate SELECT Statement".
Zum Abschluss wird die der Source Code Vergleich angezeigt und du kannst entscheiden, ob du die Änderungen übernehmen möchtest. Grundsätzlich funktioniert die Aktion auch in nicht aktivierten oder aktivierbaren Source Code. Damit kannst du auch einen SELECT umwandeln, der von On-Premise kommt und den du nur ins ABAP Environment kopiert hast.
GitHub
Das Open Source Projekt findest du auf GitHub und kannst es frei verwenden. Wenn du Fehler findest oder Verbesserungen vorzuschlagen hast, dann eröffne einfach einen Issue in GitHub.
Fazit
Wenn alle Bausteine vorhanden sind, ist eine Integration als IDE Action sehr einfach umzusetzen. Anhand der SAP Dokumentation, können auch schnell Ergebnisse erzielt werden.