Low-Code / No-Code
GA

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.

SAP Build Suite
SAP Build Apps is one of four products in the SAP Build suite: (1) SAP Build Apps — visual app development, (2) SAP Build Process Automation — workflows and RPA, (3) SAP Build Work Zone — unified launchpad, (4) SAP Build Code — AI-assisted pro-code IDE on BTP. All four are licensed separately or together as the SAP Build Suite subscription.

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.

SAP Build Apps — Platform Architecture
Rendering diagram…

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.

Data Integration Flow — Build Apps to Backend via BTP Destination Service
Rendering diagram…

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.

BTP Destinations — S/4HANA PP + CAP CC
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=false

SAP 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.

OData V4 Data Resource — Sales Orders (Data Canvas export)
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.

REST API Data Resource — Approval Service (Data Canvas export)
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.

Authentication Flow — End User to Build Apps to SAP Backend
Rendering diagram…

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.

xs-security.json — Approval App
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

  1. 1User navigates to Build Apps URL (or Work Zone tile)
  2. 2Application Router redirects unauthenticated users to IAS login page
  3. 3IAS authenticates via SAML 2.0, OIDC, or corporate IdP (AD/LDAP)
  4. 4IAS issues SAML assertion → Application Router exchanges with XSUAA
  5. 5XSUAA issues scoped JWT token (includes assigned role collections)
  6. 6Application Router serves HTML5 app; JWT used for backend calls
  7. 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.

SAP Build Apps Development Lifecycle — Design to Deploy
Rendering diagram…
mta.yaml — SAP Build Apps MTA descriptor
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: lite

Deploy 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.

Formula Editor Examples — Bindings, Filters, Navigation
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 Sales

Field sales managers review and approve/reject pending sales orders on mobile. Real-time status updates reflect back in S/4HANA.

Data source:S/4HANA Cloud OData V4 — A_SalesOrder
  • 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 Employees

Employees submit leave requests through a mobile-first interface. Managers receive and action requests. All data persists in SuccessFactors Time Off.

Data source:SuccessFactors OData V2 — TimeAccount, LeaveRequest
  • 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 Technicians

Technicians conduct equipment inspections on-site, capturing photos and completing checklist forms that persist to a CAP backend service.

Data source:SAP CAP OData V4 — custom InspectionOrder 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 Team

Procurement team tracks open purchase requisitions and expedites approvals. Connects to S/4HANA Purchasing APIs.

Data source:S/4HANA Cloud OData V4 — A_PurchaseRequisition
  • 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 Partners

HR business partners manage new hire onboarding tasks. Checklist items stored in a CAP service, employee data fetched from SuccessFactors.

Data source:CAP OData V4 + SuccessFactors OData V2
  • 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 Staff

Warehouse staff check stock levels and initiate transfer orders directly from a mobile app on the warehouse floor.

Data source:S/4HANA Cloud OData V4 — A_Product, MaterialStockAvailability
  • 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.

Build Apps editor deploy vs. MTA deploy
SAP Build Apps offers a one-click Build and Deploy option inside the editor that handles the HTML5 Repository upload automatically. The MTA approach below is used when you need to bundle the Application Router, XSUAA configuration, and additional BTP service bindings as a single deployable unit — the recommended pattern for production.
mta.yaml — Full production MTA descriptor
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: lite

Configuration Data Resources

OData V4 resource configuration as exported from the Data Canvas — defines which entity sets are available, default query options, and CRUD capabilities.

OData V4 resource — data-resources.json
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.

REST API resource — data-resources.json
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

Status:Generally AvailablePlannedRoadmapFuture Direction
Build

Build Apps

Generally Available· GA

SAP's visual, no-code/low-code application development tool for building responsive web and mobile applications without hand-coding.

SubscriptionRISEGROW
Active Users

Licensed per active user per month. Included with GROW with SAP (limited). Available as stand-alone subscription.

GROW with SAPSAP Build Suite
Build

Build Process Automation

Generally Available· GA

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.

CPEASubscriptionGROW
WorkflowsBots

Workflow automation instances consumed via CPEA credits. RPA bots (attended/unattended) carry separate licensing. Included in GROW with SAP.

GROW with SAPSAP Build Suite
Build

Work Zone

Generally Available· GA — Standard edition included in RISE/GROW; Advanced edition separate

A central digital workplace hub — providing a unified launchpad for SAP and non-SAP applications, personalised workpages, notifications, and workflow management.

RISEGROWSubscription
Active Users

Standard edition included. Advanced edition licensed per active user — requires separate CPEA/BTPEA allocation.

RISE with SAPGROW with SAP

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 usersLimited quota
AI-Assisted Development
Joule AI app generation (Build Code)RoadmapRoadmap
AI-suggested component layoutsRoadmapRoadmap
Active User Licensing
SAP Build Apps is licensed per active user per month. An "active user" is any named user who opens a Build Apps-deployed application at least once in the billing month. Pure viewers of Work Zone tiles that do not use Build Apps features are not counted. Consult your SAP account executive for current active-user pricing and the specific active-user quota included in your GROW with SAP contract.

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.

Status:Generally AvailablePlannedRoadmapFuture Direction
Generally Available

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
Generally Available

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

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

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

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