Erscheinungsbild
Mobile-Builder-API in der S/4HANA Cloud
Innerhalb einer ABAP-Klasse, die an eine View gebunden ist, greifen Sie über die Mobile-Builder-API auf das Frontend zu. In der Cloud läuft der Austausch zwischen App und Backend über den OData-Service der Runtime, die Basisklasse ist zmobbuild_cl_request_base. Die Methoden der View-Klasse sind in beiden Welten gleich (On-Prem-Fassung: Mobile-Builder-API on-prem).
Kanal und Basisklasse
| Cloud | |
|---|---|
| Basisklasse | zmobbuild_cl_request_base mit on_pbo und on_pai |
| Kanal | OData-Service ZMOBBUILD_UI_RUNTIME, Aktion processRun; die gebaute App kennt den Kanal aus ihrem Artefakt |
| Beispielklassen | Paket ZMOBBUILD_EXAMPLE: eine Klasse je Komponente (ZMOBBUILD_CL_EX_*), dazu Push- und RAP-Beispiele |
| Sprachversion | ABAP for Cloud Development |
Methodensignatur und Klassennamen
Die exakten Signaturen entnehmen Sie der Klasse, die der Designer beim Generieren anlegt, und den Beispielklassen im Tenant. Die folgende Beschreibung dokumentiert den funktionalen Umfang der API.
Properties lesen und setzen
Über die API lesen Sie den Wert einer Komponente (z.B. den Inhalt eines Eingabefelds) oder schreiben einen neuen Wert. Üblich sind:
| Property | Komponenten | Beispielzweck |
|---|---|---|
value | Input, TextArea, StepInput | Eingabe lesen und auswerten |
text | Label, Title, Button, Text | Anzeigetext setzen |
selected / state | CheckBox (selected), Switch (state); RadioButton über selectedIndex der Gruppe | Status lesen / setzen |
selectedKey | ComboBox, SegmentedButton | Aktuelle Auswahl lesen |
enabled / editable | enabled bei Button, CheckBox, Link, SegmentedButton, StepInput; editable bei Input, TextArea, ComboBox, TimePicker, CheckBox, StepInput | Komponente sperren/freigeben |
visible | die meisten Anzeige- und Eingabekomponenten (nicht App, View, Content, Kopf-/Fußzeile, HBox, VBox, ToolbarSpacer, ComboBoxItem und die Logic-Flow-Bausteine) | Komponente ein-/ausblenden |
Zahlen- und Dezimalwerte
Werte übergeben Sie an das Frontend immer als Text — dabei gilt:
- Lange Ziffernfolgen (HU-Nummern, EANs, Belegnummern — mehr als 15 Stellen oder mit führenden Nullen) kommen exakt so an, wie Sie sie übergeben.
- Dezimalwerte formatieren Sie im ABAP (
WRITE ... TO lv_text— nutzt automatisch das Dezimalformat aus den SU01-Benutzervorgaben) und übergeben z. B.1,5oder12,50. Komma-Werte werden vom Frontend garantiert nicht verändert und exakt so angezeigt — auch die Nachkomma-Null bleibt erhalten. - Punkt-Dezimalen wie
1.5werden dagegen als Zahl interpretiert und normalisiert angezeigt (12.50→12.5). - Beim Auslesen (PAI) erhalten Sie den Wert im selben Format als Text zurück — Komma-Werte parsen Sie im ABAP entsprechend zurück.
Items setzen (Listen / Tabellen)
Listen-Komponenten füllen Sie mit einer Datenmenge. Übergeben werden Daten in tabellarischer Form. Für Table sind dabei zusätzlich die Spaltenbindungen relevant – diese vergeben Sie über das Eigenschaften-Panel oder pflegen sie als Items mit benannten Feldern.
Navigation
Mit set_nav_to( iv_view_id ) wechseln Sie zur Laufzeit von einer View in eine andere. Einziger Parameter ist die controlId der Ziel-View (z.B. detail); Daten nimmt die Methode nicht entgegen.
Daten für die Ziel-View reisen getrennt davon über die globalen Daten (Bag):
| Methode | Bedeutung |
|---|---|
add_global_data( iv_key, io_data ) | Wert (Elementar, Struktur oder Tabelle) unter einem Schlüssel ablegen |
get_global_data( iv_key, co_data ) | Wert zu einem Schlüssel wieder auslesen |
remove_global_data( iv_key ) | Schlüssel entfernen |
Der Bag geht mit jeder Antwort an das Frontend und kommt mit dem nächsten Request zurück. Im Lifecycle-Hook on_pbo der Ziel-View lesen Sie ihn aus und initialisieren die View damit (z.B. Detail-Daten zu einer markierten ID nachladen).
Meldungen
Drei Varianten:
| Typ | Verwendung |
|---|---|
| Toast | Kurze, nicht-blockierende Bestätigung (z.B. „Gespeichert") |
| MessageStrip | Persistente Hinweis-Leiste in der View (z.B. Validierungsfehler) |
| Dialog | Modale Rückfrage (z.B. „Möchten Sie wirklich löschen?") mit Bestätigen / Abbrechen |
Value-State / Validierung
Beim Setzen des Value-States markieren Sie eine Komponente farblich:
| State | Bedeutung | UI-Effekt |
|---|---|---|
None | Standard | Keine Markierung |
Information | Info | Blau |
Success | Erfolg | Grün |
Warning | Warnung | Gelb |
Error | Fehler | Rot |
Zusätzlich können Sie einen State-Text setzen, der als Tooltip oder Hilfetext angezeigt wird.
Validatoren (siehe Funktionen) erledigen einfache Prüfungen automatisch – die Backend-API ist für fachliche Validierungen, die nicht client-seitig entschieden werden können (z.B. „Ist die Bestellnummer im SAP-System bekannt?").
App-Daten
Über die API erfragen Sie Metadaten zur laufenden App:
| Information | Verwendung |
|---|---|
| Aktuelle App-ID | Logging, Audit |
| Aktuelle View-ID | Verzweigungen je nach Quell-View |
| Übersetzte Texte | get_text( iv_key ) liefert den Text in der Anmeldesprache des Benutzers; get_i18n( iv_iso639 ) und get_i18n_text( iv_iso639, iv_key ) laden die Texte einer angegebenen Sprache. Eine eigene Abfrage der aktiven Sprache gibt es nicht |
Besonderheiten in der Cloud
Kein direktes Schreiben auf Tabellen
on_pai läuft innerhalb einer RAP-Anfrage. INSERT, UPDATE, MODIFY oder DELETE auf eine Datenbanktabelle sind dort nicht erlaubt und brechen die Anfrage ab. Legen Sie für App-Daten ein eigenes RAP-Objekt an (Tabelle, CDS-Sicht, Verhaltensdefinition, Behavior-Pool) und ändern Sie es aus der Event-Methode mit MODIFY ENTITIES … CREATE oder UPDATE ohne COMMIT ENTITIES. Der Mobile Builder sichert beim Abschluss der Anfrage. Das Beispiel ZMOBBUILD_I_EX_01 im Beispielpaket zeigt das Muster.
Strikte SQL-Syntax
SELECT … INTO steht am Ende der Anweisung, jede Hostvariable trägt ein @. Die Syntaxprüfung im Tenant meldet Verstöße beim Aktivieren.
Push an offene Apps
Aus der Event-Methode stoßen Sie einen Push an alle offenen Instanzen einer App oder an eine Sitzung mit der Aktion pushRefresh an. Die Beispielklasse ZMOBBUILD_CL_EX_PUSH_SERVICE kapselt beide Fälle: push_refresh_from_request innerhalb einer Anfrage, push_refresh von außerhalb, etwa aus einem Job. Die Empfänger-View muss die View-Eigenschaft pushInterval gesetzt haben, siehe Backend-Konfiguration; sie löst in der angezeigten View das Ereignis pushRefresh mit dem übergebenen Ereignisschlüssel (Standard Refresh) aus, und die Event-Methode verarbeitet es wie einen Klick.
Nur freigegebene APIs
Typen und Klassen, die nicht für die Cloud-Entwicklung freigegeben sind, stehen nicht zur Verfügung. Die Syntaxprüfung zeigt betroffene Stellen. Für JSON steht /UI2/CL_JSON bereit, für Zeitstempel und Zufallszahlen die XCO-Bibliothek.
Nächste Schritte
- Event-Methoden – die typischen Einstiegspunkte für API-Aufrufe
- Konstanten-Attribute –
controlIds typsicher verwenden - Unterschiede zu On-Prem