SAP Build Apps
Visual no-code/low-code application development on SAP Business Technology Platform. Build responsive web and mobile applications with drag-and-drop tooling, OData and REST data integrations, visual logic flows, and one-click deployment to SAP BTP and SAP Build Work Zone.
What is SAP Build Apps?
SAP Build Apps (formerly SAP AppGyver) is a visual, no-code/low-code application development tool that enables professional developers and business experts to create responsive web and mobile applications without writing code. It is part of the SAP Build suite — SAP's unified low-code platform available on SAP BTP.
Applications built with SAP Build Apps run as HTML5 applications hosted on SAP BTP. They connect to SAP systems (S/4HANA, SuccessFactors, CAP services) and third-party APIs through the BTP Destination Service, with full principal propagation and XSUAA-based role enforcement.
Quick Facts
- Product
- SAP Build Apps
- Runtime
- HTML5 on SAP BTP
- Development
- Browser-based visual editor
- App Types
- Responsive web + mobile
- Data Sources
- OData V4/V2, REST, BTP services
- Auth Model
- XSUAA + IAS (OAuth 2.0 PKCE)
- Deployment
- BTP HTML5 Repo + Work Zone
- Included In
- GROW with SAP, Build Suite
- Availability
- Generally Available
- Discovery Center
- sap-build-apps
Architecture
SAP Build Apps consists of three layers: the browser-based visual development environment, the BTP-hosted runtime infrastructure, and the data and identity layer that connects applications to SAP and third-party backends.
UI Canvas
- Drag-and-drop component library
- Fiori Horizon-aligned themes
- Responsive breakpoints
- Custom CSS overrides
- Component variants and states
Data Canvas
- OData V4 and V2 resources
- REST API resources
- BTP Destination binding
- Schema inference from metadata
- App, page, and component variables
Logic Canvas
- Event-driven flow functions
- Page-load and component events
- HTTP request flow nodes
- Navigation and toast functions
- Custom JavaScript flow nodes
Formula Editor
- MVEL-based expression language
- Typed formula suggestions
- Locale-aware formatting functions
- String, number, date utilities
- Conditional and list functions
Data Sources
SAP Build Apps accesses backend systems through the BTP Destination Service. A destination defines the URL, authentication method, and connection properties for each backend. Build Apps resolves destinations at runtime using the Application Router, so credentials are never stored in the application bundle.
OData V4 (Recommended)
- S/4HANA Cloud — SAP API Business Hub services
- CAP-generated OData V4 endpoints
- SuccessFactors OData V2 (legacy)
- Automatic schema inference from $metadata
- Filter, expand, orderby, top/skip support
REST APIs
- Custom BTP-hosted microservices
- SAP Integration Suite APIs
- Third-party REST services via Destination
- Manual schema definition in Data Canvas
- GET, POST, PATCH, DELETE support
BTP Platform Services
- Build Process Automation — trigger workflows
- SAP Notification Service — push notifications
- SAP Document Management Service
- SAP Mobile Services — device features
- Event Mesh — event-driven data updates
Destination Configuration
Configure destinations in the BTP Cockpit (Connectivity → Destinations). Build Apps uses the destination name as the reference — the actual URL and credentials remain server-side and are never exposed in the application bundle.
1# BTP Destination — S/4HANA Cloud OData (Principal Propagation)
2# Create via BTP Cockpit → Connectivity → Destinations
3
4Name=S4HANA_CLOUD_PP
5Type=HTTP
6URL=https://<tenant>.s4hana.ondemand.com
7ProxyType=Internet
8Authentication=OAuth2SAMLBearerAssertion
9
10# OAuth2 SAML Bearer (principal propagation to S/4HANA)
11audience=https://<tenant>.s4hana.ondemand.com
12clientKey=<xsuaa-client-key>
13tokenServiceURL=https://<xsuaa-url>/oauth/token/alias/<alias>
14tokenServiceUser=<client-id>
15tokenServicePassword=<client-secret>
16
17# Required additional properties for OData consumption
18sap-client=100
19WebIDEEnabled=true
20WebIDESystem=S4HANA_CLOUD
21HTML5.DynamicDestination=true
22HTML5.ForwardAuthToken=true
23
24---
25# BTP Destination — CAP OData V4 (Client Credentials)
26Name=CAP_SERVICE_CC
27Type=HTTP
28URL=https://my-cap-app.cfapps.<region>.hana.ondemand.com
29ProxyType=Internet
30Authentication=OAuth2ClientCredentials
31
32tokenServiceURL=https://<xsuaa-url>/oauth/token
33clientId=<service-instance-client-id>
34clientSecret=<service-instance-client-secret>
35scope=<xsuaa-scope>
36
37HTML5.DynamicDestination=true
38HTML5.ForwardAuthToken=falseSAP Integrations
SAP Build Apps is designed to integrate with the SAP portfolio through standardised OData and REST APIs, leveraging the BTP Destination Service as the secure intermediary.
SAP S/4HANA Cloud Integration
S/4HANA Cloud exposes thousands of pre-built OData V4 APIs via the SAP API Business Hub. Connect Build Apps to S/4HANA using OAuth2 SAML Bearer Assertion (principal propagation) to preserve the end-user identity across the call.
- Sales Order API (A_SalesOrder) — read, create, update
- Business Partner API (A_BusinessPartner)
- Product Master API (A_Product)
- Purchase Order API (A_PurchaseOrder)
- Custom CDS-based APIs via SAP Extensibility
- Custom Fields surfaced through standard APIs
SAP CAP Service Integration
CAP services generate OData V4 endpoints natively. Build Apps consumes them through a BTP destination configured with client credentials or principal propagation. CAP's declarative authorisation annotations enforce role checks on the server side.
- Direct OData V4 resource binding to CAP service
- CAP @restrict annotations honoured server-side
- Fiori annotations drive auto-generated list/form UI
- Draft handling (PATCH + Activate) via logic flows
- CAP actions and functions callable as HTTP requests
SAP SuccessFactors Integration
SuccessFactors exposes OData V2 APIs. Build Apps connects through a BTP destination with OAuth2 SAML Bearer Assertion for principal propagation, preserving the SuccessFactors user context.
- Employee Central: EmpEmployment, PerPerson entities
- Learning: LearningItemAssignment, Completion records
- Time Off: TimeAccount, TimeAccountDetail
- Performance & Goals: Goal, FormHeader entities
- OData V2 syntax ($format=json, $expand)
SAP Build Work Zone Integration
Deploy Build Apps applications as tiles in the SAP Build Work Zone launchpad. The HTML5 application bundle is published to the HTML5 Application Repository and discovered by Work Zone via the Content Provider configuration.
- HTML5 app deployed to BTP HTML5 Repository
- Work Zone discovers app via Content Provider
- Role assignment controls tile visibility
- SAP Mobile Start displays mobile-optimised tile
- Single Sign-On: same IAS session across app and launchpad
OData Integration
OData V4 is the recommended protocol for Build Apps data resources. The visual Data Canvas reads the service $metadata document and infers entity types, keys, navigation properties, and capabilities automatically.
1// SAP Build Apps — OData V4 Data Resource configuration
2// Configured in the Data Canvas (exported as app metadata JSON)
3
4{
5 "dataResources": [
6 {
7 "id": "salesOrders",
8 "name": "Sales Orders",
9 "type": "odata",
10 "destinationName": "S4HANA_CLOUD_PP",
11 "metadataPath": "/sap/opu/odata4/sap/api_sales_order_srv/srvd_a2x/sap/api_sales_order/0001/$metadata",
12 "entitySet": "A_SalesOrder",
13 "capabilities": {
14 "readable": true,
15 "creatable": true,
16 "updatable": true,
17 "deletable": false
18 },
19 "defaultQuery": {
20 "$top": 50,
21 "$orderby": "CreationDate desc",
22 "$select": "SalesOrder,SalesOrderType,SoldToParty,TotalNetAmount,TransactionCurrency,OverallSDProcessStatus"
23 }
24 },
25 {
26 "id": "salesOrderItems",
27 "name": "Sales Order Items",
28 "type": "odata",
29 "destinationName": "S4HANA_CLOUD_PP",
30 "metadataPath": "/sap/opu/odata4/sap/api_sales_order_srv/srvd_a2x/sap/api_sales_order/0001/$metadata",
31 "entitySet": "A_SalesOrderItem",
32 "capabilities": {
33 "readable": true,
34 "creatable": false,
35 "updatable": false,
36 "deletable": false
37 }
38 }
39 ]
40}Entity Sets
Bind to any $metadata-defined EntitySet. Collection and single-record modes supported.
$filter, $expand, $select
All standard OData V4 system query options available as formula expressions in data variable configuration.
Navigation Properties
Follow associations with $expand to load related entities (e.g. SalesOrder → SalesOrderItem) in a single request.
Bound Actions and Functions
Call OData V4 bound actions (e.g. Activate, Submit) using the HTTP Request flow node in the Logic Canvas.
Delta Tokens
OData V4 delta queries supported for incremental sync patterns in mobile-offline scenarios. (Roadmap — check SAP Road Map Explorer)
OData V2 Compatibility
SuccessFactors and older S/4HANA on-premise APIs can be consumed via OData V2 resources with manual schema definition.
REST API Integration
For services that do not expose an OData interface, Build Apps provides a REST API data resource type. The developer defines endpoints, path parameters, query parameters, and request/response schemas manually in the Data Canvas. Authentication is resolved by the BTP Destination Service.
1// SAP Build Apps — REST API Data Resource
2// Configured in the Data Canvas for a custom BTP-hosted REST service
3
4{
5 "dataResources": [
6 {
7 "id": "approvalRequests",
8 "name": "Approval Requests",
9 "type": "rest",
10 "destinationName": "APPROVAL_API",
11 "baseUrl": "",
12 "endpoints": {
13 "getCollection": {
14 "method": "GET",
15 "relativePath": "/api/v1/approvals",
16 "queryParameters": [
17 { "key": "status", "label": "Status Filter", "type": "string" },
18 { "key": "assignee", "label": "Assignee ID", "type": "string" }
19 ],
20 "responseSchema": {
21 "type": "array",
22 "itemSchema": {
23 "id": "string",
24 "title": "string",
25 "status": "string",
26 "requestedBy": "string",
27 "createdAt": "string",
28 "priority": "string"
29 }
30 }
31 },
32 "updateRecord": {
33 "method": "PATCH",
34 "relativePath": "/api/v1/approvals/{id}",
35 "pathParameters": [{ "key": "id", "type": "string" }],
36 "requestBodySchema": {
37 "status": "string",
38 "comment": "string"
39 }
40 }
41 }
42 }
43 ]
44}Supported Authentication Modes
- OAuth2 SAML BearerPrincipal propagation to S/4HANA / SF
- OAuth2 Client CredentialsService-to-service calls (CAP, BTP services)
- OAuth2 PKCE (user)Direct end-user OAuth flow — no approuter
- Basic AuthenticationOn-premise via Cloud Connector (legacy)
- API Key / Custom HeaderThird-party APIs — header injected by destination
- No AuthenticationPublic endpoints (read-only reference data)
Logic Canvas — HTTP Request Flow Node
Beyond data variables (auto-fetch), the Logic Canvas provides a dedicated HTTP Request flow node for imperative API calls — used for POST, PATCH, and DELETE operations triggered by user events.
- Any HTTP method (GET, POST, PATCH, PUT, DELETE)
- Dynamic URL construction via formula
- Request headers as key-value formulas
- Request body as structured object or raw string
- Response body mapped to app/page variables
- On-success and on-error branches for error handling
Authentication & Authorisation
SAP Build Apps applications are secured using the standard BTP identity chain: SAP Identity Authentication Service (IAS) authenticates the user; XSUAA issues a scoped JWT token; the Application Router enforces route-level authentication and proxies backend calls through the Destination Service.
XSUAA Security Descriptor
Define application-level scopes, role templates, and role collections inxs-security.json. Role collections are then assigned to users via the BTP Cockpit or via IPS group-to-role-collection mappings.
1{
2 "xsappname": "my-build-apps-approval",
3 "tenant-mode": "dedicated",
4 "description": "XSUAA security descriptor for Build Apps approval application",
5 "scopes": [
6 {
7 "name": "$XSAPPNAME.Approver",
8 "description": "Can view and action approval requests"
9 },
10 {
11 "name": "$XSAPPNAME.Requester",
12 "description": "Can create and view own requests"
13 },
14 {
15 "name": "$XSAPPNAME.Admin",
16 "description": "Full administrative access"
17 }
18 ],
19 "role-templates": [
20 {
21 "name": "Approver",
22 "description": "Approval workflow participant",
23 "scope-references": ["$XSAPPNAME.Approver"]
24 },
25 {
26 "name": "Requester",
27 "description": "Can raise requests",
28 "scope-references": ["$XSAPPNAME.Requester"]
29 },
30 {
31 "name": "Administrator",
32 "description": "Full admin access",
33 "scope-references": [
34 "$XSAPPNAME.Approver",
35 "$XSAPPNAME.Requester",
36 "$XSAPPNAME.Admin"
37 ]
38 }
39 ],
40 "role-collections": [
41 {
42 "name": "BuildApps_Approver",
43 "description": "Assigned to managers who action approval requests",
44 "role-template-references": ["$XSAPPNAME.Approver"]
45 },
46 {
47 "name": "BuildApps_Requester",
48 "description": "Assigned to employees who raise requests",
49 "role-template-references": ["$XSAPPNAME.Requester"]
50 }
51 ]
52}Identity and Access Model
Authentication Chain
- 1User navigates to Build Apps URL (or Work Zone tile)
- 2Application Router redirects unauthenticated users to IAS login page
- 3IAS authenticates via SAML 2.0, OIDC, or corporate IdP (AD/LDAP)
- 4IAS issues SAML assertion → Application Router exchanges with XSUAA
- 5XSUAA issues scoped JWT token (includes assigned role collections)
- 6Application Router serves HTML5 app; JWT used for backend calls
- 7Destination Service propagates user JWT to SAP backend systems
Deployment
SAP Build Apps compiles visual application definitions into an HTML5 bundle. The bundle is deployed to the BTP HTML5 Application Repository and served to users through an Application Router. Deployment can be triggered directly from the Build Apps editor or scripted through the BTP CLI for CI/CD pipelines.
1_schema-version: '3.1'
2ID: my-build-apps-approval
3version: 1.0.0
4description: SAP Build Apps — Approval application MTA descriptor
5
6modules:
7 # ── HTML5 Application (built by Build Apps) ─────────────────────────────────
8 - name: my-build-apps-approval-app
9 type: html5
10 path: app/
11 build-parameters:
12 builder: custom
13 commands:
14 - npm run build
15 supported-platforms: []
16
17 # ── Application Router ────────────────────────────────────────────────────
18 - name: my-build-apps-approval-approuter
19 type: approuter.nodejs
20 path: approuter/
21 parameters:
22 disk-quota: 256M
23 memory: 256M
24 requires:
25 - name: my-build-apps-xsuaa
26 - name: my-build-apps-html5-repo-runtime
27 - name: my-build-apps-destination-service
28 - name: my-build-apps-connectivity
29 provides:
30 - name: approuter-url
31 properties:
32 url: '${default-url}'
33
34resources:
35 # ── XSUAA (authentication and authorisation) ─────────────────────────────
36 - name: my-build-apps-xsuaa
37 type: org.cloudfoundry.managed-service
38 parameters:
39 service: xsuaa
40 service-plan: application
41 path: ./xs-security.json
42
43 # ── HTML5 Application Repository (stores built app bundle) ───────────────
44 - name: my-build-apps-html5-repo-runtime
45 type: org.cloudfoundry.managed-service
46 parameters:
47 service: html5-apps-repo
48 service-plan: app-runtime
49
50 # ── Destination Service (resolves named destinations) ────────────────────
51 - name: my-build-apps-destination-service
52 type: org.cloudfoundry.managed-service
53 parameters:
54 service: destination
55 service-plan: lite
56
57 # ── Connectivity Service (for Cloud Connector on-premise access) ─────────
58 - name: my-build-apps-connectivity
59 type: org.cloudfoundry.managed-service
60 parameters:
61 service: connectivity
62 service-plan: liteDeploy via Build Apps Editor
- One-click Build and Deploy in the editor
- Automatically creates HTML5 app in target subaccount
- No CLI or MTA tooling required
- Suitable for individual apps and prototypes
Deploy via MTA (CI/CD)
- Export app bundle as .zip artefact from editor
- Package in MTA descriptor with approuter and XSUAA
- Deploy with cf deploy (Cloud MTA Build Tool)
- Integrate in GitHub Actions or Jenkins pipelines
Mobile Deployment
- SAP Mobile Start app launches Build Apps tiles
- Responsive layout adapts to mobile viewport
- Device camera, geolocation via logic flow nodes
- SAP Mobile Services manages push notifications
Formula Language
SAP Build Apps uses a formula language (MVEL-based) in the Formula Editor to create dynamic bindings, filter expressions, conditional logic, and data transformations. Formulas are used wherever a value needs to be computed rather than static — in component bindings, flow function parameters, and data variable queries.
1// SAP Build Apps — Logic Canvas: Formula examples
2// Used in component bindings and flow function parameters
3
4// ── Filter sales orders by status ──────────────────────────────────────────
5// Data variable filter formula (applied to OData $filter parameter)
6IF(
7 IS_EMPTY(pageVars.selectedStatus),
8 "",
9 ENCODE_URL("OverallSDProcessStatus eq '" + pageVars.selectedStatus + "'")
10)
11
12// ── Format currency amount ─────────────────────────────────────────────────
13// Bound to a text component displaying monetary values
14FORMAT_LOCALIZED_DECIMAL(
15 NUMBER(item.TotalNetAmount),
16 "en-US",
17 2,
18 2
19) + " " + item.TransactionCurrency
20
21// ── Conditional visibility ────────────────────────────────────────────────
22// Show an "Approve" button only for open items assigned to current user
23AND(
24 item.OverallSDProcessStatus == "A",
25 item.RequestedByUser == systemVars.currentUser.email
26)
27
28// ── Navigation with parameters ─────────────────────────────────────────────
29// Used in "Navigate to page" flow function — passes record ID as page param
30{
31 "SalesOrder": item.SalesOrder,
32 "SalesOrderType": item.SalesOrderType
33}
34
35// ── HTTP request body construction ────────────────────────────────────────
36// Used in "HTTP request" flow function for a PATCH call body
37{
38 "status": "APPROVED",
39 "comment": pageVars.approvalComment,
40 "approvedAt": NOW(),
41 "approvedBy": systemVars.currentUser.email
42}String functions
UPPERCASE, LOWERCASE, TRIM, CONTAINS, SPLIT, REPLACE
Number functions
NUMBER, FORMAT_LOCALIZED_DECIMAL, ROUND, ABS, MIN, MAX
Date functions
NOW, FORMAT_DATETIME_LOCAL, PARSE_DATETIME, DATE_DIFFERENCE
List functions
MAP, FILTER, FIND, SORT, COUNT, REDUCE, FLATTEN
Condition functions
IF, AND, OR, NOT, IS_EMPTY, IS_NULL, SWITCH
Encode functions
ENCODE_URL, ENCODE_JSON, DECODE_JSON, BASE64
System variables
systemVars.currentUser, systemVars.deviceInfo, systemVars.theme
Context variables
appVars, pageVars, componentVars, rowBindingContext
Real Application Examples
The following scenarios represent production patterns for SAP Build Apps deployments. Each uses documented SAP API Business Hub services or standard BTP integration patterns.
Sales Order Approval
Field SalesField sales managers review and approve/reject pending sales orders on mobile. Real-time status updates reflect back in S/4HANA.
- List view: filtered by approval-pending status
- Detail view: order header + line items ($expand)
- Approve / Reject buttons trigger OData PATCH action
- Push notification on new pending order (BTP Notification Service)
- Offline-capable reading list (SAP Mobile Services)
Leave Request Application
All EmployeesEmployees submit leave requests through a mobile-first interface. Managers receive and action requests. All data persists in SuccessFactors Time Off.
- Date-picker driven leave request form
- Remaining balance displayed from TimeAccount
- Submit creates LeaveRequest record in SuccessFactors
- Manager list filtered by approver ID (systemVars.currentUser)
- Email notification via BTP Alert Notification Service
Field Service Inspection
Field TechniciansTechnicians conduct equipment inspections on-site, capturing photos and completing checklist forms that persist to a CAP backend service.
- Device camera integration (logic flow: Take Photo)
- Image uploaded to SAP Document Management Service
- Checklist form backed by CAP Draft handling
- GPS coordinates captured via device geolocation
- Works partially offline; syncs on reconnection
Purchase Requisition Tracker
Procurement TeamProcurement team tracks open purchase requisitions and expedites approvals. Connects to S/4HANA Purchasing APIs.
- Dashboard tiles: count by status (In Process, Approved, Rejected)
- Drill-down list with OData $filter by requestor
- Change requestor and expedite flag via PATCH
- Export to CSV via formula ENCODE_CSV function
- Integrated in Work Zone as procurement tile
Onboarding Checklist
HR Business PartnersHR business partners manage new hire onboarding tasks. Checklist items stored in a CAP service, employee data fetched from SuccessFactors.
- Employee search using SuccessFactors PerPerson API
- Checklist items from CAP service with completion status
- Assign owner and due date per checklist item
- Progress bar computed by formula: COUNT(FILTER(items, completed == true)) / COUNT(items)
- Trigger onboarding workflow via Build Process Automation
Inventory Quick Check
Warehouse StaffWarehouse staff check stock levels and initiate transfer orders directly from a mobile app on the warehouse floor.
- Barcode scan (camera) → OData $filter on EAN product number
- Stock display per storage location with quantity
- Transfer order creation via OData POST to A_StockTransferOrder
- Offline product catalogue cached for low-connectivity use
- Available in SAP Mobile Start as full-width card
Sample Implementation
The following shows the complete MTA descriptor for deploying a SAP Build Apps application with Application Router, XSUAA, HTML5 Repository, Destination Service, and Connectivity Service — the full production infrastructure stack.
1_schema-version: '3.1'
2ID: my-build-apps-approval
3version: 1.0.0
4description: SAP Build Apps — Approval application MTA descriptor
5
6modules:
7 # ── HTML5 Application (built by Build Apps) ─────────────────────────────────
8 - name: my-build-apps-approval-app
9 type: html5
10 path: app/
11 build-parameters:
12 builder: custom
13 commands:
14 - npm run build
15 supported-platforms: []
16
17 # ── Application Router ────────────────────────────────────────────────────
18 - name: my-build-apps-approval-approuter
19 type: approuter.nodejs
20 path: approuter/
21 parameters:
22 disk-quota: 256M
23 memory: 256M
24 requires:
25 - name: my-build-apps-xsuaa
26 - name: my-build-apps-html5-repo-runtime
27 - name: my-build-apps-destination-service
28 - name: my-build-apps-connectivity
29 provides:
30 - name: approuter-url
31 properties:
32 url: '${default-url}'
33
34resources:
35 # ── XSUAA (authentication and authorisation) ─────────────────────────────
36 - name: my-build-apps-xsuaa
37 type: org.cloudfoundry.managed-service
38 parameters:
39 service: xsuaa
40 service-plan: application
41 path: ./xs-security.json
42
43 # ── HTML5 Application Repository (stores built app bundle) ───────────────
44 - name: my-build-apps-html5-repo-runtime
45 type: org.cloudfoundry.managed-service
46 parameters:
47 service: html5-apps-repo
48 service-plan: app-runtime
49
50 # ── Destination Service (resolves named destinations) ────────────────────
51 - name: my-build-apps-destination-service
52 type: org.cloudfoundry.managed-service
53 parameters:
54 service: destination
55 service-plan: lite
56
57 # ── Connectivity Service (for Cloud Connector on-premise access) ─────────
58 - name: my-build-apps-connectivity
59 type: org.cloudfoundry.managed-service
60 parameters:
61 service: connectivity
62 service-plan: liteConfiguration Data Resources
OData V4 resource configuration as exported from the Data Canvas — defines which entity sets are available, default query options, and CRUD capabilities.
1// SAP Build Apps — OData V4 Data Resource configuration
2// Configured in the Data Canvas (exported as app metadata JSON)
3
4{
5 "dataResources": [
6 {
7 "id": "salesOrders",
8 "name": "Sales Orders",
9 "type": "odata",
10 "destinationName": "S4HANA_CLOUD_PP",
11 "metadataPath": "/sap/opu/odata4/sap/api_sales_order_srv/srvd_a2x/sap/api_sales_order/0001/$metadata",
12 "entitySet": "A_SalesOrder",
13 "capabilities": {
14 "readable": true,
15 "creatable": true,
16 "updatable": true,
17 "deletable": false
18 },
19 "defaultQuery": {
20 "$top": 50,
21 "$orderby": "CreationDate desc",
22 "$select": "SalesOrder,SalesOrderType,SoldToParty,TotalNetAmount,TransactionCurrency,OverallSDProcessStatus"
23 }
24 },
25 {
26 "id": "salesOrderItems",
27 "name": "Sales Order Items",
28 "type": "odata",
29 "destinationName": "S4HANA_CLOUD_PP",
30 "metadataPath": "/sap/opu/odata4/sap/api_sales_order_srv/srvd_a2x/sap/api_sales_order/0001/$metadata",
31 "entitySet": "A_SalesOrderItem",
32 "capabilities": {
33 "readable": true,
34 "creatable": false,
35 "updatable": false,
36 "deletable": false
37 }
38 }
39 ]
40}REST API resource configuration for custom services — manually defines endpoints, path parameters, query parameters, and response schemas.
1// SAP Build Apps — REST API Data Resource
2// Configured in the Data Canvas for a custom BTP-hosted REST service
3
4{
5 "dataResources": [
6 {
7 "id": "approvalRequests",
8 "name": "Approval Requests",
9 "type": "rest",
10 "destinationName": "APPROVAL_API",
11 "baseUrl": "",
12 "endpoints": {
13 "getCollection": {
14 "method": "GET",
15 "relativePath": "/api/v1/approvals",
16 "queryParameters": [
17 { "key": "status", "label": "Status Filter", "type": "string" },
18 { "key": "assignee", "label": "Assignee ID", "type": "string" }
19 ],
20 "responseSchema": {
21 "type": "array",
22 "itemSchema": {
23 "id": "string",
24 "title": "string",
25 "status": "string",
26 "requestedBy": "string",
27 "createdAt": "string",
28 "priority": "string"
29 }
30 }
31 },
32 "updateRecord": {
33 "method": "PATCH",
34 "relativePath": "/api/v1/approvals/{id}",
35 "pathParameters": [{ "key": "id", "type": "string" }],
36 "requestBodySchema": {
37 "status": "string",
38 "comment": "string"
39 }
40 }
41 }
42 }
43 ]
44}Licensing
Build Apps
SAP's visual, no-code/low-code application development tool for building responsive web and mobile applications without hand-coding.
Licensed per active user per month. Included with GROW with SAP (limited). Available as stand-alone subscription.
Build Process Automation
Combines workflow automation and robotic process automation (RPA) in one SAP BTP service — enabling end-to-end process automation with pre-built SAP content packages.
Workflow automation instances consumed via CPEA credits. RPA bots (attended/unattended) carry separate licensing. Included in GROW with SAP.
Work Zone
A central digital workplace hub — providing a unified launchpad for SAP and non-SAP applications, personalised workpages, notifications, and workflow management.
Standard edition included. Advanced edition licensed per active user — requires separate CPEA/BTPEA allocation.
Build Apps Edition Comparison
SAP Build Apps — Capability Matrix by License Path
Capability | Free Trial / BTP Free Tier90-day trial environmentGenerally Available | GROW with SAPIncluded entitlementGenerally Available | SAP Build SuiteFull commercial subscriptionGenerally Available |
|---|---|---|---|
| Visual Development | |||
| UI Canvas (drag-and-drop components) | |||
| Data Canvas (OData and REST resources) | |||
| Logic Canvas (visual flow functions) | |||
| Formula Editor (MVEL expressions) | |||
| Theme Designer (Fiori Horizon) | |||
| Custom JavaScript flow nodes | |||
| Data and Integration | |||
| OData V4 data resources | |||
| REST API data resources | |||
| BTP Destination Service integration | |||
| S/4HANA Cloud OData V4 connectors | |||
| SuccessFactors OData V2 connectors | |||
| Build Process Automation triggers | |||
| Deployment and Scale | |||
| Deploy to BTP HTML5 Repository | |||
| SAP Build Work Zone tile integration | |||
| SAP Mobile Start integration | |||
| MTA-based CI/CD deployment | |||
| Unlimited active users | Limited quota | ||
| AI-Assisted Development | |||
| Joule AI app generation (Build Code) | Roadmap | Roadmap | |
| AI-suggested component layouts | Roadmap | Roadmap | |
Road Map & Recent Updates
Source: SAP Road Map Explorer (roadmaps.sap.com) and SAP Sapphire 2025 announcements. Items below reflect publicly disclosed plans as of mid-2025.
SAP Build Apps — Generally Available
- Visual UI Canvas with Fiori Horizon component library
- OData V4 and REST data resources with BTP Destination
- Logic Canvas with 50+ built-in flow functions
- Deploy to BTP HTML5 Repository and Work Zone
- Principal propagation to S/4HANA Cloud and SuccessFactors
- SAP Mobile Start integration
SAP Build Code — Generally Available
- AI-assisted pro-code IDE (Joule in Build Code)
- Full-stack app generation from natural language
- CAP + Fiori Elements scaffolding via Joule
- Deployed as BAS-based Dev Space on BTP
- Git integration and BTP CI/CD pipeline
Planned Enhancements
- Enhanced offline data sync for mobile apps
- Improved formula editor with AI-assisted suggestions
- Additional Fiori Horizon component variants
- Native integration with SAP Build Process Automation triggers
- Expanded device feature access (NFC, biometrics)
Roadmap Items
- AI-generated app layout from natural language description
- Visual data modelling with automatic CAP service generation
- Deeper Joule integration within Build Apps editor
- Cross-app navigation with Work Zone context sharing
- Build Apps + Build Process Automation unified designer
Future Direction
- Unified Build Apps and Build Code authoring surface
- Event-driven app patterns via SAP Event Mesh
- Composable app fragments reusable across projects
- AI-driven automatic test generation for built apps
Best Practices
Use BTP Destinations for all backends
Never hardcode backend URLs in the app. Always configure a named BTP destination. This keeps credentials server-side, enables subaccount-level overrides, and allows URL changes without redeploying the app.
Apply XSUAA scopes — never rely on UI hiding alone
Role-based visibility (hiding buttons, pages) is a UI convenience, not a security control. Always define XSUAA scopes and enforce them on the backend (CAP @restrict or S/4HANA authorisation objects). Build Apps UI controls can be bypassed via direct API calls.
Use data variables for automatic refresh
Prefer data variables (auto-fetch on page load, auto-refresh interval) over manual HTTP Request nodes for read operations. Data variables handle loading states, caching, and error display automatically.
Minimise OData $expand depth
Deep $expand chains (3+ levels) result in large payloads that slow mobile rendering. Load related data lazily on detail navigation rather than pre-fetching everything in the list view.
Place business logic in CAP — not formulas
Build Apps formulas are client-side transformations for display. Complex validation, calculations, or multi-step operations belong in a CAP service (server-side) to ensure data integrity and reusability across channels (Fiori, API, Build Apps).
Use CAP as the integration hub for complex scenarios
When an app must combine data from multiple backends (S/4HANA + SuccessFactors + custom), build a CAP service that aggregates the data and exposes a single OData endpoint to Build Apps. Avoid orchestrating multiple parallel data resources in the client.
Design mobile-first for field use cases
Use the responsive breakpoints in the Theme Designer from the start. Field service and warehouse apps will be used on small screens — test with the mobile preview companion app throughout development, not only at the end.
Version control the app definition export
Export the app definition (JSON artefact) from the Build Apps editor and commit it to a Git repository. The editor provides an in-browser history, but a Git repository enables branching, code review, and disaster recovery.
Common Pitfalls
Hardcoding backend URLs
Using literal URLs (https://my-s4.ondemand.com) in HTTP Request nodes instead of BTP destinations. Changes to the backend URL require a code change and redeployment.
CORS errors in local preview
The in-editor Live Preview cannot proxy backend calls through BTP Destinations when running locally. Configure a BTP-deployed preview environment or use the "Launch" option to test with real data.
Role collections not assigned to test users
Developers deploy the app, navigate to it, and receive a "403 Forbidden" because the XSUAA role collection was defined but not yet assigned. Assign role collections in BTP Cockpit → Security → Users.
OData metadata cached in editor
After changing the S/4HANA or CAP service schema, the Build Apps Data Canvas may display stale metadata. Force-refresh the metadata by re-importing the data resource or clearing the browser cache.
Unrestricted data variable fetch on large datasets
A data variable configured without $top or $filter will fetch all records on page load. For entities with thousands of records (e.g. Sales Orders), always configure $top, $filter, and $orderby to prevent timeouts.
Missing connectivity service binding for on-premise
Destinations of type OnPremise (Cloud Connector) require a Connectivity Service binding in the MTA descriptor. Omitting it results in connection refused errors at runtime, even if the destination is correctly configured.
SAP References
Official product documentation: Data Canvas, Logic Canvas, Formula Reference.
Service catalog entry: missions, pricing, service plans, quick start.
Browse and test S/4HANA Cloud, SuccessFactors, and other SAP OData APIs that Build Apps can consume.
Complete destination configuration guide: authentication types, properties, principal propagation.
How to deploy and manage HTML5 apps on BTP — used as the runtime for Build Apps deployments.
SAP Road Map Explorer: planned features, quarters, and Generally Available milestones.
Commercial overview: active user model, GROW with SAP entitlements, Build Suite subscription.
SAP Community questions, tutorials, blog posts, and SAP-authored formula guides.