dox42 & SAP Adressaufbereitung

Weltweit agierende SAP Kunden sind immer wieder mit länderspezifischen Adressformatierungen konfrontiert. In einem SAP System kann dies je Land eingestellt oder durch kundenindividuelles Coding ergänzt werden.

Damit man in dox42 diese Adressformatierungen verwenden kann, verwenden wir ganz einfach den Funktionsbaustein ADDRESS_INTO_PRINTFORM. Dadurch stehen uns die gleichen Adressaufbereitungen zur Verfügung, wie sie auch in den SAP internen Formulartechnologien SAPScript, SmartForms oder Adobe Forms verwendet werden.

Im ABAP Backend wird der Funktionsbaustein wie folgt aufgerufen:

Die Ausgabefelder adr_line1, adr_line2, … werden über die Datamap an dox42 übergeben. In dox42 können dieses Adresszeilen dann wie alle anderen Felder verwendet werden. Ich würde bei den Adresszeilen ev. noch eine Bedingung ergänzen, dass keine Leerzeilen ausgegeben werden.

Das Ergebnis sollte dann ca. so aussehen:

Weiterführende Links zum Thema Adressenaufbereitung im SAP:

https://www.berater-wiki.de/Adressenaufbereitung#Funktionsbaustein_ADDRESS_INTO_PRINTFO

ABAP 756_757

ABAP Webinar – ABAP 7.56/7.57 Releaseabhängige Änderungen

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Vielen Dank an alle Teilnehmer unseres Webinars zum Thema ABAP 7.56/7.57 Releaseabhängige Änderungen.

Unterlagen/Links zum Webinar

Links

Twitteraccounts

ABAPConf 2023

Findet heuer am 7. Dezember von 09:00 – 18:00 Uhr statt. Registrieren, um keine Updates zu verpassen:

Unser nächstes Webinar

  • 29. September 10:00 – 11:00 Uhr. Einladung folgt noch rechtzeitig
ABAP RAP Nummernvergabe

ABAP RAP Nummernvergabe

Die Nummernvergabe ist ein wesentlicher Bestandteil von ABAP RAP Anwendungen. Konkret geht es bei der Nummernvergabe darum, wie die Schlüsselfelder der Entität mit Werten versorgt werden. RAP bietet uns hier verschieden Lösungsansätze, welche jedoch manchmal auch zur Verwirrung führen und ich deshalb hier kurz erläutern möchte.

Zuerst müssen wir einmal klären, was Früh/Spät und Managed/Unmanaged bei der Nummernvergabe bedeutet.

Frühe- und Späte Nummernvergabe

Bei der frühen Nummerierung geht es darum, dass die Nummer bereits durch den Consumer oder durch das RAP-Framework zu einem frühen Zeitpunkt erzeugt wird. Bei der späten Nummerierung werden die eigentlichen Keys erst zum SAVE-Zeitpunkt vergeben, wodurch eine lückenlose Nummerierung realisiert werden kann.

Managed und Unmanaged

Wenn man als Key-Feld eine Guid hat, kann man sich für eine automatische (=managed) Nummerierung entscheiden. Bei der unmanaged Nummerierung wird die Nummernvergabe durch entsprechende ABAP Codes realisiert.

Folgende Kombinationsmöglichkeiten sind vorhanden:

Frühe NummernvergabeSpäte Nummernvergabe
ExternX
ManagedXX
UnmanagedXX

Frühe externe Nummernvergabe

Bei der frühen externen Nummernvergabe werden die Key-Felder bereits durch den Consumer gefüllt. In der Behavior-Definition müssen wir dafür sorgen, dass das Feld bei der Erstellung änderbar ist, bei Änderungen jedoch nicht mehr geändert werden kann.

In der Behavior Definition ist für diese Nummerierung keine spezielle Angabe zu machen. Jedoch sollten die Key-Felder bei Updates auf readonly gesetzt werden:

field ( readonly : update ) orderId;

Frühe interne Nummernvergabe

Die frühe interne Nummernvergabe kann nur angewendet werden, wenn es sich bei dem Key-Feld um eine Guid (Raw 16) handelt. In der Behavior Definition sind auch in diesem Scenario nur zwei kleine Definitionen für das Key-Feld vorzunehmen:

