如何通过SAP Cloud SDK for JavaScript连接到ABAP Cloud实例?

2020-08-22 13:56发布

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

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


我使用以下教程构建了OData API:

https://developers.sap.com/group.abap- env-restful-managed.html

唯一的区别是,我没有在服务定义中公开投影视图,而是在单独的服务定义中公开了数据模型,该服务定义将数据公开为OData服务:

 @ EndUserText.label:"用于旅行的OData API"
 定义服务Z5API_TRAVEL {
   将Z5I_TRAVEL暴露为Travel;
   将/DMO/I_Customer暴露为乘客;
   将/DMO/I_Agency公开为TravelAgency;
   将/DMO/I_Airport暴露为机场;
   将I_Currency公开为货币;
   将I_Country暴露为国家;
 }
 

由此,我可以创建具有相同名称的服务绑定,然后可以通过浏览器中的OData链接获取所需的数据。 但是,我需要先登录才能获取数据。 我正在使用的链接如下所示:

https:// 。 abap-web.us10。 hana.ondemand.com/sap/opu/odata/sap/Z5API_TRAVEL/旅行

我的下一步是我希望能够使用OData API和SAP Cloud SDK。 我能够通过SAP Cloud SDK CLI从根OData链接的metdata生成OData客户端,并且能够为"旅行"模块创建服务:

从'@ nestjs/common'导入{可注入};
 从" odata-client/cds-z-5-ui-c-tr​​avel-m-service"导入{Travel};

 @Injectable()
 出口舱TravelService {
     getAllTravels(){
         返回Travel.requestBuilder()
             。得到所有()
             。选择(
                 Travel.CUSTOMER_ID,
                 Travel.DESCRIPTION,
                 旅行。END_DATE)
             。执行({
                 网址:" https:// .abap.us10.hana.ondemand.com/sap/opu/odata/sap/Z5API_TRAVEL/Travel",
                 用户名:" SUSER",
                 密码:" NOTMYPASSWORD"
             })
     }
 }
 

然后旅行控制器看起来像:

 import'@ nestjs/common'中的{Controller,Get,HttpException};
 从" ./travel.service"导入{TravelService};
 从" odata-client/cds-z-5-ui-c-tr​​avel-m-service"导入{Travel};

 @Controller('旅行')
 导出类TravelController {
     构造函数
         私人只读travelService:TravelService
     ){}

     @得到()
     getTravels():Promise <旅行[]> {
         返回this.travelService
             .getAllTravels()
             .catch(错误=> {
                 抛出新的HttpException(
                     `旅行失败-$ {error.message}`,500);
             })
     }
 }
 

因此,然后将这些文件导入travel模块中,然后将travel模块导入主app模块中。 因此,一旦设置了这些文件,便启动了Node.js服务器,并通过Postman调用了http://localhost:3000/travels,并收到了以下消息:

 {
     " statusCode":500,
     " message":"无法旅行-无法读取未定义的属性"结果""
 }
 

然后,当然,我检查了我先前使用基本授权在Postman内部共享的基本链接,并得到了响应:

 

 <头>
     
     <脚本>
         document.cookie =" fragmentAfterLogin =" + encodeURIComponent(location.hash)+"; path =/"; document.cookie =" locationAfterLogin =" + encodeURIComponent(location.href.split('#')[0] .split(  location.host)[1])+"; path =/"; document.cookie =" signature = ; path =/"; location =" https://abap-public-trial-us10.authentication.us10  .hana.ondemand.com/oauth/authorize?response_type = code&client_id = <某些其他生成的响应>%2Flogin%2Fcallback"
     
 

 
 

现在,我了解了S/4Hana Cloud,您可以为系统授权某些用户,但是我不确定如何为ABAP Cloud实例执行此操作。 我目前正在使用试用帐户,该帐户可以提供有关我可以做什么或不能做什么的任何信息。 那么是否会有一个很好的资源或指导来解决这个错误?

非常感谢!

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

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


我使用以下教程构建了OData API:

https://developers.sap.com/group.abap- env-restful-managed.html

唯一的区别是,我没有在服务定义中公开投影视图,而是在单独的服务定义中公开了数据模型,该服务定义将数据公开为OData服务:

 @ EndUserText.label:"用于旅行的OData API"
 定义服务Z5API_TRAVEL {
   将Z5I_TRAVEL暴露为Travel;
   将/DMO/I_Customer暴露为乘客;
   将/DMO/I_Agency公开为TravelAgency;
   将/DMO/I_Airport暴露为机场;
   将I_Currency公开为货币;
   将I_Country暴露为国家;
 }
 

由此,我可以创建具有相同名称的服务绑定,然后可以通过浏览器中的OData链接获取所需的数据。 但是,我需要先登录才能获取数据。 我正在使用的链接如下所示:

https:// 。 abap-web.us10。 hana.ondemand.com/sap/opu/odata/sap/Z5API_TRAVEL/旅行

我的下一步是我希望能够使用OData API和SAP Cloud SDK。 我能够通过SAP Cloud SDK CLI从根OData链接的metdata生成OData客户端,并且能够为"旅行"模块创建服务:

从'@ nestjs/common'导入{可注入};
 从" odata-client/cds-z-5-ui-c-tr​​avel-m-service"导入{Travel};

 @Injectable()
 出口舱TravelService {
     getAllTravels(){
         返回Travel.requestBuilder()
             。得到所有()
             。选择(
                 Travel.CUSTOMER_ID,
                 Travel.DESCRIPTION,
                 旅行。END_DATE)
             。执行({
                 网址:" https:// .abap.us10.hana.ondemand.com/sap/opu/odata/sap/Z5API_TRAVEL/Travel",
                 用户名:" SUSER",
                 密码:" NOTMYPASSWORD"
             })
     }
 }
 

然后旅行控制器看起来像:

 import'@ nestjs/common'中的{Controller,Get,HttpException};
 从" ./travel.service"导入{TravelService};
 从" odata-client/cds-z-5-ui-c-tr​​avel-m-service"导入{Travel};

 @Controller('旅行')
 导出类TravelController {
     构造函数
         私人只读travelService:TravelService
     ){}

     @得到()
     getTravels():Promise <旅行[]> {
         返回this.travelService
             .getAllTravels()
             .catch(错误=> {
                 抛出新的HttpException(
                     `旅行失败-$ {error.message}`,500);
             })
     }
 }
 

因此,然后将这些文件导入travel模块中,然后将travel模块导入主app模块中。 因此,一旦设置了这些文件,便启动了Node.js服务器,并通过Postman调用了http://localhost:3000/travels,并收到了以下消息:

 {
     " statusCode":500,
     " message":"无法旅行-无法读取未定义的属性"结果""
 }
 

然后,当然,我检查了我先前使用基本授权在Postman内部共享的基本链接,并得到了响应:

 

 <头>
     
     <脚本>
         document.cookie =" fragmentAfterLogin =" + encodeURIComponent(location.hash)+"; path =/"; document.cookie =" locationAfterLogin =" + encodeURIComponent(location.href.split('#')[0] .split(  location.host)[1])+"; path =/"; document.cookie =" signature = ; path =/"; location =" https://abap-public-trial-us10.authentication.us10  .hana.ondemand.com/oauth/authorize?response_type = code&client_id = <某些其他生成的响应>%2Flogin%2Fcallback"
     
 

 
 

现在,我了解了S/4Hana Cloud,您可以为系统授权某些用户,但是我不确定如何为ABAP Cloud实例执行此操作。 我目前正在使用试用帐户,该帐户可以提供有关我可以做什么或不能做什么的任何信息。 那么是否会有一个很好的资源或指导来解决这个错误?

非常感谢!

付费偷看设置
发送
4条回答
天桥码农
1楼 · 2020-08-22 14:34.采纳回答

嗨,凯尔,

您必须遵循本教程中的步骤

https://developers.sap.com/tutorials/ abap-environment-a4c-inbound-communication.html

最诚挚的问候,

Andre

宇峰Kouji
2楼-- · 2020-08-22 14:56

您好Kyle,我是SAP Cloud SDK for JavaScript的开发人员之一。 从SDK的角度来看,我看不到任何明显的错误。 从您在此处发布的服务器响应来看,我同意身份验证机制似乎是这里的问题。 看起来ABAP系统希望这里的用户不是机器的用户(因此,带有OAuth重定向链接的Cookie)。 不幸的是,我不知道该找谁解决这个问题,但是我将继续关注这个问题。 如果没有任何反应,请随时ping我,我将看看是否可以找到其他人将您重定向到。

Nir深蓝
3楼-- · 2020-08-22 14:35

谢谢@dhem,

我还应该提到网址:

" https:// .abap-web.us10.hana.ondemand.com/sap/opu/odata/sap/Z5API_TRAVEL/Travel" 

当我尝试通过浏览器访问它并且在链接中使用了abap-web的" -web"部分时,便得到了不同的授权方法。 带有" -web"的用户有一个Web GUI可以输入用户凭据,而没有,则弹出一个标准浏览器要求授权,但是,我的普通凭据不起作用。

我只是想知道我是否使用正确的URL访问OData。 无论如何,如果有任何发现,我会通知您。

樱桃小丸子0093
4楼-- · 2020-08-22 14:34

谢谢安德烈,

这似乎很有希望,但是,我在步骤3遇到问题。没有用于设置IB通信的图块。 这是我的试用帐户的FLP外观:

有什么办法可以显示出来吗?

谢谢

凯尔

编辑:我刚刚意识到我的帐户需要许可证才能继续。 非常感谢您的回答。

一周热门 更多>