CAP:部署到CF和HANA时的行为不同

2020-08-18 08:14发布

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

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


大家好,
我想分享在将CAP(NodeJs)应用程序部署到Cloud Foundry时发生的事情。
这段代码:

//*获取访问请求:
         const obj = req.data;
         const db =等待cds.connect.to('db');
         const {UserInfo,AccessRequest} = db.entities;  <--- CF中的此行失败

        //*检查这一天是否已经有访问请求:
         const accessRequests =等待
              SELECT.from(AccessRequest)
                    .where({accessDate:moment()。format(" YYYY-MM-DD")})
                    .and({启动器ID:req.user.id})
                    .and({locationFloor_ID:obj.locationFloor_ID}); 

这在使用sqlite进行本地测试时效果很好。
通过反射,实例化UserInfo和AccessRequest变量不会引起麻烦。

在Cloud Foundry中时,反射不起作用,因此UserInfo和AccessRequest保持"未定义",并且下一个SELECT失败。

这是我发现的解决方法:

//*获取访问请求:
         const obj = req.data;
         const db =等待cds.connect.to('db');
         const {UserInfo,AccessRequest} = db.entities('my.inbox.db');  <-此工作

        //*检查这一天是否已经有访问请求:
         const accessRequests =等待
              SELECT.from(AccessRequest)
                    .where({accessDate:moment()。format(" YYYY-MM-DD")})
                    .and({启动器ID:req.user.id})
                    .and({locationFloor_ID:obj.locationFloor_ID}); 

所以我只是将数据库模型名称空间传递给实体函数。

怎么样? 为什么使用sqlite在没有命名空间的情况下可以工作,而在HANA中却不能工作?
无论我们在哪种环境下工作,都应该完全一样吗?

在这种情况下,CAP文档中的示例非常混乱,所以我很困惑。

有任何提示吗?

最好,
罗伯托。

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

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


大家好,
我想分享在将CAP(NodeJs)应用程序部署到Cloud Foundry时发生的事情。
这段代码:

//*获取访问请求:
         const obj = req.data;
         const db =等待cds.connect.to('db');
         const {UserInfo,AccessRequest} = db.entities;  <--- CF中的此行失败

        //*检查这一天是否已经有访问请求:
         const accessRequests =等待
              SELECT.from(AccessRequest)
                    .where({accessDate:moment()。format(" YYYY-MM-DD")})
                    .and({启动器ID:req.user.id})
                    .and({locationFloor_ID:obj.locationFloor_ID}); 

这在使用sqlite进行本地测试时效果很好。
通过反射,实例化UserInfo和AccessRequest变量不会引起麻烦。

在Cloud Foundry中时,反射不起作用,因此UserInfo和AccessRequest保持"未定义",并且下一个SELECT失败。

这是我发现的解决方法:

//*获取访问请求:
         const obj = req.data;
         const db =等待cds.connect.to('db');
         const {UserInfo,AccessRequest} = db.entities('my.inbox.db');  <-此工作

        //*检查这一天是否已经有访问请求:
         const accessRequests =等待
              SELECT.from(AccessRequest)
                    .where({accessDate:moment()。format(" YYYY-MM-DD")})
                    .and({启动器ID:req.user.id})
                    .and({locationFloor_ID:obj.locationFloor_ID}); 

所以我只是将数据库模型名称空间传递给实体函数。

怎么样? 为什么使用sqlite在没有命名空间的情况下可以工作,而在HANA中却不能工作?
无论我们在哪种环境下工作,都应该完全一样吗?

在这种情况下,CAP文档中的示例非常混乱,所以我很困惑。

有任何提示吗?

最好,
罗伯托。

付费偷看设置
发送
5条回答
Nir深蓝
1楼-- · 2020-08-18 08:34

您好 Roberto Pagni

没有看到完整的模型和代码,我无法给出完整的解释。 但是,从您共享的内容来看,您的"解决方法"看起来像是使用db.entities的正确方法。 您需要传递名称空间,因为诸如" UserInfo"之类的实体名称对于数据库而言可能不是唯一的(与服务范围相反,在给定服务具有UserInfo的情况下," const {UserInfo} = srv.entities"的工作范围为 当然。)

最好,
塞巴斯蒂安

悻福寶寶
2楼-- · 2020-08-18 08:35
lukcy2020
3楼-- · 2020-08-18 08:28

我有种感觉,您刚刚为此发布了.. kudo的帖子,就救了我半天的挫败感:-)

吹牛啤
4楼-- · 2020-08-18 08:17
# p#

我能够通过在cds.requires.db部分添加:

" model":" db" 

来使用sqlite解决本地运行的问题。 在package.json

huskylover
5楼-- · 2020-08-18 08:34

一周热门 更多>