field ( readonly ) orderGuid;
field ( numbering : managed ) orderGuid;

Zuerst setzen wir die Guid auf readonly und in zweiten Zeile legen wir die automatische interne Nummerierung auf die Guid fest.

Unmanaged interne Nummernvergabe

Diese unmanaged interne Nummernvergabe kann sowohl für managed als auch unmanaged RAP Business Objekte verwendet werden. Auf Entity Level müssen wir eben in der Behavior Definition diese Nummerierung mit early numbering definieren. Ebenso sollten die Key-Felder auf readonly gesetzt werden.

Nun kann man entweder über Quick-Fix oder manuell eine Implementierung für die Nummerierung vornehmen. Die Methodensignatur sieht wie folgt aus:

METHODS earlyNumberingOrder method for NUMBERING
   [IMPORTING] entities FOR CREATE business_object_entity …

In der Methode ist nun die Nummernvergabe für die Objekte in entities umzusetzen. Wichtig ist, dass die erfolgreichen Nummernvergaben in die Exporttabelle mapped bekannt gegeben werden müssen.

Unmanaged späte Nummernvergabe

Auch die unmanaged späte Nummernvergabe kann für beide RAP Szenarien verwendet werden. Auf Entity Level wird dies durch late numbering definiert. Ebenso sollten die Key-Felder auf readonly gesetzt werden.

Die Implementierung der Nummernvergabe erfolgt in einer Methode adjust_numbering, welche im Zuge der save sequence – nach dem Point of no return – aufgerufen wird. Die Methode kann man sich wieder mit einem Quick-Fix erzeugen lassen.

Die erzeugte Nummer muss über den Export-Parameter mapped mit dem internen temporären Key zugeordnet werden.

Referenzen

Webinar - ABAP RAP in Action

Webinar – ABAP® RAP in Action

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Vielen Dank an alle Teilnehmer unseres Webinars zum Thema ABAP RAP in Action. Bei dem Webinar ging es um Aktionen bzw. Funktionen und wie man diese in RAP implementiert.

Unterlagen/Links zum Webinar „ABAP® RAP in Action“

Links

Twitteraccounts

Unser nächstes Webinar

Steht noch nicht fest, wird aber natürlich noch rechtzeitig bekannt gegeben.

ABAP CDS

Webinar – ABAP® CDS

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Vielen Dank an alle Teilnehmer unseres Webinars zum Thema ABAP CDS. Ohne ABAP CDS geht in Zukunft in der ABAP Entwicklung nichts mehr. Dass diese aber gar nicht so kompliziert sind, haben wir in diesem Webinar gezeigt.

Unterlagen/Links zum Webinar „ABAP® CDS“

Twitteraccounts

Unser nächstes Webinar

Das Thema und der Termin stehen noch nicht fest werden wir aber Zeitnah bekannt geben. Unser Fokus liegt nun ganz auf die ABAPConf 2022 die am 7. Dezember über die Bühne gehen wird.

https://www.abapconf.org

Wer nochmals die vielen Vorträge vom letzten Jahr sehen will, findet die Aufzeichnungen ebenfalls auf der ABAPConf Homepage.

RAP & Illegal Statements

Webinar – RAP & Illegal Statements

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Vielen Dank an alle Teilnehmer unseres Webinars zum Thema ABAP RAP & Illegal Statements

Unterlagen/Links zum Webinar „ABAP RAP & Illegal Statements“

Links

Twitteraccounts

Unser nächstes Webinar

Das Thema steht noch nicht fest, aber der Termin steht schon einmal: 30. September 2022 – Und registrieren kann man sich auch schon: https://www.eventbrite.com/e/abap-webinar-tbd-tickets-374641582057

Aber es wird sicher wieder ein spannendes Thema!

Low_NoCode Header

Low-Code / No-Code – Die Lösung für die S/4HANA® Migration?

Wer mich kennt weiß, dass ich Low-Code/No-Code Lösungen mit einer gewissen Skepsis betrachte. Nicht weil es sich dabei um schwache Lösungen handelt. Low-Code / No-Code Anwendungen können durchaus den Flaschenhals des „Fachkräftemangel“ lindern.

SAP® und Low-Code/No-Code – Eine Reise durch die Zeit

