如何消费外部服务。

2020-08-22 05:01发布

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

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


你好帽子专家

我已经初始化了一个简单的CAP节点项目,并且

我想知道如何在其他服务中使用服务。 我在Foundry中部署了我的第一个服务,并且可以正常工作。

实体位置:托管{
   密钥ID:整数;
   国家:字符串(111);
 }
 ID;国家/地区;
 1;秘鲁
 2;美国
 

对于此服务,我已经在子帐户中创建了一个基本目的地,未进行身份验证,其名称为:DEST_LOCATION,并在我的空间内安装了名为dest_instance的服务

第二项服务必须调用第一个服务并添加一个额外的字段

实体人:受管理的{
   密钥ID:整数;
   名称:字符串(111);
   locationId:整数;
 }
 ID;名称;国家;
 1;彼得; 1
 2;俊; 2
 

与Person?&$ expand = Location并且此发球的响应必须具有以下结果:

"值":[
     {
       " ID":" 1",
       " name":" Peter",
       " locationId":1
       " country":" PERU"
     },
     {
       " ID":" 2",
       " name":" Jhon",
       " locationId":2
       "国家":"美国"
     }
 ]
 

这是我的package.json

 ID:人
 _schema-version:" 3.1"
 版本:0.0.1
 参数:
   启用并行部署:true
 模块:
   -名称:person-db
     类型:com.sap.xs.hdi
     路径:gen/db
     构建参数:
       忽略:[" node_modules/"]
     参数:
       记忆体:256M
       磁盘配额:256M
     要求:
       -名称:DB_PERSON
   -名称:person-srv
     类型:nodejs
     路径:gen/srv
     构建参数:
       忽略:[" node_modules/"]
     参数:
       内存:512M
       磁盘配额:256M
     提供:
       -名称:srv_api
         特性:
           网址:$ {default-url}
     要求:
       -名称:DB_PERSON
       -名称:uaa_des
       -名称:dest_instance
       -名称:srv_api
         组:目的地
         特性:
           名称:DEST_LOCATION
           网址:"〜{url}"
           forwardAuthToken:true
 资源:
   -名称:DB_PERSON
     类型:com.sap.xs.hdi-container
     特性:
       hdi容器名称:DB_PERSON
     参数:
       配置:
         模式:SCHEMA_PERSON
   -名称:uaa_des
     类型:org.cloudfoundry.existing-service
   -名称:dest_instance
     参数:
       服务计划:精简版
       服务:目的地
     类型:org.cloudfoundry.existing-service
 

还有我的package.json

 {
   " name":" person",
   " version":" 1.0.0",
   " description":"一个简单的CAP项目。",
   " repository":" <在此处添加您的存储库>",
   "许可证":" ISC",
   "依赖关系":{
     " @ sap/audit-logging":" ^ 3.1.0",
     " @ sap/logging":" ^ 5.1.0",
     " axios":" 0.19.0",
     "表达":" ^ 4.17.1",
     " http-proxy-middleware":" ^ 0.20.0",
     " @ sap/cds-odata-v2-adapter-proxy":"最新",
     " @ sap/cds":" ^ 3",
     " @ sap/xssec":" ^ 2.2.4",
     " hdb":" ^ 0.17.1",
     " passport":" ^ 0.4.1",
   
   },
   "脚本":{
     " start":" npx cds运行"
   },
   " cds":{
     "要求":{
       "D b": {
         " kind":" hana",
         "型号":[
           "D b",
           " srv"
         ]
       },
       " externalService":{
         " kind":" rest/odata",
         " model":"/地址",
         "凭据":{
           "目的地":" DEST_LOCATION",
         },
         " uaa":{
           " kind":" xsuaa"
         }
       }
     }
   }
 }
 

现在,我希望有人可以帮助我进行下一步。 我应该扩展de cds来在数据库中的person.cds中添加国家/地区字段吗?

在我的服务人员中,cds应该包括扩展名吗? 在我的服务中person.js我应该打电话给目的地以获得

const srv = cds.connect.to ('DEST_LOCATION')
const {Location} = srv.Location;

.....

我尝试了很多事情,任何帮助将不胜感激。

谢谢

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

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


你好帽子专家

我已经初始化了一个简单的CAP节点项目,并且

我想知道如何在其他服务中使用服务。 我在Foundry中部署了我的第一个服务,并且可以正常工作。

实体位置:托管{
   密钥ID:整数;
   国家:字符串(111);
 }
 ID;国家/地区;
 1;秘鲁
 2;美国
 

对于此服务,我已经在子帐户中创建了一个基本目的地,未进行身份验证,其名称为:DEST_LOCATION,并在我的空间内安装了名为dest_instance的服务

第二项服务必须调用第一个服务并添加一个额外的字段

实体人:受管理的{
   密钥ID:整数;
   名称:字符串(111);
   locationId:整数;
 }
 ID;名称;国家;
 1;彼得; 1
 2;俊; 2
 

与Person?&$ expand = Location并且此发球的响应必须具有以下结果:

"值":[
     {
       " ID":" 1",
       " name":" Peter",
       " locationId":1
       " country":" PERU"
     },
     {
       " ID":" 2",
       " name":" Jhon",
       " locationId":2
       "国家":"美国"
     }
 ]
 

这是我的package.json

 ID:人
 _schema-version:" 3.1"
 版本:0.0.1
 参数:
   启用并行部署:true
 模块:
   -名称:person-db
     类型:com.sap.xs.hdi
     路径:gen/db
     构建参数:
       忽略:[" node_modules/"]
     参数:
       记忆体:256M
       磁盘配额:256M
     要求:
       -名称:DB_PERSON
   -名称:person-srv
     类型:nodejs
     路径:gen/srv
     构建参数:
       忽略:[" node_modules/"]
     参数:
       内存:512M
       磁盘配额:256M
     提供:
       -名称:srv_api
         特性:
           网址:$ {default-url}
     要求:
       -名称:DB_PERSON
       -名称:uaa_des
       -名称:dest_instance
       -名称:srv_api
         组:目的地
         特性:
           名称:DEST_LOCATION
           网址:"〜{url}"
           forwardAuthToken:true
 资源:
   -名称:DB_PERSON
     类型:com.sap.xs.hdi-container
     特性:
       hdi容器名称:DB_PERSON
     参数:
       配置:
         模式:SCHEMA_PERSON
   -名称:uaa_des
     类型:org.cloudfoundry.existing-service
   -名称:dest_instance
     参数:
       服务计划:精简版
       服务:目的地
     类型:org.cloudfoundry.existing-service
 

还有我的package.json

 {
   " name":" person",
   " version":" 1.0.0",
   " description":"一个简单的CAP项目。",
   " repository":" <在此处添加您的存储库>",
   "许可证":" ISC",
   "依赖关系":{
     " @ sap/audit-logging":" ^ 3.1.0",
     " @ sap/logging":" ^ 5.1.0",
     " axios":" 0.19.0",
     "表达":" ^ 4.17.1",
     " http-proxy-middleware":" ^ 0.20.0",
     " @ sap/cds-odata-v2-adapter-proxy":"最新",
     " @ sap/cds":" ^ 3",
     " @ sap/xssec":" ^ 2.2.4",
     " hdb":" ^ 0.17.1",
     " passport":" ^ 0.4.1",
   
   },
   "脚本":{
     " start":" npx cds运行"
   },
   " cds":{
     "要求":{
       "D b": {
         " kind":" hana",
         "型号":[
           "D b",
           " srv"
         ]
       },
       " externalService":{
         " kind":" rest/odata",
         " model":"/地址",
         "凭据":{
           "目的地":" DEST_LOCATION",
         },
         " uaa":{
           " kind":" xsuaa"
         }
       }
     }
   }
 }
 

现在,我希望有人可以帮助我进行下一步。 我应该扩展de cds来在数据库中的person.cds中添加国家/地区字段吗?

在我的服务人员中,cds应该包括扩展名吗? 在我的服务中person.js我应该打电话给目的地以获得

const srv = cds.connect.to ('DEST_LOCATION')
const {Location} = srv.Location;

.....

我尝试了很多事情,任何帮助将不胜感激。

谢谢

付费偷看设置
发送
5条回答
南山jay
1楼-- · 2020-08-22 05:23

嗨,

请查看有关如何使用服务的官方文档:

https://cap.cloud.sap/docs/guides/consumption-services

最好的问候,
大卫

四川大学会员
2楼-- · 2020-08-22 05:32

嗨,大卫和格雷戈尔,

我遵循了官方文档,并且看到了您的示例Gregor,我认为这比我想要的要复杂。 我将开始仅限制来自外部服务的所有数据,但是我没有找到返回数据的方法。

在个人服务的服务admin.js中,我想返回所有数据表单的位置。

 const cds = require('@ sap/cds')


 module.exports = srv => {
 srv.on('READ','Location',async(req)=> {
 尝试{
                /*在这里我想返回外部服务数据*/
 }抓住(e){
 调试器;
 console.log("错误:" + e.message)
 console.log(" Stack:" + e.stack)
 }
 })
 }
 

我将所有项目上传到此仓库。 https://github.com/mrjerte/consume-cap-service

感谢您的帮助。

非常感谢。

SKY徐
3楼-- · 2020-08-22 05:42

我认为我的示例应用程序 epmbp-consumer-app 可以指导您以及David链接的文档。

SAP小黑
4楼-- · 2020-08-22 05:19

您可以找到此仓库的项目。 https://github.com/mrjerte/consume-cap-service

最好

SKY徐
5楼-- · 2020-08-22 05:38

您好

,也许您从返回包含位置实体字段的静态JSON开始。

是的,我在 service.js#L81 有点复杂,因为我使用的是SAP Cloud SDK。 但是示例 controller-api 可能更适合,因为它使用了CAP Service API。 查看 controller-service.js#L19

最诚挚的问候
格雷戈尔