From c46a82d0f89d136e38d1837d64c9820195846cdd Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Fri, 26 Feb 2021 16:34:21 +0100 Subject: [PATCH 1/4] Codetour for DB functions --- .tours/db-native.tour | 105 ++++++++++++++++++++++++++++++++++++++++++ fiori/package.json | 12 ++++- 2 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 .tours/db-native.tour diff --git a/.tours/db-native.tour b/.tours/db-native.tour new file mode 100644 index 00000000..f0b0e9a4 --- /dev/null +++ b/.tours/db-native.tour @@ -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" +} \ No newline at end of file diff --git a/fiori/package.json b/fiori/package.json index 7cbf5f3b..5da44c3c 100644 --- a/fiori/package.json +++ b/fiori/package.json @@ -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", From d0d95f3c425bd94026f94a91868f81049ac48f2c Mon Sep 17 00:00:00 2001 From: Iwona Hahn Date: Fri, 26 Feb 2021 17:14:49 +0100 Subject: [PATCH 2/4] first review, minor edits --- .tours/db-native.tour | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.tours/db-native.tour b/.tours/db-native.tour index f0b0e9a4..7c63ac2f 100644 --- a/.tours/db-native.tour +++ b/.tours/db-native.tour @@ -8,7 +8,7 @@ }, { "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.", + "description": "#### Basic Schema\n\nWe want to add two fields to the `Authors` entity, one for the author's age and one for the span of years that she or he lived. These two fields can be computed out of the existing `dateOfBirth` and `dateOfDeath` fields.", "selection": { "start": { "line": 19, @@ -23,7 +23,7 @@ }, { "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.", + "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, @@ -38,7 +38,7 @@ }, { "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.", + "description": "#### SQLite implementation\n\nHere is the first implementation for SQLite. It computes the two 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, @@ -53,7 +53,7 @@ }, { "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.", + "description": "#### SAP HANA Implementation\n\nThis is the second implementation for SAP HANA. It computes the same two 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, @@ -74,19 +74,19 @@ }, { "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", + "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 two 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.", + "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.", + "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": { From 85dd8558f43cdf40e29935bd2a25829cf1f96e36 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Mon, 1 Mar 2021 14:37:57 +0100 Subject: [PATCH 3/4] Some more explanation around file structure --- .tours/db-native.tour | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.tours/db-native.tour b/.tours/db-native.tour index 7c63ac2f..fe4deaad 100644 --- a/.tours/db-native.tour +++ b/.tours/db-native.tour @@ -8,7 +8,7 @@ }, { "file": "bookshop/db/schema.cds", - "description": "#### Basic Schema\n\nWe want to add two fields to the `Authors` entity, one for the author's age and one for the span of years that she or he lived. These two fields can be computed out of the existing `dateOfBirth` and `dateOfDeath` fields.", + "description": "#### Basic Schema\n\nWe want to add two fields to the `Authors` entity, one for the author's age and one for the span of years that she or he lived.\n\nThese two fields can be computed out of the existing `dateOfBirth` and `dateOfDeath` fields.", "selection": { "start": { "line": 19, @@ -38,7 +38,7 @@ }, { "file": "fiori/db/sqlite/index.cds", - "description": "#### SQLite implementation\n\nHere is the first implementation for SQLite. It computes the two 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.", + "description": "#### SQLite implementation\n\nHere is the first implementation for SQLite. It computes the two 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.\n", "selection": { "start": { "line": 7, @@ -53,7 +53,7 @@ }, { "file": "fiori/db/hana/index.cds", - "description": "#### SAP HANA Implementation\n\nThis is the second implementation for SAP HANA. It computes the same two 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.", + "description": "#### SAP HANA Implementation\n\nThis is the second implementation for SAP HANA. It computes the same two 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 and Code Structure\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.\n\nAlso, we choose to implement all of that as extension of the original bookshop here in the _fiori_ package. See the first [CAP Samples] code tour for more on the different packages of this reposiory.", "selection": { "start": { "line": 7, @@ -68,13 +68,13 @@ }, { "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.", + "description": "#### Configuration\n\nThe `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 two new fields.\n", + "description": "#### Run with SQLite\n\nTo 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 two new fields.\n", "line": 28, "title": "Run with SQLite" }, @@ -86,7 +86,7 @@ }, { "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.", + "description": "### Add More Data\n\nOptionally you may add some `Authors` data by clicking on the _Send Request_ link (provided by the [REST client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) extension).", "line": 68, "selection": { "start": { @@ -98,7 +98,11 @@ "character": 1 } }, - "title": "Wrap-up" + "title": "Add Data" + }, + { + "title": "Wrap-up", + "description": "### 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." } ], "ref": "master" From 76d1b1865bfbef8a3c027eb173f5be5b2597ad0a Mon Sep 17 00:00:00 2001 From: Iwona Hahn Date: Mon, 1 Mar 2021 17:24:53 +0100 Subject: [PATCH 4/4] minor edits --- .tours/db-native.tour | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.tours/db-native.tour b/.tours/db-native.tour index fe4deaad..035ef298 100644 --- a/.tours/db-native.tour +++ b/.tours/db-native.tour @@ -4,7 +4,7 @@ "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." + "description": "### Database Functions in CDS Models\n\nIn this tour, you'll learn how to add database-specific functions to CDS models in your application." }, { "file": "bookshop/db/schema.cds", @@ -23,7 +23,7 @@ }, { "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.", + "description": "This is how the `Authors` entity gets exposed in an OData or REST service.\n\nIn the next step, you'll see how we extend this projection.", "selection": { "start": { "line": 4, @@ -38,7 +38,7 @@ }, { "file": "fiori/db/sqlite/index.cds", - "description": "#### SQLite implementation\n\nHere is the first implementation for SQLite. It computes the two 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.\n", + "description": "#### SQLite Implementation\n\nHere's the first implementation for SQLite. It computes the two 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.\n", "selection": { "start": { "line": 7, @@ -53,7 +53,7 @@ }, { "file": "fiori/db/hana/index.cds", - "description": "#### SAP HANA Implementation\n\nThis is the second implementation for SAP HANA. It computes the same two 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 and Code Structure\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.\n\nAlso, we choose to implement all of that as extension of the original bookshop here in the _fiori_ package. See the first [CAP Samples] code tour for more on the different packages of this reposiory.", + "description": "#### SAP HANA Implementation\n\nThis is the second implementation for SAP HANA. It computes the same two 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 and Code Structure\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/` folder as well. In the next step, you'll see how these files are loaded.\n\nAlso, we choose to implement all of that as an extension of the original bookshop here in the _fiori_ package. See the first [CAP Samples] code tour for more details on the different packages of this repository.", "selection": { "start": { "line": 7, @@ -74,19 +74,19 @@ }, { "file": "fiori/package.json", - "description": "#### Run with SQLite\n\nTo 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 two new fields.\n", + "description": "#### Run with SQLite\n\nTo run with `development` and an in-memory SQLite database, you don't 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](http://localhost:4004/admin/Authors) to see the two 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.", + "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](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\n\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 `Authors` data by clicking on the _Send Request_ link (provided by the [REST client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) extension).", + "description": "### Add More Data\n\nOptionally you can add some `Authors` data by clicking on the _Send Request_ link (provided by the [REST client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) extension).", "line": 68, "selection": { "start": {