Als ich mich mit dem Blogbeitrag erstmals auseinandergesetzt hab, ist mir schnell bewusst geworden, dass ich eigentlich vor 30 Jahren als Low-Code ABAP Entwickler angefangen habe. Ich habe damals im R/2 Reports erstellt. Diese wurden mit Hilfe von logischen Datenbanken realisiert. Ein Entwickler musste lediglich ein paar wenige Kommandos wie GET, CHECK oder WRITE verwenden.

Eigentlich sehr genial, denn damals konnten wir Business-Anforderungen teilweise noch in wenigen Stunden umsetzen. Für Transaktionen konnten wir einen einfachen Screen Painter verwenden und mit PBO und PAI wurde eine sehr simple Dynprologik implementiert.

Schnittstellen wurden mit Hilfe von Batch-Input Mappen auf die Transaktionen realisiert. Eine einheitliche Schnittstellentechnologie für alle – wirklich alle – SAP-Transaktion. Genial!

Am Anfang von R/3 gab es erstmals modulspezifische Berichtsfunktionen (z.B. Report Writer/Report Painter), welche bald durch SAP Query bzw. Quick Viewer ergänzt wurden. Nur zur Verdeutlichung, wir reden hier von einer Zeit vor der 2000er Wende. GuiXT sollte man auch nicht unerwähnt lassen. Ein Tool, mit dem man SAP Gui Screens einfach adaptieren/optimieren konnte.

Und Mitte der 2000er Jahre hat SAP mit dem Visual Composer bzw. dem Composite Application Framework erstmals einen (meiner Meinung nach erfolglosen) Versuch in Richtung Low-Code/No-Code Applikation gestartet.

Aktuelle Low-Code/No-Code Tools der SAP®

Derzeit zählen Tools wie Screen Personas, Fiori Elements oder ganz aktuell SAP AppGyver zu den Low-Code/No-Code Tools der SAP. Im nachfolgenden Teil gehe ich ganz kurz auf diese Anwendungen ein und stelle wie immer weiterführende Links zur Verfügung.

Screen Personas

Ziel von Screen Personas ist es bestehende SAP Gui Transaktionen – auch Kundenentwicklungen – in ein modernes, zeitgemäßes Erscheinungsbild zu bringen. Diese können auch ganz einfach in ein Fiori Launchpad integriert werden. Die Möglichkeiten von Screen Personas sind überschaubar, können aber durch Scripts erweitert werden.

Fiori Elements

Fiori Elements kann man auch zu den Low-Code Tools zählen. Die Darstellung und das Verhalten von Fiori Elements Anwendungen wird rein durch Metadaten (lokal oder vom Backend) gesteuert. Die Daten werden mittels OData (z.B. ABAP RAP oder CAP) prozessiert. SAP selber liefert viele ihrer Fiori Anwendungen in Form von Fiori Elements aus.

Fiori Elements werden mit dem Business Application Studio oder Visual Studio Code erstellt und können bei Bedarf mit Hilfe von den Fiori Tools auch relativ einfach erweitert werden.

SAP® AppGyver

Das ist der jüngste Zukauf der SAP aus dem Jahre 2021. Der finnische Anbieter ist ein weltweit bekannter Anbieter von No-Code Tools und wird derzeit von der SAP sehr gepusht. Auf den ersten Blick sieht das Tool interessant aus. Aber da die Erweiterungsmöglichkeiten sehr, sehr eingeschränkt sind, bin ich nicht sicher ob sich dieses Tool zum Erstellen von Apps für S/4HANA eigenen kann.

Low-Code Plattformen anderer Hersteller

Natürlich bietet nicht nur SAP Low-Code Tools (für SAP) an. Ich möchte hier drei bekannte Anbieter aufzählen, die ebenfalls im Low-Code Teich fischen. Alle Anbieter gehören eher zu den Low-Code Anbietern, sprich die erstellten Anwendungen können mehr oder weniger individuell erweitert werden. Wie genau, muss man sich von Hersteller zu Hersteller speziell ansehen. Und natürlich sind hier extra Lizenzen für die Hersteller zu entrichten.

Neptune

