如何在一个服务的另一个功能中使用一个服务的功能

2020-08-13 23:34发布

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

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


嗨同事!

我在一项服务中定义并实现了一项功能:

文件卡服务.cds

服务CardService {
 函数getUser(cardno:String)返回String;
 } 

文件card-service.js

 module.exports =异步功能(){
    
     this.on('getUser',async req => {
         返回等待getUserNTLM(req.data.cardno)
     });
    
 };  

我想在同一MTA应用程序中的另一个服务的函数中调用此函数。

文件order-service.cds

 service OrderService {
     函数isValidUser(cardno:String)返回布尔值;
 }
 

文件order-service.js

 module.exports =异步功能(){
   const srv = cds.connect.to('card-service')
    
   this.on('isValidUser',async req => {
     const user = srv.getUser(req.data.cardno)
     如果(user.value)返回true;
        否则返回假;
   });
 };
 

使用当前代码,当我尝试通过浏览器执行isValidUser函数时:

https://blablabla.eu10。 hana.ondemand.com/order/isValidUser(cardno='kjsdg87fg ')

我在Cloud Foundry的应用程序的日志中收到以下错误消息:[内部错误] TypeError:srv.getUser不是函数。

我怀疑我应该以某种方式在OrderService的Service定义中声明该函数,但是在CAP文档中没有与此主题相关的内容。 您能给我个提示怎么做吗?

亲切的问候,

Evgeniy

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

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


嗨同事!

我在一项服务中定义并实现了一项功能:

文件卡服务.cds

服务CardService {
 函数getUser(cardno:String)返回String;
 } 

文件card-service.js

 module.exports =异步功能(){
    
     this.on('getUser',async req => {
         返回等待getUserNTLM(req.data.cardno)
     });
    
 };  

我想在同一MTA应用程序中的另一个服务的函数中调用此函数。

文件order-service.cds

 service OrderService {
     函数isValidUser(cardno:String)返回布尔值;
 }
 

文件order-service.js

 module.exports =异步功能(){
   const srv = cds.connect.to('card-service')
    
   this.on('isValidUser',async req => {
     const user = srv.getUser(req.data.cardno)
     如果(user.value)返回true;
        否则返回假;
   });
 };
 

使用当前代码,当我尝试通过浏览器执行isValidUser函数时:

https://blablabla.eu10。 hana.ondemand.com/order/isValidUser(cardno='kjsdg87fg ')

我在Cloud Foundry的应用程序的日志中收到以下错误消息:[内部错误] TypeError:srv.getUser不是函数。

我怀疑我应该以某种方式在OrderService的Service定义中声明该函数,但是在CAP文档中没有与此主题相关的内容。 您能给我个提示怎么做吗?

亲切的问候,

Evgeniy

付费偷看设置
发送
5条回答
大简至美
1楼-- · 2020-08-14 00:29

Evgeniy,

请您检查一下您是否真正获得了服务

const srv = cds.connect.to ("卡片服务")

? 您可以通过console.log(srv)执行此操作。 也许应该

const srv = cds.connect.to ('CardService')

(取决于您的名称空间,也取决于名称空间)

由于CardService定义了" getUser",因此应该可以。

最诚挚的问候,
大卫

Nan4612
2楼-- · 2020-08-14 00:05

嗨,大卫!

非常感谢您的快速解答,并帮助您理解该问题。

它仅适用于内部服务,不适用于外部服务。

亲切的问候,

Evgeniy

半个程序猿
3楼-- · 2020-08-14 00:29

顺便说一句:您应该始终使用cds.connect进行等待:

 const srv =等待cds.connect.to('CardService')
 
太Q了
4楼-- · 2020-08-14 00:04

David Kunz 请将您的评论升级为答案,以便将其标记为 有效的答案。

compass1988
5楼-- · 2020-08-14 00:31

您好 Evgeniy Obraztsov

您需要在 cds.connect.to 方法中定义服务名称。

例如:

 module.exports =异步功能(){
   const srv = cds.connect.to('CardService')
   this.on('isValidUser',async req => {
     const user = srv.getUser(req.data.cardno)if(user.value)return true; elsereturn false;});}; 

一周热门 更多>