cancel
Showing results for 
Search instead for 
Did you mean: 
Subscribe

Hello folks,

I'm building an app on Cloud Platform (CF) using Node.js/Express. This thing has a /db module containing a entity definition (books-model.cds) and /srv that runs a node.js app on server.js that should read data declared on db module.

According to this documentation the package @sap/cds should help me do exactly that, using the statements below:

cds.importEntities([
    { $entity: "xsds.test.cds::ds_test.e1" },
    { $entity: "xsds.test.cds::ds_test.e2",
      $fields: {
          a: { $association: "xsds.test.cds::ds_test.e2",
               $viaBacklink: "b" }
      }
    }
], callback);
function callback(error, entities) {
    var E1 = entities["xsds.test.cds::ds_test.e1"];
    var E2 = entities["xsds.test.cds::ds_test.e2"];
    // ...
}

Thing is, @sap/cds module v2.10 doesn't seem to think that it is responsible for doing that. This version only handles the build and deployment of .cds files (to hdbcds et etc).

In a old version of this module, before going to npm repository, it was called "sap-cds" and it did provided this .importEntity method.

Does someone know what would be the equivalent of sap-cds on npm.sap.com, or even if it exists?

So far, I'm able to interact with the database using @sap/xsenv and @sap/hdbext.

import xsenv = require('@sap/xsenv') import hdbext = require('@sap/hdbext')    
const services = xsenv.getServices({ hana:'plcockpit-hdi' }) 

express.use('/', hdbext.middleware(services.hana))    
express.get('/', (req, res) => {
        req.db.exec('SELECT * FROM \"com.acme::MyLibrary.Books\"', function (err, rows) {
            res.json({
                result: JSON.stringify(rows[0])
            })
        })
    })

(Code is a simplified version of the original)

Although it works, I would like to know if is there a more "high-level" api to interact with the CDS layer.

Thanks

0 Likes
View Entire Topic
Octav
Participant
0 Likes

HI Ulysses,

Don't know if this helps.

I have followed the tutorial https://developers.sap.com/tutorials/cp-apm-nodejs-create-service.html

After exposing and consuming OData from SQLite i have implemented the same scenario in hdb as well.

Everything that I did it was to change the package.json and then to run

cds deploy.

Because I used the SYSTEM user of the tenant, all tables were created under system schema ( please see below ).

I am still investigating/learning node & @sap/cds modules so any piece of advice is very appreciated.

Thank you

package.json

{ "name": "test1-hdb", "description": "Generated by cds init", "repository": "<Add your repository here>", "license": "ISC", "version": "1.0.0", "dependencies": { "@sap/cds": "^3.5.0", "express": "^4.16.4" }, "engines": { "node": ">=8" }, "cds": { "requires": { "db": { "kind": "hana", "model": "srv", "credentials": { "host": "xx.xxx.xxx.xxx", "port": 39041, "user": "SYSTEM", "password": "*****" } } } } }

ulyssesbonfim
Explorer
0 Likes

Hi Onu,

I'm not sure on what the question was, but it seems that you're troubled for tables on "SYSTEM" schema.

I think the idea would be to configure hdi-container on your mta.yaml (checkout https://developers.sap.com/tutorials/xsa-hdi-module.html Step 1: Create HDB Module). Once deployed it will generate a specific schema for your app.

Hope this helps.

PS.: Your question albeit interesting is not directly related to the original. I would suggest create a new topic next time, so you gain more visibility and other people with more expertise can also shine some light 😃

Good luck in your journey