Neptune wurde bereits 2011 von zwei erfahrenen SAP-Beratern gegründet. Von Anfang an mit dem Fokus das Leben eines SAP Developers einfacher zu gestalten. Neptune ist in über 40 Ländern im Einsatz und verfügt über 600 Kunden.

Interessant ist Neptune deshalb, da es weder Gateway noch RAP für die Erstellung von SAPUI5 Anwendungen benötigt und direkt im SAP als Transaktion verfügbar ist.

Simplifier

Simplifier bzw. die Vorgängerfirm iTiZZiMO ist seit 2012 am Markt und verfügt laut eigenen Angaben über viele produktive Referenzen. Simplifier scheint auf den ersten Blick auch für eine Pro-Entwickler interessant zu sein, da es viele Erweiterungsmöglichkeiten gibt.

Mendix

Von Mendix habe ich zuerst vor 3 oder 4 Jahren bei einer TechEd erstmals im Zusammenhang mit SAP gehört. Laut eigenen Angaben zählt Mendix zu den Weltmarktführern im Low-Code Bereich und wurde 2018 von Siemens übernommen. In letzter Zeit habe ich jedoch nicht mehr so oft von SAP & Mendix gehört.

Low-Code/No-Code – Einbahn?

Generelles Risiko von Low-Code/No-Code ist die eingeschränkte oder überhaupt unmögliche Erweiterung durch individuelles Coding. Sobald man sich für einen Low-Code/No-Code Ansatz entscheidet muss man sich diesem Risiko bewusst sein.

Beispielsweise kann ich aus eigener Erfahrung bestätigen, dass man die Fiori Elements umfangreich erweitern kann. Bei AppGyver ist dies laut meinem Kenntnisstand derzeit nicht oder nur in sehr geringem Ausmaß möglich.

ABAP RAP - Tipps & Tricks

Webinar – ABAP® RAP Tipps & Tricks

Vielen Dank für Ihre Teilnahme an unserem Webinar!

Vielen Dank an alle Teilnehmer unseres Webinars zum Thema ABAP RAP Tipps & Tricks aus der Praxis.

Unterlagen/Links zum Webinar „ABAP RAP Tipps & Tricks aus der Praxis“

Video Sprungmarken

Links

Cache Buster Dokumenation

App Index Calculate

SE11 Suchhilfe via Custom Entity

Twitter

Unser nächstes Webinar

Das Thema steht noch nicht fest, aber der Termin steht schon einmal: 24. Juni 2022 – Und registrieren kann man sich auch schon: https://www.eventbrite.at/e/abap-webinar-tbd-tickets-332256186197

Aber es wird sicher wieder ein spannendes Thema!

Rapid Report Generator – Sneak Preview

Wir haben die Abende im Lockdown genutzt und ein neues Produkt an den Start gebracht. Am Freitag dem 13. Mai werden wir eine Sneak Preview zum Rapid Report Generator liefern. Wer werden aber nicht nur das Produkt kurz vorstellen, sondern auch ein paar Hintergrundinformationen zur Entwicklung, Architektur (UI5, Gateway) und unseren „Learnings“ liefern.

Eventbrite Freitag 13. Mai 10:00 – 10:30

UI5 und der Cache

UI5/Fiori und der Cache!

Viele kennen die Situation. Man hat im Entwicklungssystem eine super coole UI5/Fiori App für ein S/4HANA System gebastelt, aber nach dem Import in das Produktivsystem (oder Q-System) geht erstmal gar nix. Target was not found, Type Error, Unknown Setting, Cannot read properties, …

Sehr oft liegen die Gründe der Probleme am Cache! Nicht nur am Browser Cache, auch im SAP Backend gibt es mehrere zu berücksichtigende Caches. Nachfolgend eine Auflistung der Cache Themen, die mir im Zuge meiner Arbeit untergekommen sind.

Eigentlich unglaublich, wie viele Caches man ggf. löschen / invalidieren muss.

Wichtiger Hinweis: Das sind meine persönlichen Erfahrungen, bitte verwendet die Reports oder Transaktionen nur nach vorheriger Prüfung. Es kann durchaus sein, dass der eine oder andere Report obsolet wird oder in gewissen System nicht verwendet werden darf! Ich übernehme keine Garantie, dass die Reports oder Transaktionen in euren Systemen einwandfrei und korrekt funktionieren.

