点击此处---> 群内免费提供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-travel-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-travel-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"