Try out step by step our new tutorials to Build an Application End-to-End using CAP, Node.js, and VS Code. You will develop a business application using CAP, enhance it with an SAP Fiori UI, and add business logic to it. Furthermore, you will add a Launch Page to start the UIs, add roles and authorization checks, and deploy your application to SAP Business Technology Platform using SAP HANA Cloud Service and Launchpad Service.
If your imported EDMX documents contain tags like <Documentation><Summary>, <LongDescription> (OData V2), or Core.Description/LongDescription annotations (OData V4), these are now preserved in the resulting .csn file.
To carry this documentation over to your provided services, generate EDMX files with the respective Core.Description annotations:
In particular, when writing annotations for SAP Fiori UIs, you may want to make use of dynamic expressions in annotation values. They are evaluated in the front end and can, for example, be used to avoid status mapping in the backend.
Provide an expression in the EDM JSON representation, like:
The following changes affect undocumented internal implementations, and hence shouldn't affect CAP-based projects. Nevertheless, they're listed here for your reference.
Cascade delete order reverted from leaves to root → Fixes an issue in cascading delete where a child entity has more than one parent, for example, Books and Restaurants both have a composition of many Reviews
Always use flag u during input validation via @assert.format
We now provide a Kibana-friendly log formatter to use with cds.log(). Currently, the formatter must be activated via cds.env.features.kibana_formatter = true (additional to NODE_ENV === 'production'), but it will become the default in the future.
Note that the formatter is in beta state and feedback is welcome!
The Node.js runtime now supports the prefer header return with values minimal and representation. The default value for the server is configurable at cds.env.odata.prefer.return. If not configured, the default is representation.
Further, annotation @Core.ContentDisposition.Filename is now supported. See Serving Media Data for more details.
You can read and modify a property of an entity directly by sending GET, POST, PUT, and DELETE requests to the properties URL, for example POST .../odata/v4/Person/name. Primitive and complex collections are also supported.
Implicit Sorting now works reliably when aggregation functions are used in queries. Also, queries that don't use a limit (top/skip, for example when Implicit Pagination is disabled) are not implicitly sorted anymore to improve performance.