NameTypErläuterungBereich
/UI5/APP_INDEX_CALCULATEReportAb UI Add-On 2.0+ Sollte periodisch eingeplant seinUI / App
/UI2/DELETE_CACHEReportLöscht UI2 Services & Target Mapping CachesUI / App / Lpd
/IWFND/CACHE_CLEANUPTransaktionClean Frontend OData CacheGW
/IWBEP/CACHE_CLEANUPTransaktionClean Backend OData CacheGW
ICM Server CacheGlobal InvalidierenUI / App / GW
/UI2/INVALIDATE_CLIENT_CACHESReportClient Cache Invalidation Fiori Launchpad / Cache BusterUI / App
/UI2/INVALIDATE_GLOBAL_CACHESReportInvalidiert alle UI2 Caches (Alle Services mit /UI2/*, SHMM, … )UI / App
/UI5/UPD_ODATA_METADATA_CACHEReportOData Cache – Cache Buster TokensUI / App
/UI5/UPDATE_CACHEBUSTERReportNur für UI Add-On 1.0UI / APP
CL_SADL_LOAD_AREAShared MemoryShared Memory invalidierenUI / APP
/UI2/FLP_DEL_PERSONALIZATIONReportSAP Fiori Launchpad PersonalisierungenUI / APP
Browser CacheIE, Chrome, … Cache UI / APP

/UI5/APP_INDEX_CALCULATE

Das ist mein Lieblingsreport in dem Zusammenhang, da er mir in den meisten Fällen immer die Probleme löst. Es gibt einen Applikationsindex und Caching für Apps, Komponenten und Libraries. Dieser Report löscht bzw. invalidiert diese Caches / Indextabellen und ist im Normalfall automatisch eingeplant.

Ich habe jedoch die Erfahrung gemacht, dass nach einem Transport von Änderungen einer UI5 Anwendung, ein explizites Ausführen des Reports für die jeweilige Anwendung notwendig ist.

Weiter Informationen zu dem Report können hier entnommen werden:

/UI2/DELETE_CACHE

Hier geht es um das Löschen des UI2 Cache. Dieser kann für einen User oder generell gelöscht werden.

/IWFND/CACHE_CLEANUP und /IWBEP/CACHE_CLEANUP

Invalidiert / Löscht das oData Model (SEGW oder RAP) am Frontend- und Backend-Server.

/UI2/INVALIDATE_CLIENT_CACHES

Dieser Report sollte überhaupt nur in Ausnahmefällen notwendig sein – wenn der UI5 Cache Buster im Einsatz ist. Eine Erklärung zum Report gibt es unter help.sap.com.

/UI2/INVALIDATE_GLOBAL_CACHES

Invalidiert alle globalen UI2 Caches. Bitte die Dokumentation des Reports im System beachten.

/UI5/UPD_ODATA_METADATA_CACHE

Der Report löscht die OData Caches Tokens. Bitte auch hier die Dokumentation des Reports beachten.

/UI5/UPDATE_CACHEBUSTER

Der sorgt dafür, dass der Cache Buster mit dem aktuellsten UI5 Metadaten arbeitet. Der Report ist jedoch nur bei Systemen mit UI Add-On 1.0 einzusetzen. Bei Systemen mit einem höheren UI Add-On Release ist hingegen /UI5/APP_INDEX_CALCULATE zu verwenden.

/UI2/FLP_DEL_PERSONALIZATION

Fiori Launchpad Homepages können normalerweise durch den Anwender personalisiert werden. Es können neue Gruppen angelegt werden, Apps entfernt oder hinzugefügt werden. Manchmal ist es notwendig, solche Personalisierungen zurückzusetzen. Beispielsweise nach Änderungen im Fiori Katalog oder einer Fiori Gruppe. Ein Erklärung zu der Funktion ist hier beschrieben.

Sonstiges

Änderungen an Service-Definitionen müssen manchmal manuell in Transportaufträgen aufgenommen und transportiert werden.

Fazit

Es vergeht fast kein Transport wo nicht irgendein Cache ein Problem bereitet. Aber mit dem /UI5/APP_INDEX_CALCULATE bekommt man das meist in den Griff.

Ich werden diesen Blogpost nach und nach um weitere Erkenntnisse in dem Zusammenhang ergänzen.

header_charts_sagen_mehr_als_1000_worte

Charts sagen mehr als 1000 Worte!

Ein Bild sagt bekanntlich mehr als 1000 Worte. Ein Chart kann zur Verdeutlichung von Trends oder Besonderheiten, die sonst nur schwer ersichtlich wären, beitragen. Mit dem Rapid Report Generator kann jeder Report zusätzlich oder ausschließlich einen Chart ausgeben.

Wir wollen nun den Report aus dem Blogpost RRG – Neuer Report in 3:30 Minuten um die Ausgabe eines Charts erweitern. Ich verzichte hier auf eine Stoppuhr da wir in weniger als einer Minute zu einem Ergebnis kommen werden. Versprochen!

Aktivieren der Chartausgabe

Wir starten wieder in der Rapid Report Administration. Die Ausgabe eines Charts wird ganz einfach durch das Setzen der entsprechenden Checkbox aktiviert:

Ein paar Detailerklärungen:

  • Output Chart – Damit wird die Ausgabe eines Charts für den Report generell aktiviert
  • Default Chart Type – Das ist der initiale Chart Type bei der Ausgabe. In diesem Beispiel haben wir uns für Bar entschieden.
  • Chart Selection – Wenn diese Einstellung aktiviert ist, kann der Anwender den Chart Type zur Laufzeit wechseln.
  • Details Button – Bei dieser Einstellung kann zur Laufzeit ein Details Button zur Detailanzeige von selektierten Chartelementen verwendet werden.
  • Breadcrumbs for Dimension – Dadurch wird die Dimension in Form von Breadcrumbs anstatt eines DropDown Feldes ausgegeben.

Initiale Spalten für Dimension und Measure

Ein Chart benötigt immer zumindest jeweils eine Spalte für die Dimension und einen Messwert. Diese Spalten können bereits in den Reporteinstellungen eingestellt werden. Wenn diese Einstellungen nicht vorbelegt werden, muss der Anwender zur Laufzeit die Spalten selektieren.

Alle Spalten des Reports stehen automatisch abhängig vom Typ als Dimension oder Measure Felder zur Verfügung. Im konkreten Fall haben wir die CARRID als Dimension und das Feld SEATSMAX als Measure aktiviert. Schauen wir uns mal das Ergebnis des Reports an.

Wie eingangs versprochen haben wir in unter einer Minute ein ansprechendes Ergebnis. Der Anwender kann nun noch einige Anpassungen in der Ausgabe vornehmen.

Ändern von Measure oder Dimension

Die Messwerte bzw. Dimensionen können im Chart über die Einstellungsfunktionen jederzeit geändert werden. So können auch mehrere Dimensionen oder Messwerte in einem Chart verwendet werden. Im nachfolgenden Beispiel wurden z.B. Airline und Plane Type als Dimension und 3 Spalten als Messwert verwendet.

Ändern des Chart Types

Wenn die Änderung des Charts erlaubt wurde, stehen dem Anwender eine Fülle weiterer Charttypen zur Verfügung.

Layout Liste & Chart

Wenn eine Liste gemeinsam mit einem Chart ausgegeben wird, können im oberen Bereich 6 Darstellungslayouts selektiert werden.

Die Buttonleiste hat folgende Bedeutung:

  • Table only – Es wird nur die Ergebnisliste ausgegeben
  • Chart only – Es wird nur der Chart ausgegeben
  • Chart/Table vertical – Ausgabe in Form von Chart oben, Tabelle unten
  • Table/Chart vertical – Ausgabe in Form von Tabelle oben, Chart unten
  • Table/Chart horizontal – Ausgabe in Form von Tabelle links, Chart rechts
  • Chart/Table horizontal – Ausgabe in Form von Chat links, Tabelle rechts

Nachfolgend Beispiele für alle genannten Darstellungsvarianten:

Sichern als PNG

Charts können mit der Funktion Download Chart jederzeit als PNG Datei gesichert werden. Es wird nur der sichtbare Teil in die PNG Datei exportiert. Es sollte daher darauf geachtet werden, dass der gesamte Chart sichtbar ist.