
BTP - Business Configuration (Release 2511)
Schauen wir einmal auf die Änderungen in der Business Configuration Erstellung und was sich technisch in ABAP geändert hat. Dabei ist nicht alles beim alten Stand geblieben, sondern wurde weiter optimiert.
Inhaltsverzeichnis
Neue Features werden immer recht groß gefeiert, veröffentlicht, erklärt und hervorgehoben. Doch wie sieht es eigentlich mit Änderungen von bestehenden Features aus?
Einleitung
Das Thema Business Configuration ist nicht mehr so neu und die "neue Tabellenpflege" sollte jedem Entwickler ein Begriff sein, der in der BTP arbeitet oder schon ein Clean Core Projekt mit ABAP Cloud macht. Damit erstellen wir unsere Pflegeviews für Fiori und nehmen einige Vorteile für uns mit:
- Automatische Generierung der Pflege über Wizard in ADT
- Keine Fiori Generierung und Deployment nötig
- Steuerung über Berechtigungen
- Anpassbarkeit über das Entwicklungsmodell RAP
- Anschluss ans Transportwesen
Mit dem Release 2511 gab es nun ein paar größere Änderungen im Wizard, dem Aufbau des Objekts und der Funktionsweise der verschiedenen Bausteine. Daher schauen wir uns einmal das aktuelle Delta an.
Wizard
Beginnen wir im ersten Schritt mit dem Wizard und den zur Verfügung stehenden Optionen. Dazu legen wir im ersten Schritt eine neue Tabelle im System an, da diese Grundlage für die Generierung ist. Dabei sollten wir die grundlegenden Eigenschaften berücksichtigen, wie die Auslieferungsklasse C (Customizing) und die Pflege erlauben. Zusätzlich müssen alle Schlüsselfelder, die auf CHAR basieren, als Datenelement und Domäne zur Verfügung stehen. Erst dann kann der Wizard gestartet werden.
@EndUserText.label : 'BC Changes'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zbs_dmo_pocbc {
key client : abap.clnt not null;
key configuration_key : zbs_demo_poc_configuration not null;
integer_value : abap.int4;
character_value : abap.char(60);
}
Im nächsten Schritt müssen wir beim Wizard das Paket für die Generierung angeben. Hier hätte ich mir gewünscht, dass das gleiche Paket wie die Tabelle verwendet wird, da in größer als 90% der Fälle der Pflegeview im gleichen Paket liegt.
Kommen wir nun zur Einstellung des Generators. Die größte Änderung gibt es hier direkt zu Beginn in der Szenario Auswahl. Wir können nun entscheiden, ob wir den Projection Layer mit generieren lassen oder nur das eigentliche Business Objekt für die Pflege. Ebenfalls können wir nun die Transport Selection einstellen und den Transport Selection Strip deaktivieren.
Der Rest bleibt soweit gleich und wir befüllen die Informationen, wie wir die Objekte generieren wollen. Sind wir mit den Einstellungen fertig, dann erhalten wir eine Übersicht der Objekte. Dann startet die Generierung der verschiedenen Objekte im System.
Aktivierung
Sind wir mit der Generierung der Objekte fertig, dann wird nicht das Service Binding geöffnet, sondern wir landen direkt im "Business Configuration Maintenance Object". Die erste Auffälligkeit hier ist, dass nur noch die Service Configuration offen ist und alle anderen Konfigurationen geschlossen sind. Die Einstellungen sind aber soweit erst einmal gleich.
Schauen wir im Bereich "Hiding draft related features" vorbei, dann gibt es in diesem Bereich einiges an neuen Einstellungen. Da das Verständnis für das Draft Konzept für einen Endendwender vielleicht ein wenig fremd ist oder schwer zu verstehen ist, können viele der Features in der Oberfläche versteckt werden.
Was passiert eigentlich nun genau, wenn die Features aktiviert werden?
- Hide all features related to draft handling - Versteckt Features wie die Nachricht in der Leiste, dass der Draft gespeichert wurde oder der Button heißt anstatt "Discard draft" nun "Cancel".
- Stay on current page after save/cancel - Damit wird die Navigation nach den Aktionen deaktiviert und du bleibst auf der aktuellen Seite.
- Hide create next button - Auf der Object Page wird normalerweise ein "Create next" Button angezeigt, damit kannst du einen weiteren Datensatz anlegen, ohne die Seite zu verlassen. Praktisch, wenn du mehrere Datensätze konfigurieren möchtest.
Aktuell ist der OData Service nicht aktiv, daher müssen wir noch dahin navigieren und den Publish des Services starten. Über das Objekt musst du einfach nur auf den Link drücken und die Navigation dahin startet. Nach der Aktivierung können wir uns das UI anschauen.
Transport
Zum Zeitpunkt als dieser Artikel geschrieben wird, wir trotz deaktiviertem Transport und Transportstrip die Funktion mit in das Business Objekt generiert. Wir denken aber, dass dieser Bug spätestens zum nächsten Release dann entfernt wird und das Verhalten nur bei Wunsch implementiert wird.
Coding und Objekte
Schauen wir uns einmal die generierten Objekte im Detail an.
API
In der Verhaltensimplementierung wird nun nicht mehr der Code direkt implementiert, sondern es wird eine wiederverwendbare API verwendet, die zentral geändert werden kann und nicht immer den gleichen Code über alle Objekte verteilt. Dafür ist nun die Logik erst einmal nicht mehr so einfach einsehbar.
METHOD get_instance_features.
mbc_cp_api=>rap_bc_api( )->get_instance_features( transport_object = co_transport_object
entity = co_entity
keys = REF #( keys )
requested_features = REF #( requested_features )
result = REF #( result )
failed = REF #( failed )
reported = REF #( reported ) ).
ENDMETHOD.
METHOD get_global_authorizations.
mbc_cp_api=>rap_bc_api( )->get_global_authorizations( entity = co_authorization_entity
requested_authorizations = REF #( requested_authorizations )
result = REF #( result )
reported = REF #( reported ) ).
ENDMETHOD.
Möchtest du gezielt Prüfungen deaktivieren, kann im Moment nur die komplette API-Methode deaktiviert werden. Damit hat die neue Lösung erst einmal Vor- aber auch Nachteile.
Admin Felder
Wahrscheinlich wird dir bereits bei der Definition der Tabelle aufgefallen sein, dass wir keine Admin Felder angegeben haben, die zuvor eigentlich immer Pflicht waren. Geben wir die Felder nicht an, dann wird ein Join über den Core Data Service "I_CstmBizConfignLastChgd" erstellt, der ein Feld für die letzte Änderung hinzufügt. Dieses Feld wird dann im BO ETag verwendet, um sich um die Sperre zu kümmern. Damit können wir für die Tabelle die Felder weglassen.
Metadata Extension
Für den Singleton werden nun die UI Annotation im Core Data Service generiert und es wird nicht mehr extra eine Metadata Extension generiert. Falls du bestimmte Funktionen aus dem UI nun suchst, dann solltest du hier schauen, wenn du zum Beispiel den Transportbutton wieder entfernen willst. Macht aber insgesamt das Objekt etwas schlanker und setzt den Fokus auf die eigentlichen Pflegeobjekte.
Berechtigungen
Geht es dann wieder um die Erstellung einer IAM App und die Zuordnung der Berechtigungen zum Anwender, dann befinden wir uns im "alten" Standard. Du musst eine IAM App anlegen, den Service zuordnen und die Berechtigungen für S_TABU_NAM erteilen. Hast du dann die Berechtigungen einem Business Catalog zugeordnet und dem User zugewiesen, dann sollte er das Objekt in der App "Custom Business Configurations" sehen.
Fazit
Äußerlich fallen die Änderungen nun nicht allzu stark auf, doch die Überarbeitung des Generators zeigt sich an verschiedenen Stellen. Grundsätzlich nimmt er dir viel Arbeit bei einfachen Pflegedialogen ab, so wie es bereits der Tabellenpflegegenerator gemacht hat. Aktuell gibt es aber keine Nachgenerierung der Pflege.





