This is a searchable description of the content of a live stream recording, specifically “Episode 3 – Special guest edition: Interview with core CAPM developers from the mothership!” in the “Hands-on SAP dev with qmacro” series. There are links directly to specific highlights in the video recording. For links to annotations of other episodes, please see the “Catch the replays” section of the series blog post.
This episode, titled “Special guest edition: Interview with core CAPM developers from the mothership!“, was streamed live on Fri 08 Feb 2019 and is approximately one hour in length. The stream recording is available on YouTube.
Below is a brief synopsis, and links to specific highlights – use these links to jump directly to particular places of interest in the recording, based on ‘hh:mm:ss’ style timestamps.
This episode is rather special, in that I interview Christian Georgi from the core CAPM development team at the mothership in Walldorf. We talk CAPM, have some Q&A Christian shows us some cool live demos.
Links to specific highlights
00:03:10: Welcoming Christian Georgi to the live stream.
00:03:50: Noticing that we are both extra geeky as we’re wearing not only the same tshirt (the SAP Cloud Application Programming Model one) but also the same white long sleeve shirt underneath. As Fred Verheul remarked: “Fashionistas”!
00:05:38: Learning from Christian how CAPM (or “CAP”) came about.
00:10:15: Hearing from Christian about how CAPM fits into the SAP developers overall toolkit today.
00:13:20: Talking about how guidance and opinionated software & best practices can be useful in a world full of choices.
00:14:40: Finding out where CAPM is used by internal teams within SAP, as this is often where toolkits and other offerings start out and find their feet. One example is the app formerly known as “Excise Duty”, a special tax app for breweries in Germany. Wonderful!
00:16:58: Talking about support for Java and Node.js in SAP Web IDE and locally, from a question asked by Pierre Dominique. (Node.js support is coming back to SAP Web IDE, for CDS 3.x … and it’s already possible to build and run Java locally).
00:18:00: Breaking news! Announcement on the stream that a new version of the
@sap/cds is being released today, and Christian will be pressing the big red button.
00:19:20: Talking about the REPL (Read-Evaluate-Print-Loop) feature in the
cds command line utility, born from one of Daniel Hutzel’s “night programming sessions” :-). With the REPL you can programmatically interact with the runtime. See CloudFoundryFun #1 – Upgrade Cloud Foundry With A New REPL Feature by Marius Obert for more on REPLs.
00:21:12: Christian refers to CSN, pronounced “season”, which is the canonical model structure used internally in CAP (and we’ve seen this in other episodes, in fact, including the previous episode as the default output from the execution of a
cds compile command.
00:22:56: Time for the live demonstrations by Christian.
00:24:08: A message from OBS, my streaming software: “Streaming encoding overload”!
00:24:44: Starting to look at a slightly updated version of the “bookshop” demo app, which is going to be used consistently throughout the CAP rollout materials, especially for Node.js.
00:25:10: The updated VS Code has new features, which Christian briefly explores, before enabling the “screencast mode” feature. And he’s bringing the feature to Eclipse, too. Awesome!
00:27:00: Taking a look at the
data-model.cds, talking about how easy it is to navigate through the code, across the files, in VS Code too. Remembering that CAP uses the NPM module system to load up and find CDS files.
00:28:35: Mention of dependencies that can be defined, in
package.json, on another CDS model, using the
git URL scheme.
00:29:30: Noting that you don’t need to include the
.cds extension explicitly when referring to other files. This gives the module provider the chance to provide not only CDS sources but compiled CSN. Nice! Also, putting files manually directly into the
node_modules directory works too – you don’t need to use NPM to install.
00:31:52: Showing code completion for file and directory paths when specifying a
using statement, powered also by the Language Server Protocol (LSP).
00:34:10: Relaying Fred Verheul’s question on extending S/4HANA, on reusing existing data models from the ABAP backends, just applying the necessary extensions. The answer involves translating the OData API back into CSN!
00:36:45: Looking at the elements in the
managed type (in
common.cds) that provide administrative data, avoiding re-invention each time. A lovely simple solution, with some complexity & heavy lifting hidden, no doubt!
00:38:45: Looking at the
localized keyword, which is a feature that is nearing completion at the time of recording. We got a sneak preview on Christian’s machine, too, in the context of the Fiori frontend part to the bookshop sample, which is also new. Brontë’s “Wuthering Heights” in German is “Sturmhöhe”. Who knew?! The localisation feature requires some heavy lifting on the database, as you can well imagine.
00:43:38: You don’t need to specify the
compile option as it’s default for the
cds command, so when Christian uses
cds srv/ -2 sql it works fine. Here in the output we see a window into how things are generated underneath for the localisation. Note that it’s different between SQL and HANA because of the features that can be used in HANA itself.
00:45:00: Looking at some early works on temporal aspects of data, with the abstract entity
temporal, which we recognise from HR data sets.
00:47:25: Discussing Volker Buzek‘s question on exposing CDS as openAPI, and then Pierre Dominique’s question on exposing a GraphQL endpoint (for more on GraphQL see Monday morning thoughts: considering GraphQL). GraphQL is on the roadmap but with no fixed date yet.
00:53:00: Looking at the
admin-service.cds which has service notation exposing entities to the outside world, and the use of the
excluding keyword to exclude fields from entities (which is often better than implicitly including fields because of the problems that causes with extensibility).
00:55:06: Mentioning a small gotcha I encountered when trying to use
excluding – I’d forgotten to re-deploy to the persistence layer – the keyword implies modifications at the view level in the database (note that the services are reflected using views in the database, leveraging native database capabilities rather than writing code above the persistence layer).