ABAP-Fallen: Kritische Größenangaben

Diesen Artikel habe ich ursprünglich im SAP Community Network veröffentlicht. Es gibt verschiedene Möglichkeiten, mit XML-Daten in ABAP umzugehen, die alle mehr oder weniger gut dokumentiert sind. Wenn Sie beispielsweise einen abwärtskompatiblen ereignisbasierten Parsing-Ansatz benötigen, können Sie die iXML-Bibliothek mit ihrem integrierten Parser im SAX-Stil verwenden. (Beachten Sie, dass iXML das gesamte Dokument immer noch erstellt, sodass es eher einem DOM-Parser mit einer angehängten SAX-Ereignisausgabe ähnelt. Wenn Sie eine streng serielle Verarbeitungsfunktion suchen, sehen Sie sich stattdessen die relativ neue sXML-Bibliothek an. ...

20. August 2015 · Volker Wegert

ABAP-Fallen: CALL TRANSFORMATION id(ontwork)

Diesen Artikel habe ich ursprünglich im SAP Community Network veröffentlicht. Ich verwende asXML seit einigen Jahren als bequeme Möglichkeit, beliebige ABAP-Datenstrukturen zu serialisieren und zu deserialisieren. Vor einiger Zeit habe ich von IF_SERIALIZABLE_OBJECT und seiner Verwendung zum [Einfügen von Klasseninstanzen (auch Objekte genannt) in eine asXML-Darstellung Darstellung] (http://help.sap.com/abapdocu_740/en/abenasxml_class_instances.htm) erfahren. Vor ein paar Tagen beschloss ich, diese Technik in einem aktuellen Entwicklungsprojekt zu verwenden. Gleichzeitig versuchte ich, CL_DEMO_OUTPUT_STREAM anstelle von klassischen Listen zu verwenden [wie in der Online-Dokumentation vorgeschlagen] (http://help.sap.com/abapdocu_740/en/abenabap_dynpro_list.htm). Da ich mit den Grundlagen der Verwendung von Transformationen vertraut war, konzentrierte ich mich eher auf die Verwendung dieser neuen Ausgabetechnologie. Ich habe ein kleines Demoprogramm wie dieses hier zusammengeworfen: ...

5. Juni 2015 · Volker Wegert

ABAP-Fallen: RFC ja, Konvertierung nein

Diesen Artikel habe ich ursprünglich im SAP Community Network veröffentlicht. Vor einigen Wochen musste ich eine scheinbar einfache Aufgabe programmieren: Von einem SAP Business Workflow, der in System ABC ausgeführt wird, musste ein Sub-Workflow mit mehreren Schritten in einem anderen System oder sogar in mehreren anderen Systemen gestartet werden. Da keine BPM-Engine verfügbar war, entschied ich mich, einfache RFC-fähige Funktionsbausteine zu verwenden, um Workflow-Ereignisse im Zielsystem auszulösen. Die Sub-Workflows können dann über einfache Objekttyp-Verknüpfungseinträge gestartet werden. Dieser Ansatz funktioniert zwar für mein einfaches Szenario recht gut, aber ich bin auf ein völlig unerwartetes Problem gestoßen, dessen Lösung mich eine ganze Weile gekostet hat. ...

14. November 2014 · Volker Wegert

ABAP-Fallen: Death By STRING

Diesen Artikel habe ich ursprünglich im SAP Community Network veröffentlicht. Wie im vorherigen Beitrag ist auch dieser eine Fallstrick, den eher die Entwickler von Frameworks und Toolkits als deren Nutzer betrifft. Der Datentyp STRING ist in ABAP seit 4.6A verfügbar (wie viele von Ihnen erinnern sich übrigens daran, an diesem Release gearbeitet zu haben?), und viele Entwickler scheinen Strings als die einzige Möglichkeit zu betrachten, textähnliche Daten in einem ABAP-Programm zu transportieren. Ich kann nur über die Gründe spekulieren – vielleicht liegt es daran, dass ABAP für die meisten Entwickler nicht die erste Programmiersprache ist und in anderen Sprachen Strings das gängige Instrument zur Verarbeitung von Textdaten sind. Einige langjährige ABAP-Entwickler könnten auch auf Strings umgestiegen sein, weil sie einfacher zu verwenden sind als die herkömmlichen C-Felder – man muss nicht mehr über die maximale Länge des Wertes nachdenken. In vielen Programmen und Frameworks habe ich das folgende Muster gesehen: ...

21. November 2011 · Volker Wegert

ABAP-Fallen: Type Lock-In

Diesen Artikel habe ich ursprünglich im SAP Community Network veröffentlicht. In den vergangenen ABAP-Fallen-Blogs habe ich über verschiedene Probleme geschrieben, die beim Schreiben von Code in ABAP auftreten können. Beim heutigen Thema geht es eher um ein strukturelles oder gestalterisches Problem. Für dieses Beispiel verwenden wir die folgende Klassenhierarchie: IMPORTING Stellen Sie sich eine Methode vor, die eine Instanz von CL_SUPER verwendet, um eine beliebige Operation auszuführen: METHODS bar IMPORTING ir_object TYPE REF TO cl_super. ... DATA: lr_super TYPE REF TO cl_super, lr_sub1 TYPE REF TO cl_sub1, lr_sub2 TYPE REF TO cl_sub2. ... lr_foo->bar( lr_super ). lr_foo->bar( lr_sub1 ). lr_foo->bar( lr_sub2 ). Das ist ziemlich einfach – wenn wir diese Methode aufrufen, können wir entweder eine Variable von TYPE REF TO cl_super oder eine beliebige der Unterklassen übergeben, da jede Instanz von CL_SUB1 eine CL_SUPER-Instanz ist. Dies gilt auch für Unterklassen, von denen der Ersteller der ursprünglichen Klassen nichts weiß – zum Beispiel für alle Kundenimplementierungen, die das bestehende Framework erweitern. ...

5. Oktober 2011 · Volker Wegert