SAP Cloud SDK for JavaScript 的搭建和使用方法介绍
要创建已包含使用 SAP Cloud SDK for JavaScript 所需的所有文件和配置的应用程序,您可以使用 SDK 的命令行界面 (CLI)。 要获取 CLI,请运行以下命令:
npm install -g @sap-cloud-sdk/cli
这将在你的机器上全局安装 CLI,允许你在任何地方使用它。 现在你可以通过运行 CLI 的 init 命令来创建一个新项目:
sap-cloud-sdk init my-sdk-project
安装完毕:
生成的项目里,package.json 定义的依赖如下:
运行命令,启动初始化好的项目,能看到应用成功启动的消息:
npm run start:dev
Set up the API Server
有多种设置 API Server 的方法,您可以设置自己的 Mock Server,也可以使用 Sandbox API。
为了调用 OData 服务,需要有一个要调用的服务。您可以按照此处的说明设置模拟业务合作伙伴和自定义服务的本地模拟服务器。这个模拟服务器并不支持实际 OData 服务的所有功能,但在本地试用它就足够了。
一旦它启动并运行,您应该会在 http://localhost:3000/ 看到服务列表。
或者,也可以使用 SAP API Business Hub 的沙箱测试许多 API。要使用沙箱,您需要一个 API 密钥。转到 https://api.sap.com 并单击右上角的“登录”。如果您没有帐户,则需要先注册。登录后,点击右上角的“hi”,然后在刚刚打开的下拉菜单中点击“首选项”。在首选项页面上,单击显示 API 密钥。
Add a custom route
最初,该应用程序仅包含 index 和 hello-world 路由。 我们将为业务合作伙伴添加另一条路线,其中将列出所有可用的业务合作伙伴。
首先,在 src/ 目录中创建一个新文件 business-partner.controller.ts 并为此路由添加一个实现,如下所示:
@Controller() 装饰器将我们的类标记为控制器(即处理请求的东西),@Get('business-partners') 装饰器将 getBusinessPartners 方法标记为路径 /business-partners 上的 GET 请求的处理程序。
为了让控制器工作,我们还需要在我们的应用程序中注册它。 打开 app.module.ts,导入刚刚创建的控制器类并将其添加到控制器声明中。
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { BusinessPartnerController } from './business-partner.controller'; @Module({ imports: [], controllers: [AppController, BusinessPartnerController], providers: [AppService], }) export class AppModule {}
要使用适用于 JavaScript 的 SAP Cloud SDK 调用 OData 服务,请将此服务的虚拟数据模型 (VDM) 添加到您的依赖项。 在本文中,我们将 VDM 用于业务合作伙伴服务。 使用以下命令安装它:
npm install @sap/cloud-sdk-vdm-business-partner-service
SAP Cloud SDK for JavaScript 为 SAP S/4HANA Cloud 公开的每个 OData 服务提供包。 您可以在 SAP API 业务中心找到这些服务的列表,并在我们的文档中找到相应包的列表。
在 business-partner.controller.ts 创建一个函数 getAllBusinessPartners 并根据您的 API 服务器实现它:
在下面的代码片段中,我们假设您有一个模拟服务器在本地运行在端口 3000 上。可以在此处找到有关模拟服务器的文档。
function getAllBusinessPartners(): Promise<BusinessPartner[]> { return BusinessPartner.requestBuilder() .getAll() .execute({ url: 'http://localhost:3000' }); }
在第 2 行中,我们正在为业务合作伙伴实体创建一个请求构建器。
第 3 行表明,我们要创建一个请求以获取所有业务伙伴。
第 4 行负责执行并根据给定的目标 URL 向 URL 发送请求。
由于网络请求本质上是异步的,因此该函数的返回值是对业务伙伴列表 (Promise) 的 Promise.
import { Controller, Get, HttpException } from '@nestjs/common'; import { BusinessPartner } from '@sap/cloud-sdk-vdm-business-partner-service'; @Controller() export class BusinessPartnerController { @Get('business-partners') getBusinessPartners() { return getAllBusinessPartners() .catch(error => { throw new HttpException(`Failed to get business partners - ${error.message}`, 500); }); } } function getAllBusinessPartners(): Promise<BusinessPartner[]> { return BusinessPartner.requestBuilder() .getAll() .execute({ url: 'https://sandbox.api.sap.com/s4hanacloud', }); }
最后的运行结果:成功从 SAP API sandbox 系统取得了 Business partners 数据: