Codetour for DB functions

This commit is contained in:
Christian Georgi
2021-02-26 16:34:21 +01:00
parent 7654012292
commit c46a82d0f8
2 changed files with 115 additions and 2 deletions

105
.tours/db-native.tour Normal file
View File

@@ -0,0 +1,105 @@
{
"$schema": "https://aka.ms/codetour-schema",
"title": "Database Functions",
"steps": [
{
"title": "Introduction",
"description": "### Database Functions in CDS Models\n\nIn this tour, you will learn how to add database-specific funtions to CDS models in your application."
},
{
"file": "bookshop/db/schema.cds",
"description": "#### Basic Schema\n\nWe want to add 2 fields to the `Authors` entity, one for the author's age and one for the span of years that she or he lived. These 2 fields can be computed out of the existing `dateOfBirth` and `dateOfDeath` fields.",
"selection": {
"start": {
"line": 19,
"character": 1
},
"end": {
"line": 21,
"character": 1
}
},
"title": "Base fields in Author"
},
{
"file": "bookshop/srv/admin-service.cds",
"description": "This is how the `Authors` entity gets exposed in an OData or Rest service.\n\nIn the next step you will see how we extend this projection.",
"selection": {
"start": {
"line": 4,
"character": 1
},
"end": {
"line": 5,
"character": 1
}
},
"title": "Authors service"
},
{
"file": "fiori/db/sqlite/index.cds",
"description": "#### SQLite implementation\n\nHere is the first implementation for SQLite. It computes the 2 fields `age` and `lifetime` through SQLite's [strftime](https://sqlite.org/lang_datefunc.html) function.\n\nThrough the [`extend projection`](https://cap.cloud.sap/docs/cds/cdl#extend-view) clause you can add additional fields to projection entities. These are deployed as database views, which is why we can integrate the database functions in the first place.",
"selection": {
"start": {
"line": 7,
"character": 1
},
"end": {
"line": 11,
"character": 1
}
},
"title": "SQLite implementation"
},
{
"file": "fiori/db/hana/index.cds",
"description": "#### SAP HANA Implementation\n\nThis is the second implementation for SAP HANA. It computes the same 2 fields `age` and `lifetime` through the [YEARS_BETWEEN](https://help.sap.com/viewer/7c78579ce9b14a669c1f3295b0d8ca16/Cloud/en-US/7c0d2c161ea34def86de3f5eadd6a0af.html) and [YEAR](https://help.sap.com/viewer/7c78579ce9b14a669c1f3295b0d8ca16/Cloud/en-US/20f5fac6751910148dabd3c6821f907d.html) functions of SAP HANA.\n\n#### File Layout\n\nNote the path of the `.cds` file we are in: it's in a subfolder of `db`, so that it's _not_ automatically picked up when we start the application. The same is true for the SQLite implementation: it's in a separate `db/sqlite/`\nfolder as well. In the next step you will see how these files are loaded.",
"selection": {
"start": {
"line": 7,
"character": 1
},
"end": {
"line": 11,
"character": 1
}
},
"title": "SAP HANA implementation"
},
{
"file": "fiori/package.json",
"description": "The `cds` section in `package.json` is a place to configure which of the `db/sqlite` and `db/hana` folders are used for which database.\nWe use [Node.js profiles](https://cap.cloud.sap/docs/node.js/cds-env#profiles) to separate the configuration.\nIn the `development` profile, you can see that `db/sqlite` is set as the model, while the `db/hana` folder is configured in the `production` profile.",
"line": 17,
"title": "Configuration"
},
{
"file": "fiori/package.json",
"description": "To run with `development` and an in-memory SQLite database, you don'y need to do anything special, because it's activated by default. Just run\n\n>> cds watch fiori\n\nThen open http://localhost:4004/admin/Authors to see the 2 new fields.\n",
"line": 28,
"title": "Run with SQLite"
},
{
"file": "fiori/package.json",
"description": "#### Deploy the CDS model to SAP HANA:\n\nTo 'activate' SAP HANA through the `production` profile, you can use the global `--production` flag:\n\n>> cd fiori; cds deploy --to hana --production\n\n[Learn more about SAP HANA deployment](https://cap.cloud.sap/docs/guides/databases#get-hana)\n\n#### Run the application\n\n>> cd fiori; cds watch --production\n\nThe service on http://localhost:4004/admin/Authors is the same as before, but this time the `Authors` entity is backed by a database view with an SAP HANA function.\n\n#### More\nIf you don't see data, you can add some in the next step.",
"line": 31,
"title": "Run with SAP HANA"
},
{
"file": "fiori/test/requests.http",
"description": "### Add more data\n\nOptionally you may add some data by clicking on the _Send Request_ link (provided by the [Rest client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) extension).\n\n### Summary\n\nThat's it! You have seen \n- How to integrate database-specific functions in a CDS model\n- How to switch between the two implementations for SQLite and SAP HANA.",
"line": 68,
"selection": {
"start": {
"line": 67,
"character": 1
},
"end": {
"line": 73,
"character": 1
}
},
"title": "Wrap-up"
}
],
"ref": "master"
}

View File

@@ -15,12 +15,20 @@
"watch": "cds watch"
},
"cds": {
"hana": {
"deploy-format": "hdbtable"
},
"requires": {
"auth": {
"strategy": "dummy"
},
"ReviewsService": {
"kind": "odata", "model": "@capire/reviews"
"kind": "odata",
"model": "@capire/reviews"
},
"OrdersService": {
"kind": "odata", "model": "@capire/orders"
"kind": "odata",
"model": "@capire/orders"
},
"db": {
"kind": "sql",