Everything in CAP / Java
75 of 743
Domain
Signals
Content: 3
Java: Answers in Java
More: 3
Group by: Capability
Still applies Nothing recordedSource capireSource SAP Developer CenterSource SAP CommunityPublished 2024Published 2023Clear all
EntryBySignalsLast activity
Error handlingSAP only
Don't "let it crash", is this the new CAP guideline?Don't "let it crash", is this the new CAP guideline?Dinu traces a change in error handling in CAP's Node.js runtime: @sap/cds@8.2.0 adds a cds.server.shutdown_on_uncaught_errors config flag, defaulting to true, but invoking an operation with an undefined variable no longer takes the server down, with or without the flag, where the same code crashed it on cds@6 and cds@7, and the author notes the old behaviour was already missing in cds@8.1. It still crashes with features.odata_new_adapter turned off to use the old OData parser, so it is the new OData adapter, like the REST adapter before it, that answers an uncaught error with a 500 instead of taking the process down.Dinu, published 2024-09-06
GraphQLUnmapped
SAP CAPv7 - Node.js Highlights and ExperiencesSAP CAPv7 - Node.js Highlights and ExperiencesAn account of upgrading a 100+ table CAP Node.js project from v6 to v7, working through breaking changes in @sap/cds 7: event handlers now always receive an array, service paths move under /odata/v4/... unless serve_on_root is set, and cds-serve replaces cds run. It goes deepest on the GraphQL plugin, @cap-js/graphql: the /graphql endpoint it serves, Composition results wrapped in a nodes connection, and offset-based pagination reached through OData's top and skip rather than GraphQL's own limit and offset.published 2023-08-03
Metadata publishingSAP only
CAP, CDS, CDL, CSN and jq - finding associationsCAP, CDS, CDL, CSN and jq - finding associationsHow associations are actually represented once CDL is compiled into CSN, worked out by parsing the machine-readable form with jq. Useful less as a recipe than as a way in: anything that wants to reason about a CDS model without the compiler has to read CSN, and this is what that looks like from the outside.published 2024-04-16
ODataSAP and community
Calling bound / unbound CAP actions from Fiori elements application.Calling bound / unbound CAP actions from Fiori elements application.invokeAction from the Fiori elements Edit flow API, with the difference between bound and unbound actions spelled out first because the call shape differs. Under three thousand characters and it answers exactly one question.vidhyasagarmule, published 2024-09-07
SAP CAP(Cloud Application Programming)开发框架概述SAP CAP(Cloud Application Programming)开发框架概述A Chinese-language walkthrough of CAP built mainly from CAPire's own "About CAP" page: CDS entities, associations, compositions and aspects for data modelling, with an extend Books with @restrict: [{ grant:'WRITE', to:'admin' }] aspect as its authorization example; CQL and CQN queries shown against both a local service and OData's $select/$expand; and the service-and-event model — this.on, this.emit, srv.on — that carries CAP's async processing. It closes with the author's own setup: installing @sap/cds-dk, scaffolding a bookshop project with cds init, and running it with cds watch against local SQLite, mocked authentication and file-based messaging standing in for HANA Cloud, IAS and Kafka.ArthurYang, published 2024-01-07
OpenAPIUnmapped
Edge Integration Cell : Design, deploy and manage APIsEdge Integration Cell : Design, deploy and manage APIsWalks through creating an API artifact in API Management on the customer-managed Edge Integration Cell runtime, including the option to generate the artifact by importing an OpenAPI specification rather than from a URL or by hand. It then attaches an Authentication policy and a Quota step capped at four calls per minute, deploys, and shows both the resulting 401 and the quota-breach error in the Monitor logs. The author frames it as the first of a series on Edge Integration Cell's policies.published 2023-11-15
Part 2 – Empowering SAP BTP CAP Services through Open API Spec and Annotations for Effective Communication, Collaboration and GovernancePart 2 – Empowering SAP BTP CAP Services through Open API Spec and Annotations for Effective Communication, Collaboration and GovernanceWalks through generating an OpenAPI specification for a Node.js CAP service: installing cds-swagger-ui-express, bootstrapping it in server.js, a sample CDS data model with associations and compositions, and the YUML diagram and endpoint details the Open API Preview renders in Business Application Studio. Also shows gating the Swagger UI behind a user-defined environment variable so it is served in development and QA subaccounts but excluded from the production deployment on Cloud Foundry. Second of a three-part series; the first covers the concepts and the third goes deeper into annotations.mohit_bansal3, published 2023-05-24
Pagination and streamingSAP only
[Part – 2] Enrich CAP based Services with Behaviors using Annotations[Part – 2] Enrich CAP based Services with Behaviors using AnnotationsThe second half of a two-part walkthrough of CAP's behavioral annotations, following on from access control and input validation in the first part. This post works through @cds.autoexpose, @cds.api.ignore, @cds.persistence.exists/skip, @cds.on.insert/@cds.on.update and the @odata.Type/@odata.singleton mapping overrides, all shaping how a CDS model is projected into a service, which is data modelling. Alongside these it covers @cds.query.limit for default and maximum page sizes (pagination and streaming), @odata.etag with exclusive and shared locks for optimistic concurrency (concurrency control), and @cds.search for scoping $search to chosen elements (search), each with a CDS code example.published 2023-01-29
WebSocketUnmapped
SAP Event Mesh: S4 HANA On-Prem and SAP CI(BTP IS) through WebSocket and WebhooksSAP Event Mesh: S4 HANA On-Prem and SAP CI(BTP IS) through WebSocket and WebhooksA step-by-step walkthrough of wiring Event Mesh to publish and consume events between an on-premise S/4HANA system and Cloud Integration, contrasting persistent queues (one subscriber, kept until consumed) against unpersisted topics, and WebSocket's AMQP transport against webhook delivery for the same queue. Two tested findings support it: a queue consumer running in continuous consumption mode receives a message ahead of a webhook on the same topic, and a message stays queued and is retried (almost 8770 times in under a minute, in the author's test) until the consumer processes it successfully.FarooqAhmed, published 2023-10-03
Analytical queriesUnmapped
Empowering Your Data Analytics with GPT-3 and SAP CAP IntegrationEmpowering Your Data Analytics with GPT-3 and SAP CAP IntegrationFree text in, SQL out, answer back in a sentence — the model writes the query, CAP runs it, and the model turns the rows into prose. Written in the GPT-3 window, so the model access has dated, but the three-step shape has not, and it is a different bet from retrieval: nothing is embedded, the schema is the context.Former Member, published 2023-03-10
SAP Incentive Management - Understanding of CSN file & CLI Command to generateSAP Incentive Management - Understanding of CSN file & CLI Command to generateCSN met from the far end: not as CAP's compiled model but as the interchange format a product hands to Analytics Cloud so a story knows the shape of the data. Explains what CSN is, why the format matters here, and the command that produces one.Yogananda, published 2024-11-19
AttachmentsSAP only
Consume SAP Document Management using @cap-js/sdm pluginConsume SAP Document Management using @cap-js/sdm pluginStoring attachments in a SAP Document Management repository from a CAP application, using the official plugin. The point the post makes about the plugin is that it brings its own UI: a user attaches any number of documents and one Save writes them all to the repository, so the application does not build an upload surface of its own.published 2024-08-26
Unlocking Efficiency: Leveraging SAP BTP Document Management Service in Fiori Applications # 2Unlocking Efficiency: Leveraging SAP BTP Document Management Service in Fiori Applications # 2Document Management's own Attachment Reuse UI dropped into a Fiori elements List Report, in two variants — OData V2, and OData V4 in a CAP application. The CAP half is one of the two scenarios rather than the subject; the rest of the series is about custom Fiori apps and a process task UI, with no CAP in them.published 2024-12-10
Upload attachments in a Freestyle UI5 and CAP appUpload attachments in a Freestyle UI5 and CAP appAttachments where the UI is freestyle rather than Fiori elements, so none of the generated upload behaviour applies and both ends have to be written.published 2023-12-19
Concurrency controlSAP only
[Part – 2] Enrich CAP based Services with Behaviors using Annotations[Part – 2] Enrich CAP based Services with Behaviors using AnnotationsThe second half of a two-part walkthrough of CAP's behavioral annotations, following on from access control and input validation in the first part. This post works through @cds.autoexpose, @cds.api.ignore, @cds.persistence.exists/skip, @cds.on.insert/@cds.on.update and the @odata.Type/@odata.singleton mapping overrides, all shaping how a CDS model is projected into a service, which is data modelling. Alongside these it covers @cds.query.limit for default and maximum page sizes (pagination and streaming), @odata.etag with exclusive and shared locks for optimistic concurrency (concurrency control), and @cds.search for scoping $search to chosen elements (search), each with a CDS code example.published 2023-01-29
Data modellingSAP only
#CAP-TechBytes Input Validation#CAP-TechBytes Input ValidationThe annotations one at a time — @mandatory, @assert.unique, @assert.range including the enum form, @assert.format — each with what it produces. Ends on error handling, which is the part that decides whether any of it is usable from a UI.Thajunniza, published 2023-07-07
CAP, CDS, CDL, CSN and jq - finding associationsCAP, CDS, CDL, CSN and jq - finding associationsHow associations are actually represented once CDL is compiled into CSN, worked out by parsing the machine-readable form with jq. Useful less as a recipe than as a way in: anything that wants to reason about a CDS model without the compiler has to read CSN, and this is what that looks like from the outside.published 2024-04-16
SAP CAP(Cloud Application Programming)开发框架概述SAP CAP(Cloud Application Programming)开发框架概述A Chinese-language walkthrough of CAP built mainly from CAPire's own "About CAP" page: CDS entities, associations, compositions and aspects for data modelling, with an extend Books with @restrict: [{ grant:'WRITE', to:'admin' }] aspect as its authorization example; CQL and CQN queries shown against both a local service and OData's $select/$expand; and the service-and-event model — this.on, this.emit, srv.on — that carries CAP's async processing. It closes with the author's own setup: installing @sap/cds-dk, scaffolding a bookshop project with cds init, and running it with cds watch against local SQLite, mocked authentication and file-based messaging standing in for HANA Cloud, IAS and Kafka.ArthurYang, published 2024-01-07
Database connectorsSAP only
CAP with PostgreSQL DB alternate to HANA Cloud DB - Part 1CAP with PostgreSQL DB alternate to HANA Cloud DB - Part 1Bootstrapping a CAP project on PostgreSQL, framed as a choice that depends on the client rather than on the technology. Short, and part two is where it gets debuggable.ramonlee5, published 2023-10-10
Configure an SAP CAP Application to Connect to an SAP HANA Cloud Database in Another Global Account or SubaccountConfigure an SAP CAP Application to Connect to an SAP HANA Cloud Database in Another Global Account or SubaccountThe case the tooling does not cover: the database is in a different global account, so there is no HDI container to bind and cds deploy cannot do its usual job. Written for exactly that, and it says so in the subtitle — without HDI.JhoelAnthonyRamosRomeroPE, published 2024-10-08
Open Sourcing CAP – how to learn more or get involvedOpen Sourcing CAP – how to learn more or get involvedA roundup of CAP's open-sourcing, begun at TechEd the year before, pointing to a webinar recording, a podcast episode and reCAP 2023 talks for background. Among the components it names are a feature toggle library giving Node.js CAP apps live-updatable toggles backed by Redis, a new pluggable database layer with SQLite and PostgreSQL implementations plus a generic SQL layer, and a change tracking component that builds a change history for data from CDS models.Fempel, published 2023-10-02
SAP CAP Lessons Learned: Run a CAP app using SQLite on SAP BTP - Cloud FoundrySAP CAP Lessons Learned: Run a CAP app using SQLite on SAP BTP - Cloud FoundrySQLite past the point it is meant to go — deployed, not local. Written as a lesson learned rather than a recommendation, and it pairs with the author's own note that SQLite is single threaded.LucasMagriniRigo, published 2024-12-30
Temporal dataUnmapped
My CAP Projects ToolboxMy CAP Projects ToolboxA working inventory of daily CAP tooling: scaffolding a project with cds init and growing it facet by facet through cds add (TypeScript, seed data, an .http test file, a handler stub), then running it with cds watch and setting a breakpoint in a custom handler from SAP Business Application Studio's JavaScript Debug Terminal. It also walks through an @open entity that accepts properties the model never declared, and reading temporal data defined with CAP's temporal aspect, where a plain read returns only what is valid now and a custom handler is needed to retrieve every time slice.vvdries, published 2024-12-23
Async processingSAP only
SAP CAP(Cloud Application Programming)开发框架概述SAP CAP(Cloud Application Programming)开发框架概述A Chinese-language walkthrough of CAP built mainly from CAPire's own "About CAP" page: CDS entities, associations, compositions and aspects for data modelling, with an extend Books with @restrict: [{ grant:'WRITE', to:'admin' }] aspect as its authorization example; CQL and CQN queries shown against both a local service and OData's $select/$expand; and the service-and-event model — this.on, this.emit, srv.on — that carries CAP's async processing. It closes with the author's own setup: installing @sap/cds-dk, scaffolding a bookshop project with cds init, and running it with cds watch against local SQLite, mocked authentication and file-based messaging standing in for HANA Cloud, IAS and Kafka.ArthurYang, published 2024-01-07
DestinationsSAP only
CAP Service to Fetch + Create Sales Order in S4 HANA Public CloudCAP Service to Fetch + Create Sales Order in S4 HANA Public CloudA CAP Node.js walkthrough imports SAP S/4HANA Cloud's Sales Order OData API with cds import, adds csrf handling to the generated service definition, and forwards a custom REST action's reads and writes to the remote proxy through cds.connect.to, the pattern Service integration covers. The mta.yaml binds the SAP S/4HANA Cloud extensibility service and a SAP Destination service instance so the S/4HANA Public Cloud system's address and credentials stay outside the application, per Destinations.Mujeeb, published 2023-05-30
SAP BTP Destinations in a Nutshell Part 1 - Motivation & NoAuthentication DestinationsSAP BTP Destinations in a Nutshell Part 1 - Motivation & NoAuthentication DestinationsOpens a series on SAP BTP Destinations by walking through the simplest case, a NoAuthentication destination from one CAP Node.js app to another on Cloud Foundry, shown two ways: executeHttpRequest from @sap-cloud-sdk/http-client, and a manual sequence that reads the destination service's credentials from VCAP_SERVICES, fetches an OAuth token, and requests the destination by name before calling its URL. The manual path is written deliberately verbose to show what the Cloud SDK call does behind the scenes; later parts of the series cover the other destination types.JakobFra, published 2023-05-23
Surviving and Thriving with the SAP Cloud Application Programming Model: Local development hurdlesSurviving and Thriving with the SAP Cloud Application Programming Model: Local development hurdlesThree hurdles in running a CAP application locally: services mocked with cds run --with-mocks return no data across OData associations until the ON clause is hand-written into the imported CDS, an on-premise API reached through the SAP Cloud Connector times out because its proxy is part of destinations and connectivity and reachable only from inside SAP BTP, and a Fiori frontend served from the HTML5 Application Repository needs the HTML5 Repo Mock to reach a local backend at all. It closes with the launch configurations the author uses for debugging cds watch locally and attaching to a running Cloud Foundry instance.maxstreifeneder, published 2023-02-02
Document outputUnmapped
Generating PDF on BTP CF using CAP and PuppeteerGenerating PDF on BTP CF using CAP and PuppeteerA headless browser rendering the PDF, which is the answer people reach for when the document is really a web page. The Cloud Foundry part is the difficulty: Puppeteer needs a browser in the buildpack, and that is what the post is actually about.ltomazeli58, published 2024-03-28
How to Generate and Download PDFs on the fly without persisting in CAP ApplicationHow to Generate and Download PDFs on the fly without persisting in CAP ApplicationStreaming a generated document straight to the client without writing it anywhere first — which sidesteps the retention question a stored file creates, and is the distinction worth having beside the attachments capability.HarsithKumarReddy, published 2024-06-18
Using Custom Actions to display PDF from SAP BTP Forms service into a CAP SAPUI5 applicationUsing Custom Actions to display PDF from SAP BTP Forms service into a CAP SAPUI5 applicationA requirement that arrived after the application was finished — render a PDF from the record currently open on an object page — and the join it needed: the Forms service bound to the CAP application, a custom action on the service, and a button on the object page header calling it.rodfior, published 2023-01-30
Event MeshSAP only
Event-Driven Multi-Tenant Architecture on SAP BTP with CAP and SAP Event MeshEvent-Driven Multi-Tenant Architecture on SAP BTP with CAP and SAP Event MeshThe two topics that are usually written about separately, taken together — because a shared broker is where tenant isolation stops being automatic. It starts from why microservices are decoupled at all, places Event Mesh among the four broker services BTP offers, and then works through what changes when the publisher and the consumer are multitenant.ale_biagi, published 2024-12-19
Integrating SAP S/4HANA Invoicing with KSeF Using SAP Event Mesh and CAPIntegrating SAP S/4HANA Invoicing with KSeF Using SAP Event Mesh and CAPA concrete regulatory deadline rather than a demo topic: every Polish invoice has to pass through KSeF, the national e-invoice platform, and this proposes the route — S/4HANA business events onto Event Mesh, a CAP application consuming them and talking to KSeF. Short, and offered as an example to argue with.Yahor, published 2024-08-29
SAP Event Mesh: S4 HANA On-Prem and SAP CI(BTP IS) through WebSocket and WebhooksSAP Event Mesh: S4 HANA On-Prem and SAP CI(BTP IS) through WebSocket and WebhooksA step-by-step walkthrough of wiring Event Mesh to publish and consume events between an on-premise S/4HANA system and Cloud Integration, contrasting persistent queues (one subscriber, kept until consumed) against unpersisted topics, and WebSocket's AMQP transport against webhook delivery for the same queue. Two tested findings support it: a queue consumer running in continuous consumption mode receives a message ahead of a webhook on the same topic, and a message stays queued and is retried (almost 8770 times in under a minute, in the author's test) until the consumer processes it successfully.FarooqAhmed, published 2023-10-03
Service integrationSAP only
#BTP #SAPCAP: Quirky Nuggets (N05-N06)#BTP #SAPCAP: Quirky Nuggets (N05-N06)On SAP BTP, Cloud Foundry Runtime, a one-shot PostgreSQL db-deployer app can be restarted by the platform's default port-type health check inside its 60-second timeout, re-running the deploy and duplicating data in the PostgreSQL database; setting health-check-type to process or http, via cf commands or the app's mta.yaml parameters, avoids it. In CAP, a remote service's entities are imported and consumed through cds.connect.to and queried via a projection, but its functions and actions cannot be projected: they must be redefined in the consuming service's own interface, with the handler forwarding the call to the remote proxy.published 2023-07-27
CAP Service to Fetch + Create Sales Order in S4 HANA Public CloudCAP Service to Fetch + Create Sales Order in S4 HANA Public CloudA CAP Node.js walkthrough imports SAP S/4HANA Cloud's Sales Order OData API with cds import, adds csrf handling to the generated service definition, and forwards a custom REST action's reads and writes to the remote proxy through cds.connect.to, the pattern Service integration covers. The mta.yaml binds the SAP S/4HANA Cloud extensibility service and a SAP Destination service instance so the S/4HANA Public Cloud system's address and credentials stay outside the application, per Destinations.Mujeeb, published 2023-05-30
Document extractionSAP only
SAP AI Services - DOX - Gen AI with SAP CAP Plugin - Part 3SAP AI Services - DOX - Gen AI with SAP CAP Plugin - Part 3Building on Reusable components for CAP with cds-plugin by Daniel Schlachter, this part walks through a custom CAP plugin — a cds-plugin.js plus a lib_cap_dox.js helper — that authenticates against SAP's Document Information Extraction (DOX) service and calls its schema and job-status APIs to fill an entity from extracted document fields. It covers reading the service key from Cloud Foundry (cf service-key) for the OAuth token endpoint, and dynamically mapping DOX's header and line-item output onto CAP entity properties.sabarna17, published 2024-06-11
Using BTP Document Extraction Service into actual App developmentUsing BTP Document Extraction Service into actual App developmentWalks through calling SAP Document AI's REST API directly: getting a client-credentials bearer token from the service key's UAA, then POSTing to /document/jobs with a file and an options body naming the document type and the header fields and line items to extract (paymentTerms, documentDate, taxId, description for an invoice), and polling the returned job id until the status resolves. Covers the trial-account booster and its own UI for uploading a document and testing extraction before moving to Postman and a small Python script that lists jobs over the same bearer token.Ace_D, published 2024-07-31
LLM integrationSAP only
Automate your Job Postings Using Generative AI (ChatGPT) & SAP Build Process Automation AppsAutomate your Job Postings Using Generative AI (ChatGPT) & SAP Build Process Automation AppsA process that drafts its own text: ChatGPT writing job postings, SAP Build Process Automation carrying them through approval, and CAP in between. Presented as a generic pattern the author expects to be adapted rather than copied.shivamshukla12, published 2023-08-10
Creating a meal generator application with SAP Build, Cloud Application Programming and openAICreating a meal generator application with SAP Build, Cloud Application Programming and openAIIngredients in, meal suggestions out, assembled from BTP services plus OpenAI and Google APIs. A small application built for the pleasure of it, and useful here as the plainest example of CAP holding the middle of a generative flow.former_member793421, published 2023-07-17
Elevating Data Privacy in SAP CAP based GenAI Applications with CAP LLM PluginElevating Data Privacy in SAP CAP based GenAI Applications with CAP LLM PluginThe question underneath the enthusiasm: what leaves your landscape when a prompt goes to a model. The plugin's answer is to anonymise the sensitive fields through HANA before the prompt is sent, and this is the post that explains why that is the design rather than an option.AkashAmarendra, published 2024-02-02
Empowering Your Data Analytics with GPT-3 and SAP CAP IntegrationEmpowering Your Data Analytics with GPT-3 and SAP CAP IntegrationFree text in, SQL out, answer back in a sentence — the model writes the query, CAP runs it, and the model turns the rows into prose. Written in the GPT-3 window, so the model access has dated, but the three-step shape has not, and it is a different bet from retrieval: nothing is embedded, the schema is the context.Former Member, published 2023-03-10
Generative AI Hub using Azure OpenAI GPT-4Generative AI Hub using Azure OpenAI GPT-4The technical half of a two-part post: a SAP Build Process Automation flow watches a support inbox, saves each incoming email's attachments and content, and hands the data to a custom Flask service that submits a service order into SAP S/4HANA. That service reaches two models through SAP AI Core's Generative AI Hub: Azure OpenAI's gpt-4-32k extracts the purchase date, model number, contact details and problem description from the email text, and LLaVA-1.6 describes the attached photos, so the JSON payload sent to the OData service-order and attachments APIs is assembled from both before the order is created.Jonathan-Kong, published 2024-03-15
RAG on CDSUnmapped
RAG with SAP HANA Cloud Vector Engine, GenAI Hub & CAPRAG with SAP HANA Cloud Vector Engine, GenAI Hub & CAPThe end-to-end version: a CAP service exposing the vector engine and the AI hub behind a couple of endpoints, answering where a CodeJam is on a given date. It has aged in a way the author has marked in the page itself — the section on the CAP LLM plugin now carries "(Outdated)" in its own heading — so read the embedding preparation and the retrieval shape, and check the plugin part against the package.KevinR, published 2024-05-21
Audit loggingSAP only
Integrate SAP Business Technology Platform audit logs with IBM Security QRadarIntegrate SAP Business Technology Platform audit logs with IBM Security QRadarWalks through pulling entries from the SAP Audit Log service for a Cloud Foundry subaccount, via its retrieval API and a service key downloaded from the SAP Authorization and Trust Management service, into IBM Security QRadar as a Universal Cloud REST API log source. A sample audit event, a data read event under audit.data-access, drives a custom QRadar DSM mapping event ID and category, then the walkthrough deletes a user from a Kyma role collection and shows the matching audit logging entry arrive in QRadar as an offense.TusharTrivedi12, published 2024-01-03
Nice patch SAP! Revisiting your SAP BTP security measures after AI Core vulnerability fixNice patch SAP! Revisiting your SAP BTP security measures after AI Core vulnerability fixWritten after the SAPwned disclosure in SAP AI Core, it argues SAP BTP's shared-responsibility model still requires the customer's own hardening: scope SAP BTP, Cloud Foundry Runtime and SAP BTP, Kyma runtime app access, rotate OAuth2 client-credentials secrets, and enforce MFA and Conditional Access through a corporate identity provider rather than relying on SAP's patch alone. It then explains how the SAP Audit Log service writes standardized events for most Cloud Foundry BTP services, and walks through onboarding a BTP subaccount into Microsoft Sentinel for SAP BTP to query those logs with Kusto and build detection rules that flag unexpected login countries or known-bad IPs and trigger automatic user blocks.published 2024-07-25
SAP BTP Audit log Enable and retrieve logsSAP BTP Audit log Enable and retrieve logsWalks through enabling and retrieving records from the SAP Audit Log service on SAP BTP's Cloud Foundry environment: the default oAuth2 service plan retains audit data for 90 days at no cost, while the premium plan adds a configurable retention period and lets an application write its own audit data. Covers the three subscription plans (premium, default for a subaccount, central for a global account) and the CLI steps to create a service instance and key, then retrieve records as JSON through the Auditlog Management Service's REST API using an OAuth2 client-credentials token in Postman.anikesh_jyotishi2, published 2024-07-12
AuthenticationSAP only
CAP for nodejs安全的暴露接口练习CAP for nodejs安全的暴露接口练习Starting from the risk-management sample, the walkthrough adds an open ExternalAPI service beside the existing RiskService, then moves every security annotation into a separate service-auth.cds file: @requires: authenticated-user on one entity, role-scoped @restrict grants for RiskViewer and RiskManager on another. It tests the unprotected action locally with cds watch, calling it from Postman with the session cookie read out of SAP Business Application Studio's preview tab. It then deploys to BTP and reads Risks with a client-credentials OAuth token fetched from a service key of the cpapp-auth instance, after changing that entity's READ grant from RiskViewer to authenticated-user, which the post, citing capire's CDS-based Authorization page, describes as a grant for a technical user integrating systems rather than for access from a front end.ArthurYang, published 2024-12-10
Nice patch SAP! Revisiting your SAP BTP security measures after AI Core vulnerability fixNice patch SAP! Revisiting your SAP BTP security measures after AI Core vulnerability fixWritten after the SAPwned disclosure in SAP AI Core, it argues SAP BTP's shared-responsibility model still requires the customer's own hardening: scope SAP BTP, Cloud Foundry Runtime and SAP BTP, Kyma runtime app access, rotate OAuth2 client-credentials secrets, and enforce MFA and Conditional Access through a corporate identity provider rather than relying on SAP's patch alone. It then explains how the SAP Audit Log service writes standardized events for most Cloud Foundry BTP services, and walks through onboarding a BTP subaccount into Microsoft Sentinel for SAP BTP to query those logs with Kusto and build detection rules that flag unexpected login countries or known-bad IPs and trigger automatic user blocks.published 2024-07-25
Why SAP Cloud Identity Matters for SAP Task Center: It’s About Trust and Global User IDWhy SAP Cloud Identity Matters for SAP Task Center: It’s About Trust and Global User IDA step-by-step configuration walkthrough for wiring SAP Cloud Identity Services as the trust and user-correlation layer behind SAP Task Center: establishing Identity Authentication as the sole trusted identity provider for the BTP subaccount, and generating the Global User ID — carried in the token's user_uuid claim rather than the SAML name identifier — that Task Center uses to match logged-in users to their tasks. It also covers syncing that ID between Microsoft Entra ID, the Identity Directory and SAP S/4HANA through Identity Provisioning jobs, and the principal-propagation trust the cloud connector needs to pass it through to an on-premise task provider.ivelinakiryakov, published 2024-11-25
AuthorizationSAP only
[Part - 1] Enrich CAP based Services with Behaviors using Annotations[Part - 1] Enrich CAP based Services with Behaviors using AnnotationsWalks through CDS annotations that add behaviour beyond CRUD: @readonly and @insertonly take away write, update or delete on an entity or element, each shown with the OData metadata it generates. @mandatory, @assert.unique, @assert.integrity, @assert.format and @assert.range then enforce input checks that @sap/cds runs on write, with the SQL or HANA constraint @assert.unique compiles to and the error code each rejection returns. It names @restrict and @requires but defers them, calling authorization too large a topic for this post.published 2023-01-28
CAP for nodejs安全的暴露接口练习CAP for nodejs安全的暴露接口练习Starting from the risk-management sample, the walkthrough adds an open ExternalAPI service beside the existing RiskService, then moves every security annotation into a separate service-auth.cds file: @requires: authenticated-user on one entity, role-scoped @restrict grants for RiskViewer and RiskManager on another. It tests the unprotected action locally with cds watch, calling it from Postman with the session cookie read out of SAP Business Application Studio's preview tab. It then deploys to BTP and reads Risks with a client-credentials OAuth token fetched from a service key of the cpapp-auth instance, after changing that entity's READ grant from RiskViewer to authenticated-user, which the post, citing capire's CDS-based Authorization page, describes as a grant for a technical user integrating systems rather than for access from a front end.ArthurYang, published 2024-12-10
CAP-JAVA implementation for Authorization Management Service (AMS)CAP-JAVA implementation for Authorization Management Service (AMS)Short and deliberately narrow: the author defers the concepts to kevin_li's post and writes only the CAP Java part — the development flow, designing the authorization model, and assigning and checking a policy. Read the other one first; this is the half that touches the code.Harvey_Yao, published 2024-12-27
SAP CAP(Cloud Application Programming)开发框架概述SAP CAP(Cloud Application Programming)开发框架概述A Chinese-language walkthrough of CAP built mainly from CAPire's own "About CAP" page: CDS entities, associations, compositions and aspects for data modelling, with an extend Books with @restrict: [{ grant:'WRITE', to:'admin' }] aspect as its authorization example; CQL and CQN queries shown against both a local service and OData's $select/$expand; and the service-and-event model — this.on, this.emit, srv.on — that carries CAP's async processing. It closes with the author's own setup: installing @sap/cds-dk, scaffolding a bookshop project with cds init, and running it with cds watch against local SQLite, mocked authentication and file-based messaging standing in for HANA Cloud, IAS and Kafka.ArthurYang, published 2024-01-07
Change trackingSAP only
BTP CAP : Custom plugin to separate generic change log capture logicBTP CAP : Custom plugin to separate generic change log capture logicWalks through building a custom [CAP](ecosystem:cap) plugin that centralises change-log capture: on cds.once('served') it collects entities annotated @audit, then hooks srv.before('UPDATE') to read the existing record, diff it field by field against the incoming payload, and record old/new values with the user and timestamp. It also documents a cds build failure packaging the plugin's own directory into gen/srv for MTA deployment, fixed by adding it as a copyfiles build-parameter step in mta.yaml.sreehari_vpillai, published 2023-05-10
Open Sourcing CAP – how to learn more or get involvedOpen Sourcing CAP – how to learn more or get involvedA roundup of CAP's open-sourcing, begun at TechEd the year before, pointing to a webinar recording, a podcast episode and reCAP 2023 talks for background. Among the components it names are a feature toggle library giving Node.js CAP apps live-updatable toggles backed by Redis, a new pluggable database layer with SQLite and PostgreSQL implementations plus a generic SQL layer, and a change tracking component that builds a change history for data from CDS models.Fempel, published 2023-10-02
Data privacyUnmapped
#SAPCAP: Win Customer Trust using Data Privacy and Protection Services on BTP - Part 1#SAPCAP: Win Customer Trust using Data Privacy and Protection Services on BTP - Part 1First of a three-part series on designing a CAP application on BTP that uses the platform's data privacy services, and this part is the vocabulary before any of it: personal data, the rights a data subject has under GDPR, and the data controller and processor distinction, worked through an order-confirmation SMS example. It names four BTP services: SAP Personal Data Manager, SAP Data Retention Manager, SAP Data Privacy Integration and SAP Audit Log service. Only the first is described, as a service running in the Cloud Foundry environment that finds data subjects across one or more applications and services, makes requests on an individual's behalf about their personal information and forwards them for handling, and notifies individuals which of their personal information is being used or sends them a copy of their record by email; the CAP-side annotations and PDM's own application features follow in Part 2 and Part 3.Ajit_K_Panda, published 2023-03-18
#SAPCAP: Win Customer Trust using Data Privacy and Protection Services on BTP - Part 2#SAPCAP: Win Customer Trust using Data Privacy and Protection Services on BTP - Part 2Walks through wiring a CAP service to SAP's Personal Data Manager (PDM) on BTP: entity, key and field-level @PersonalData annotations that mark data subjects and personal fields, the @PersonalData.IsPotentiallyPersonal / IsPotentiallySensitive distinction that drives audit logging, and the @Communication.Contact annotation PDM needs to search for a data subject. Covers the xsuaa trust arrangement and service binding that let the standalone PDM application call back into the CAP service to read and manage that data. Second of a three-part series; the annotation model it demonstrates is CAP's own mechanism for data privacy compliance, exercised against a sample 'Game Shop' application.Ajit_K_Panda, published 2023-03-18
#SAPCAP: Win Customer Trust using Data Privacy and Protection Services on BTP - Part 3#SAPCAP: Win Customer Trust using Data Privacy and Protection Services on BTP - Part 3Third of a three-part series, this covers the UI side of SAP's Personal Data Manager (PDM) once it is subscribed and wired to a CAP application: a Customer Service Representative searches for a data subject, views the personal data the application's annotations expose, and requests correction, deletion or export on their behalf, while an Operators Clerk processes those requests through to completion. PDM stores none of the personal data itself, only the requests and access logs, which an administrator downloads through the separate Data Transport app. It builds on the annotation model the first two parts introduce, so what it demonstrates is PDM's own delivered UI rather than anything a CAP application must build itself.Ajit_K_Panda, published 2023-03-18
Elevating Data Privacy in SAP CAP based GenAI Applications with CAP LLM PluginElevating Data Privacy in SAP CAP based GenAI Applications with CAP LLM PluginThe question underneath the enthusiasm: what leaves your landscape when a prompt goes to a model. The plugin's answer is to anonymise the sensitive fields through HANA before the prompt is sent, and this is the post that explains why that is the design rather than an option.AkashAmarendra, published 2024-02-02
Input validationSAP only
[Part - 1] Enrich CAP based Services with Behaviors using Annotations[Part - 1] Enrich CAP based Services with Behaviors using AnnotationsWalks through CDS annotations that add behaviour beyond CRUD: @readonly and @insertonly take away write, update or delete on an entity or element, each shown with the OData metadata it generates. @mandatory, @assert.unique, @assert.integrity, @assert.format and @assert.range then enforce input checks that @sap/cds runs on write, with the SQL or HANA constraint @assert.unique compiles to and the error code each rejection returns. It names @restrict and @requires but defers them, calling authorization too large a topic for this post.published 2023-01-28
#CAP-TechBytes Input Validation#CAP-TechBytes Input ValidationThe annotations one at a time — @mandatory, @assert.unique, @assert.range including the enum form, @assert.format — each with what it produces. Ends on error handling, which is the part that decides whether any of it is usable from a UI.Thajunniza, published 2023-07-07
CAPVAL: A project is bornCAPVAL: A project is bornThis second CAPVAL post announces CAPVAL version 2.0, made compatible with CAP v8 after breaking changes there, with the fix shown as a custom cds.middlewares.after error handler. It restates the plugin's @validation.message annotation alongside standard annotations such as @mandatory as the input validation mechanic the project builds on, and the release otherwise adds automated tests and release-automation GitHub Actions rather than new annotations.published 2024-08-26
Extend SAP Cloud Application Programming Model(CAP) Validations with the CAPVAL PluginExtend SAP Cloud Application Programming Model(CAP) Validations with the CAPVAL PluginThe complaint first: the built-in annotations are good for data integrity and poor at telling the user what went wrong, and there is no way to reuse a rule. capval, the plugin the post announces, adds @validation.message alongside the standard annotations rather than replacing them, and @validation.handler for a check written as a class. Published in January 2024, before the 1.2.0 line the README now pairs with @sap/cds 8.0.0 and above; the two annotations it shows are the two the README still documents.published 2024-01-09
Rate limitingUnmapped
Edge Integration Cell : Design, deploy and manage APIsEdge Integration Cell : Design, deploy and manage APIsWalks through creating an API artifact in API Management on the customer-managed Edge Integration Cell runtime, including the option to generate the artifact by importing an OpenAPI specification rather than from a URL or by hand. It then attaches an Authentication policy and a Quota step capped at four calls per minute, deploys, and shows both the resulting 401 and the quota-breach error in the Monitor logs. The author frames it as the first of a series on Edge Integration Cell's policies.published 2023-11-15
Information Map – Introduction Series: Graph in SAP Integration SuiteInformation Map – Introduction Series: Graph in SAP Integration SuiteIntroduces Graph, an enhancement to API Management within SAP Integration Suite that gives developers a single API onto an organisation's business systems, modelled as one semantically connected business data graph, later renamed API Composition. Splits the work between an administrator, who enables SAP BTP destinations to the backend systems and builds the business data graph, and a developer, who explores it in the Graph Navigator tool and builds an application against the resulting Graph API.published 2024-02-21
SAP PI Migration to BTP Integration Suite Patterns and learning experiencesSAP PI Migration to BTP Integration Suite Patterns and learning experiencesWalks through the integration patterns an SAP PI migration project moved onto SAP Cloud Integration iFlows — API Management proxies fronting calls into on-premise SAP systems over XI/SOAP via Cloud Connector, SFTP transfers, and eventing routes — and the operational lessons from running it: sizing JMS queues, choosing exactly-once JMS queues over Cloud Integration's Data Store for XI receiver adapters and at-least-once JMS for XI sender adapters, and workarounds for gaps in the migration tooling. The API Management proxies handle JWT validation against a non-SAP identity provider, IP filtering and OData-to-OpenAPI conversion in front of the iFlows.saikrishna_kalivarapu2, published 2024-12-04
DeploymentCommunity only
A modern workflow for SAP Cloud Integration with CAP and Azure DevOpsA modern workflow for SAP Cloud Integration with CAP and Azure DevOpsCAP used to build tooling rather than an application: the development workflow for Cloud Integration is limited to what the Integration Suite offers, so the author puts a CAP service and Azure DevOps around it. An unusual use of the framework, and the reason to read it.marcel_schork62, published 2023-06-27
Multitenant SaaS applications on SAP BTP using CAP? SAP BTP, Kyma Runtime!Multitenant SaaS applications on SAP BTP using CAP? SAP BTP, Kyma Runtime!The Kyma counterpart to the Cloud Foundry Tried-and-True series — the same SaaS application, the same requirements, a Kubernetes runtime underneath. The two code lines were later merged, which the Reloaded post announces.martinfrick, published 2023-04-05
SAP CAP Lessons Learned: Run a CAP app using SQLite on SAP BTP - Cloud FoundrySAP CAP Lessons Learned: Run a CAP app using SQLite on SAP BTP - Cloud FoundrySQLite past the point it is meant to go — deployed, not local. Written as a lesson learned rather than a recommendation, and it pairs with the author's own note that SQLite is single threaded.LucasMagriniRigo, published 2024-12-30
Feature togglesSAP only
Open Sourcing CAP – how to learn more or get involvedOpen Sourcing CAP – how to learn more or get involvedA roundup of CAP's open-sourcing, begun at TechEd the year before, pointing to a webinar recording, a podcast episode and reCAP 2023 talks for background. Among the components it names are a feature toggle library giving Node.js CAP apps live-updatable toggles backed by Redis, a new pluggable database layer with SQLite and PostgreSQL implementations plus a generic SQL layer, and a change tracking component that builds a change history for data from CDS models.Fempel, published 2023-10-02
Health checksUnmapped
#BTP #SAPCAP: Quirky Nuggets (N05-N06)#BTP #SAPCAP: Quirky Nuggets (N05-N06)On SAP BTP, Cloud Foundry Runtime, a one-shot PostgreSQL db-deployer app can be restarted by the platform's default port-type health check inside its 60-second timeout, re-running the deploy and duplicating data in the PostgreSQL database; setting health-check-type to process or http, via cf commands or the app's mta.yaml parameters, avoids it. In CAP, a remote service's entities are imported and consumed through cds.connect.to and queried via a projection, but its functions and actions cannot be projected: they must be redefined in the consuming service's own interface, with the handler forwarding the call to the remote proxy.published 2023-07-27
LoggingSAP only
From Application Logging to Cloud Logging: Service Innovation GuideFrom Application Logging to Cloud Logging: Service Innovation GuideSAP Cloud Logging replaces SAP Application Logging service, moving each customer from a shared multitenant stack to a dedicated, fully isolated one, and this guide sets out what changes with the move: a deployment per compliance region instead of per Cloud Foundry landscape, SAML/IDP-based authentication instead of Cloud Foundry-bound auth, retention that is configurable instead of fixed at seven days, and hourly capacity-unit pricing instead of fixed-size monthly plans. It also states the deprecation timeline for logging on BTP: SAP Application Logging closes to new or renewed CPEA contracts after 2025-07-31, while contracts signed before that date keep their entitlement until their next renewal.Hariharan-Gandhi, published 2024-11-22
SAP Cloud Logging Serviceでコンテナメトリクスを監視するSAP Cloud Logging Serviceでコンテナメトリクスを監視するIn Japanese. Container metrics for a CAP Node.js application into SAP Cloud Logging Service, and the reason it exists is that the obvious route does not apply: Spring Boot Actuator covers the Java side, and Node has no equivalent, so the author reaches for Telegraf instead. The procedure is deliberately independent of application logic — bind the instance, add a startup script and a config file — so it works against an application you already have.kyoneo, published 2024-03-26
MultitenancySAP only
Event-Driven Multi-Tenant Architecture on SAP BTP with CAP and SAP Event MeshEvent-Driven Multi-Tenant Architecture on SAP BTP with CAP and SAP Event MeshThe two topics that are usually written about separately, taken together — because a shared broker is where tenant isolation stops being automatic. It starts from why microservices are decoupled at all, places Event Mesh among the four broker services BTP offers, and then works through what changes when the publisher and the consumer are multitenant.ale_biagi, published 2024-12-19
Multitenant SaaS applications on SAP BTP using CAP - The Reloaded Version!Multitenant SaaS applications on SAP BTP using CAP - The Reloaded Version!An announcement rather than a tutorial, and it is the one that changes how the rest of the series should be read: the Cloud Foundry and Kyma code lines and their documentation were merged into a single sample, so the runtime becomes a choice inside one repository instead of a fork in the reading path.martinfrick, published 2023-08-09
Multitenant SaaS applications on SAP BTP using CAP? SAP BTP, Kyma Runtime!Multitenant SaaS applications on SAP BTP using CAP? SAP BTP, Kyma Runtime!The Kyma counterpart to the Cloud Foundry Tried-and-True series — the same SaaS application, the same requirements, a Kubernetes runtime underneath. The two code lines were later merged, which the Reloaded post announces.martinfrick, published 2023-04-05
TelemetrySAP only
Adding Custom Metrics to a CAP application using cap-js/telementry plugin and SAP Cloud LoggingAdding Custom Metrics to a CAP application using cap-js/telementry plugin and SAP Cloud LoggingWalks through adding a custom OpenTelemetry counter metric to a CAP application on top of @cap-js/telemetry's built-in database-pool metrics, incrementing and decrementing it from a service handler on CREATE and UPDATE of high-urgency incidents. Shows the resulting metric in SAP Cloud Logging's Discover and Visualize screens, building a custom visualisation from the exported metrics data.gopalanand, published 2024-06-27
Kyma Integration with SAP Cloud Logging. Part 2: Let's ship some tracesKyma Integration with SAP Cloud Logging. Part 2: Let's ship some tracesWalks through shipping traces from SAP BTP, Kyma runtime to SAP Cloud Logging: a Kyma TracePipeline resource pointed at the service binding's OTLP endpoint, an Istio Telemetry resource that sets the mesh-wide sampling percentage, and Cloud Logging's Trace Analytics view to filter the resulting spans by service name or request ID. For a multitenant JavaScript CAP application it instruments with @cap-js/telemetry, naming the npm packages to add, and covers Cloud Native Buildpacks and manual Istio header propagation for services outside CAP.gabbi, published 2024-04-19
SAP Cloud Logging Serviceでコンテナメトリクスを監視するSAP Cloud Logging Serviceでコンテナメトリクスを監視するIn Japanese. Container metrics for a CAP Node.js application into SAP Cloud Logging Service, and the reason it exists is that the obvious route does not apply: Spring Boot Actuator covers the Java side, and Node has no equivalent, so the author reaches for Telegraf instead. The procedure is deliberately independent of application logic — bind the instance, add a startup script and a config file — so it works against an application you already have.kyoneo, published 2024-03-26
DebuggingSAP and community
Surviving and Thriving with the SAP Cloud Application Programming Model: Local development hurdlesSurviving and Thriving with the SAP Cloud Application Programming Model: Local development hurdlesThree hurdles in running a CAP application locally: services mocked with cds run --with-mocks return no data across OData associations until the ON clause is hand-written into the imported CDS, an on-premise API reached through the SAP Cloud Connector times out because its proxy is part of destinations and connectivity and reachable only from inside SAP BTP, and a Fiori frontend served from the HTML5 Application Repository needs the HTML5 Repo Mock to reach a local backend at all. It closes with the launch configurations the author uses for debugging cds watch locally and attaching to a running Cloud Foundry instance.maxstreifeneder, published 2023-02-02
Editor supportSAP and community
Develop CAP Project with Lazyvim in DockerDevelop CAP Project with Lazyvim in DockerA Docker image running Lazyvim with language server support for CDS, TypeScript and JSON, so a CAP project can be developed with an editing experience comparable to VS Code without leaving the keyboard. Narrow by intent, and the useful general point underneath it is that CAP's editor support reaches anything that speaks LSP.published 2024-03-28
Making CAP Application Development Easier and Faster with the Help of Storyboard in SAP Business Application StudioMaking CAP Application Development Easier and Faster with the Help of Storyboard in SAP Business Application StudioThe Storyboard from the other side — someone who came across it while learning the high-productivity tools, rather than someone who shipped it. It follows the whole arc a CAP project takes through the tool: entities, relationships, services, sample data, a UI, roles, and external resources, each as a thing the diagram can add rather than a file you open.Aryan_Raj_Sinha, published 2023-09-20
Now AI Helps You Developing SAPUI5 ApplicationsNow AI Helps You Developing SAPUI5 ApplicationsA walkthrough of Joule's generative AI chat panel for freestyle SAPUI5 development inside SAP Build Code: typed requests in the panel add a view with routing, a model with sample data and a table, or make hardcoded texts translatable, and an "Accept" button transfers the generated code straight into the project's files, with a "Copy" fallback for editing it by hand first. It recommends asking for whole increments rather than one control at a time, notes that Joule keeps the running conversation as context until "Reset Conversation" is pressed, and flags that generated control namespaces are sometimes wrong. A related Joule feature from the Fiori tools team instead creates a complete SAP Fiori elements list report application with its CAP project from business requirements, to continue from with this one.AndreasKunz, published 2024-03-27
GeneratorsSAP and community
Now AI Helps You Developing SAPUI5 ApplicationsNow AI Helps You Developing SAPUI5 ApplicationsA walkthrough of Joule's generative AI chat panel for freestyle SAPUI5 development inside SAP Build Code: typed requests in the panel add a view with routing, a model with sample data and a table, or make hardcoded texts translatable, and an "Accept" button transfers the generated code straight into the project's files, with a "Copy" fallback for editing it by hand first. It recommends asking for whole increments rather than one control at a time, notes that Joule keeps the running conversation as context until "Reset Conversation" is pressed, and flags that generated control namespaces are sometimes wrong. A related Joule feature from the Fiori tools team instead creates a complete SAP Fiori elements list report application with its CAP project from business requirements, to continue from with this one.AndreasKunz, published 2024-03-27
Local developmentSAP only
CAP for nodejs安全的暴露接口练习CAP for nodejs安全的暴露接口练习Starting from the risk-management sample, the walkthrough adds an open ExternalAPI service beside the existing RiskService, then moves every security annotation into a separate service-auth.cds file: @requires: authenticated-user on one entity, role-scoped @restrict grants for RiskViewer and RiskManager on another. It tests the unprotected action locally with cds watch, calling it from Postman with the session cookie read out of SAP Business Application Studio's preview tab. It then deploys to BTP and reads Risks with a client-credentials OAuth token fetched from a service key of the cpapp-auth instance, after changing that entity's READ grant from RiskViewer to authenticated-user, which the post, citing capire's CDS-based Authorization page, describes as a grant for a technical user integrating systems rather than for access from a front end.ArthurYang, published 2024-12-10
cds-launchpad-plugin supercharged & ready for the future - CAP Plugin, UI5 Tooling support & Async Launchpadcds-launchpad-plugin supercharged & ready for the future - CAP Plugin, UI5 Tooling support & Async LaunchpadThe maintainer on a set of changes rather than on the plugin's original purpose, which is indexing every SAPUI5 project in a workspace into one sandbox launchpad so all of them can be tested together. What moved: it became a CAP plugin, gained UI5 Tooling support, and moved to the async launchpad — each framed as keeping pace with where SAPUI5 itself is going rather than as a feature.published 2023-12-11
Develop CAP Project with Lazyvim in DockerDevelop CAP Project with Lazyvim in DockerA Docker image running Lazyvim with language server support for CDS, TypeScript and JSON, so a CAP project can be developed with an editing experience comparable to VS Code without leaving the keyboard. Narrow by intent, and the useful general point underneath it is that CAP's editor support reaches anything that speaks LSP.published 2024-03-28
Surviving and Thriving with the SAP Cloud Application Programming Model: Local development hurdlesSurviving and Thriving with the SAP Cloud Application Programming Model: Local development hurdlesThree hurdles in running a CAP application locally: services mocked with cds run --with-mocks return no data across OData associations until the ON clause is hand-written into the imported CDS, an on-premise API reached through the SAP Cloud Connector times out because its proxy is part of destinations and connectivity and reachable only from inside SAP BTP, and a Fiori frontend served from the HTML5 Application Repository needs the HTML5 Repo Mock to reach a local backend at all. It closes with the launch configurations the author uses for debugging cds watch locally and attaching to a running Cloud Foundry instance.maxstreifeneder, published 2023-02-02
Plugin authoringSAP only
BTP CAP : Custom plugin to separate generic change log capture logicBTP CAP : Custom plugin to separate generic change log capture logicWalks through building a custom [CAP](ecosystem:cap) plugin that centralises change-log capture: on cds.once('served') it collects entities annotated @audit, then hooks srv.before('UPDATE') to read the existing record, diff it field by field against the incoming payload, and record old/new values with the user and timestamp. It also documents a cds build failure packaging the plugin's own directory into gen/srv for MTA deployment, fixed by adding it as a copyfiles build-parameter step in mta.yaml.sreehari_vpillai, published 2023-05-10
Create your first CAP pluginCreate your first CAP pluginA step-by-step guide to the cds-plugin.js extension point: scaffold a package, add an index.cds for shared model artifacts, and test it locally against a throwaway CAP project before publishing to npm, with a separate section on building the same plugin in TypeScript and compiling it with tsc. Points to the author's own cds-plugin-handlers and ui5-cap-serverside-rendering-plugin as worked examples.published 2024-12-09
How to build reusable plugin components for CAP Java applicationsHow to build reusable plugin components for CAP Java applicationsA companion to Daniel Schlachter's Reusable components for CAP with cds-plugin, showing the same mechanism on CAP Java: a plugin ships as its own Maven artifact with an event handler and a CdsRuntimeConfiguration implementation, registered through the JDK's ServiceLoader rather than any CAP-specific wiring. The walkthrough builds a cds-emoji-plugin-java jar that decorates @emoji-annotated fields on read, installs it to the local Maven repository, and adds it as a runtime dependency to a cds init --add java bookshop application. It argues the plugin mechanism was not new to CAP Java, just previously undocumented.robinjayasinghe, published 2023-05-16
Reusable components for CAP with cds-pluginReusable components for CAP with cds-pluginThe post that taught the mechanism, and it teaches it by picking a requirement small enough to be absurd: every string a service returns should end in a random emoji. Working through that on the bookshop example leaves nothing to argue about except the plumbing, which is the point — what a cds-plugin is, where it hooks in, and why packaging it beats copying it into the next project. Vinícius Barrionuevo credits this post as the thing that gave him the idea for sap-cap-sdm-plugin, and it is hard to read the plugin ecosystem in this graph without it.published 2023-04-30
SAP AI Services - DOX - Gen AI with SAP CAP Plugin - Part 3SAP AI Services - DOX - Gen AI with SAP CAP Plugin - Part 3Building on Reusable components for CAP with cds-plugin by Daniel Schlachter, this part walks through a custom CAP plugin — a cds-plugin.js plus a lib_cap_dox.js helper — that authenticates against SAP's Document Information Extraction (DOX) service and calls its schema and job-status APIs to fill an entity from extracted document fields. It covers reading the service key from Cloud Foundry (cf service-key) for the OAuth token endpoint, and dynamically mapping DOX's header and line-item output onto CAP entity properties.sabarna17, published 2024-06-11
TestingSAP and community
CAP full-stack testing with BDD flavourCAP full-stack testing with BDD flavourIntroduces Behavior-Driven Development for CAP applications: specifications written in Gherkin against a running app, validated by Cucumber, using cds-cucumber's ready-made step definitions for SAP Fiori elements and OData screens. The library handles service lifecycle — starting the app, assigning a port, driving the browser and authenticating a named user — and its OData steps know the service's entities and fields from the CDS model itself, so a scenario can open a list report, search it and assert row counts without hand-written glue code.published 2023-10-10
TypeScript patternsDoes not apply
How we could potentially have nestjs as runtime for SAP CAPHow we could potentially have nestjs as runtime for SAP CAPA proof-of-concept that swaps @sap/cds's ApplicationService and ODataAdapter dispatch for NestJS controllers, providers and interceptors, built by the author to learn NestJS rather than to ship a runtime. It works through CAP's run-dispatch-handle loop and AsyncLocalStorage-based transaction boundaries in detail before mapping them onto NestJS dependency injection and interceptors — one community answer to the controller-service-repository layering question core TypeScript support leaves open. The author's own conclusion is that the result reimplements CAP Java in Node.js, and they do not plan to take it further.alex_myakinkii, published 2024-09-19
Use TypeScript with the SAP Cloud Application Programming ModelUse TypeScript with the SAP Cloud Application Programming ModelWritten from the position of someone who avoided JavaScript for years and then had to cover CAP, which gives it a useful angle: what TypeScript buys a person arriving from a typed language, and where to start rather than how to finish. Ends on a worked example rather than a survey.KevinR, published 2024-06-24
TypingSAP only
TypeScript Sheriff: How can I use TypeScript in the SAP ecosystem? (Part 2 of 3)TypeScript Sheriff: How can I use TypeScript in the SAP ecosystem? (Part 2 of 3)The middle part of three, and the one about SAP: where TypeScript is supported across a side-by-side extension on BTP, as of July 2023. It says the SAP Cloud SDK already generates OData clients as .ts files and UI5 ships types for its controls and modules, the ground of TypeScript support in UI5, while CAP offers standard types and the new @cap-js/cds-typer generates types for a service, which is typing, with the caveat that running cds-ts commands could overwrite what cds-typer generated.MikeDoyle, published 2023-07-05
Draft handlingSAP only
Keep the Core Clean with Rizing CDSXKeep the Core Clean with Rizing CDSXJhodel Cailan recounts hitting a wall where neither RAP nor CAP supported more than a non-draft OData V2 service for the side-by-side extensibility scenario he wanted, and built Rizing CDSX (@rizing/cds-extension) to add draft handling over a shadow persistence entity that mirrors a remote, cds import-ed service. He walks through the @cdsx.api annotation that proxies the entity, bootstrapping the module from cds.on('bootstrap') in server.js, and testing the result through a generated Fiori elements app backed by an OData V4 draft service.published 2023-05-07
Fiori annotationsSAP only
Calling bound / unbound CAP actions from Fiori elements application.Calling bound / unbound CAP actions from Fiori elements application.invokeAction from the Fiori elements Edit flow API, with the difference between bound and unbound actions spelled out first because the call shape differs. Under three thousand characters and it answers exactly one question.vidhyasagarmule, published 2024-09-07
Create Fiori List Report with object page using CAPM(node.js) ServiceCreate Fiori List Report with object page using CAPM(node.js) ServiceThe short version of the generated-app walkthrough — an existing CAPM Node.js service, and the List Report with Object Page on top of it. Under three thousand characters.Md_sanaullah, published 2023-09-06
Use SAP CAP SAPUI5 Smart Filter to Show Value Help that are not Associated EntititesUse SAP CAP SAPUI5 Smart Filter to Show Value Help that are not Associated EntititesValue help for a field with no association behind it, which is the case the annotation assumes away. Short, and the workaround is the content.JhoelAnthonyRamosRomeroPE, published 2024-10-07
Frontend boundaryUnmapped
CAP, CORS and custom headersCAP, CORS and custom headersWhat CAP itself does about CORS, and where it stops. The starting point is a colleague's request and a deliberate constraint: @sap/approuter has full CORS support, but the author wanted to know what the CAP server offers on its own and how to extend it. Ends up covering preflight requests and custom servers, which is the mechanism a frontend hosted outside BTP actually runs into.published 2024-04-11
Workflow integrationSAP only
A modern workflow for SAP Cloud Integration with CAP and Azure DevOpsA modern workflow for SAP Cloud Integration with CAP and Azure DevOpsCAP used to build tooling rather than an application: the development workflow for Cloud Integration is limited to what the Integration Suite offers, so the author puts a CAP service and Azure DevOps around it. An unusual use of the framework, and the reason to read it.marcel_schork62, published 2023-06-27
Automate your Job Postings Using Generative AI (ChatGPT) & SAP Build Process Automation AppsAutomate your Job Postings Using Generative AI (ChatGPT) & SAP Build Process Automation AppsA process that drafts its own text: ChatGPT writing job postings, SAP Build Process Automation carrying them through approval, and CAP in between. Presented as a generic pattern the author expects to be adapted rather than copied.shivamshukla12, published 2023-08-10
Extensions for SAP Build Process Automation - Actions from CAP Node.js ServiceExtensions for SAP Build Process Automation - Actions from CAP Node.js ServiceThe direction of travel reversed: the CAP service is the thing being called, exposed as an Action so that a no-code process can consume it. Short by design — it is an introduction to a developer tutorial, and it says outright that the goal is to cover every step rather than to model a real use case.TJe, published 2023-01-13
Trigger Build Process Automation Instance from S/4 HANA On-Premise using ABAP CodeTrigger Build Process Automation Instance from S/4 HANA On-Premise using ABAP CodeWalks through triggering a SAP Build Process Automation process instance by hand from an S/4HANA on-premise system: an SM59 destination of type G obtains an OAuth token from the process's service key, and an ABAP class with two methods — fetching that token and calling the triggering API — is exercised from a test SE38 program, with the full code left in the author's GitHub repository. The instance ID and status come back from the call, and completing the approval itself happens in the SBPA Monitor's Inbox app rather than in anything the post builds.Aashish28, published 2023-07-07