Node.js OData V4关联不起作用(SCP CF HANA 2.0)

2020-09-10 12:02发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

通过使用Node.js创建简单的OData V4服务,我在SAP Cloud Platform Cloud Foundry HANA 2.0中使用OData V4遇到了问题。 该应用程序主要是通过" SAP Cloud Platform业务应用程序"向导创建的。 它工作正常,除非我开始使用关联。 看起来关联的子实体正在引用自身(用$ expand调用)。

在我的数据库中,我得到以下数据(简单的父级子级):

该实体的外观如下。

命名空间my.app;

 实体PARENT {
 密钥ID:整数;
 CHILDS:CHILDS.PARENT_ID = ID上与CHILD的关联[*];
 }

 实体CHILD {
 密钥ID:整数;
 PARENT_ID:整数;
 } 

我对服务的期望是这样的:

 [
     {
         " ID":1
         "儿童":[
             {
                 " ID":1
                 " PARENT_ID":1
             }
         ]
     },
     {
         " ID":2
         "儿童":[
             {
                 " ID":2
                 " PARENT_ID":2
             },
             {
                 " ID":3,
                 " PARENT_ID":2
             }
         ]
     }
 ]
 

我想要在扩展的CHILDS中,每个CHILD.PARENT_ID等于PARENT.ID的孩子。
相反,我为每个PARENT项都获得了CHILDS,其中CHILD.PARENT_ID等于CHILD.ID:

/catalog/PARENT?$ expand = CHILDS

如果有人可以告诉我我做错了什么,我会很高兴。

为了更好地理解此处的内容,我是如何创建应用程序以及更改的内容。

向导创建应用

作为服务,我想使用Node.js。 所选数据库版本2.0 SPS 04是我可以从下拉菜单中选择的最新HANA数据库。 并保持简单而不使用UAA。

更改了一个简单的父子示例的数据库data-model.cds

文件位置:/db/data-model.cds

命名空间my.app;

 实体PARENT {
 密钥ID:整数;
 CHILDS:CHILDS.PARENT_ID = ID上与CHILD的关联[*];
 }

 实体CHILD {
 密钥ID:整数;
 PARENT_ID:整数;
 } 

我后来也尝试使用CHILDS:与CHILDS.PARENT_ID = ID上的许多CHILD关联;
我也尝试使用$ self.ID代替ID。

没有任何工作如我预期的那样。

更改了cat-service.cds

文件位置:/srv/cat-service.cds

使用my.app作为'../db/data-model'中的my;

 服务CatalogService {
 实体PARENT作为my.PARENT的投影;
 实体CHILD作为my.CHILD的投影;
 }
 

通过data-model.cds生成的.hdbcds,方法是右键单击Build> Build CDS

该服务本身会生成所有hdbcds文件:

通过右键单击数据库文件夹构建

然后它为我生成了表格。 而且我可以与Database-Explorer连接以查看其数据。

添加测试数据

右键单击"运行">"以Node.js应用程序运行"启动Node.js服务

该应用程序启动时没有任何问题。 服务也很好

/catalog/PARENT

/catalog/CHILD

/catalog/PARENT?$ expand = CHILDS

更多技术信息:

我正在使用Cloud-Foundry:
https://api .cf.eu10.hana.ondemand.com

/db/package.json

 {
   " name":"部署",
   "依赖关系":{
     " @ sap/hdi-deploy":" ^ 3.8.2"
   },
   "引擎": {
     " node":" ^ 8"
   },
   "脚本":{
     " postinstall":" node .build.js",
     "开始":"节点node_modules/@sap/hdi-deploy/deploy.js"
   }
 }
 

/srv/package.json

 {
     " name":" nodev4-srv",
     " description":"从../package.json生成,请不要更改!",
     " version":" 1.0.0",
     "依赖关系":{
         " @ sap/cds":" ^ 3.7.1",
         " express":" ^ 4.16.4",
         " hdb":" ^ 0.17.0"
     },
     "引擎": {
         " node":" ^ 8.9",
         " npm":" ^ 6"
     },
     " devDependencies":{},
     "脚本":{
         " postinstall":" npm重复数据删除&&节点.build.js",
         " start":"节点./node_modules/@sap/cds/bin/cds.js服务gen/csn.json",
         " watch":" nodemon -w。-i node_modules/** ,. git/** -e cds -x npm运行构建"
     },
     "私人":是的,
     " cds":{
         "要求":{
             "D b": {
                 " kind":" hana",
                 " model":" gen/csn.json"
             }
         }
     }
 }
 

/package.json

 {
     " name":" nodev4",
     " description":"由cds init生成",
     " repository":" <在此处添加您的存储库>",
     " license":" <在此处添加您的许可证>",
     " version":" 1.0.0",
     "引擎": {
         "节点":" ^ 8.9"
     },
     "文件":[
         "D b",
         " srv"
     ],
     "依赖关系":{
         " @ sap/cds":" ^ 3.7.1",
         " express":" ^ 4.16.4",
         " hdb":" ^ 0.17.0"
     },
     " devDependencies":{},
     "脚本":{
         " start":" cds运行",
         " build":" cds build/all --clean",
         " deploy":" cds部署"
     },
     " cds":{
         "要求":{
             "D b": {
                 " kind":" hana",
                 "型号":[
                     "D b",
                     " srv"
                 ]
             }
         }
     }
 }
 

(49.0 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

通过使用Node.js创建简单的OData V4服务,我在SAP Cloud Platform Cloud Foundry HANA 2.0中使用OData V4遇到了问题。 该应用程序主要是通过" SAP Cloud Platform业务应用程序"向导创建的。 它工作正常,除非我开始使用关联。 看起来关联的子实体正在引用自身(用$ expand调用)。

在我的数据库中,我得到以下数据(简单的父级子级):

该实体的外观如下。

命名空间my.app;

 实体PARENT {
 密钥ID:整数;
 CHILDS:CHILDS.PARENT_ID = ID上与CHILD的关联[*];
 }

 实体CHILD {
 密钥ID:整数;
 PARENT_ID:整数;
 } 

我对服务的期望是这样的:

 [
     {
         " ID":1
         "儿童":[
             {
                 " ID":1
                 " PARENT_ID":1
             }
         ]
     },
     {
         " ID":2
         "儿童":[
             {
                 " ID":2
                 " PARENT_ID":2
             },
             {
                 " ID":3,
                 " PARENT_ID":2
             }
         ]
     }
 ]
 

我想要在扩展的CHILDS中,每个CHILD.PARENT_ID等于PARENT.ID的孩子。
相反,我为每个PARENT项都获得了CHILDS,其中CHILD.PARENT_ID等于CHILD.ID:

/catalog/PARENT?$ expand = CHILDS

如果有人可以告诉我我做错了什么,我会很高兴。

为了更好地理解此处的内容,我是如何创建应用程序以及更改的内容。

向导创建应用

作为服务,我想使用Node.js。 所选数据库版本2.0 SPS 04是我可以从下拉菜单中选择的最新HANA数据库。 并保持简单而不使用UAA。

更改了一个简单的父子示例的数据库data-model.cds

文件位置:/db/data-model.cds

命名空间my.app;

 实体PARENT {
 密钥ID:整数;
 CHILDS:CHILDS.PARENT_ID = ID上与CHILD的关联[*];
 }

 实体CHILD {
 密钥ID:整数;
 PARENT_ID:整数;
 } 

我后来也尝试使用CHILDS:与CHILDS.PARENT_ID = ID上的许多CHILD关联;
我也尝试使用$ self.ID代替ID。

没有任何工作如我预期的那样。

更改了cat-service.cds

文件位置:/srv/cat-service.cds

使用my.app作为'../db/data-model'中的my;

 服务CatalogService {
 实体PARENT作为my.PARENT的投影;
 实体CHILD作为my.CHILD的投影;
 }
 

通过data-model.cds生成的.hdbcds,方法是右键单击Build> Build CDS

该服务本身会生成所有hdbcds文件:

通过右键单击数据库文件夹构建

然后它为我生成了表格。 而且我可以与Database-Explorer连接以查看其数据。

添加测试数据

右键单击"运行">"以Node.js应用程序运行"启动Node.js服务

该应用程序启动时没有任何问题。 服务也很好

/catalog/PARENT

/catalog/CHILD

/catalog/PARENT?$ expand = CHILDS

更多技术信息:

我正在使用Cloud-Foundry:
https://api .cf.eu10.hana.ondemand.com

/db/package.json

 {
   " name":"部署",
   "依赖关系":{
     " @ sap/hdi-deploy":" ^ 3.8.2"
   },
   "引擎": {
     " node":" ^ 8"
   },
   "脚本":{
     " postinstall":" node .build.js",
     "开始":"节点node_modules/@sap/hdi-deploy/deploy.js"
   }
 }
 

/srv/package.json

 {
     " name":" nodev4-srv",
     " description":"从../package.json生成,请不要更改!",
     " version":" 1.0.0",
     "依赖关系":{
         " @ sap/cds":" ^ 3.7.1",
         " express":" ^ 4.16.4",
         " hdb":" ^ 0.17.0"
     },
     "引擎": {
         " node":" ^ 8.9",
         " npm":" ^ 6"
     },
     " devDependencies":{},
     "脚本":{
         " postinstall":" npm重复数据删除&&节点.build.js",
         " start":"节点./node_modules/@sap/cds/bin/cds.js服务gen/csn.json",
         " watch":" nodemon -w。-i node_modules/** ,. git/** -e cds -x npm运行构建"
     },
     "私人":是的,
     " cds":{
         "要求":{
             "D b": {
                 " kind":" hana",
                 " model":" gen/csn.json"
             }
         }
     }
 }
 

/package.json

 {
     " name":" nodev4",
     " description":"由cds init生成",
     " repository":" <在此处添加您的存储库>",
     " license":" <在此处添加您的许可证>",
     " version":" 1.0.0",
     "引擎": {
         "节点":" ^ 8.9"
     },
     "文件":[
         "D b",
         " srv"
     ],
     "依赖关系":{
         " @ sap/cds":" ^ 3.7.1",
         " express":" ^ 4.16.4",
         " hdb":" ^ 0.17.0"
     },
     " devDependencies":{},
     "脚本":{
         " start":" cds运行",
         " build":" cds build/all --clean",
         " deploy":" cds部署"
     },
     " cds":{
         "要求":{
             "D b": {
                 " kind":" hana",
                 "型号":[
                     "D b",
                     " srv"
                 ]
             }
         }
     }
 }
 

(49.0 kB)
付费偷看设置
发送
1条回答
当学会了学习
1楼-- · 2020-09-10 12:44

看起来好像" @ sap/cds"有问题。 生成的版本^ 3.7.1在此类要求方面存在问题。 如果版本更改为3.5.0,则不会出现此问题。 然后,它可以与预期的代码一起使用。

一周热门 更多>