通过SAP Cloud SDK获取销售订单与发票(偏好OData v4端点)
SAP Cloud SDK (TypeScript) 提取销售订单与发票(OData v4)
API选择指引
优先选择SAP官方提供的OData v4标准服务:
- 销售订单:使用
API_SALES_ORDER_V4_SRV服务(对应业务对象:销售订单),支持读取、创建、修改等操作 - 发票(开票凭证):使用
API_BILLING_DOCUMENT_V4_SRV服务(对应业务对象:开票凭证),覆盖发票的读取与管理
这些服务是S/4HANA Cloud/On-Prem中针对销售单据的标准v4端点,无需自行开发自定义API。
TypeScript实现示例
前提
确保已通过SAP Cloud SDK Generator生成对应服务的客户端代码(或直接使用通用OData v4请求构建器),且目标系统配置已完成(即defaultDestination可正常连接)。
1. 读取销售订单
import { SalesOrder, SalesOrderApi } from './generated/api_sales_order_v4_srv'; import { defaultDestination } from './your-destination-config'; // 替换为你的目标配置路径 async function fetchSalesOrders(): Promise<SalesOrder[]> { try { // 构建查询:筛选特定客户、指定字段、限制条数 const salesOrders = await SalesOrderApi.requestBuilder() .getAll() .select( SalesOrder.SALES_ORDER, SalesOrder.SALES_ORDER_DATE, SalesOrder.TOTAL_NET_AMOUNT, SalesOrder.CUSTOMER ) .filter(SalesOrder.CUSTOMER.equals('10000000')) .top(10) .execute(defaultDestination); return salesOrders; } catch (error) { console.error('销售订单查询失败:', error); throw error; } } // 调用执行 fetchSalesOrders().then(orders => console.log('查询到的销售订单:', orders));
2. 读取发票(开票凭证)
import { BillingDocument, BillingDocumentApi } from './generated/api_billing_document_v4_srv'; import { defaultDestination } from './your-destination-config'; async function fetchBillingDocuments(): Promise<BillingDocument[]> { try { // 构建查询:筛选2024年之后的发票,关联销售订单字段 const billingDocs = await BillingDocumentApi.requestBuilder() .getAll() .select( BillingDocument.BILLING_DOCUMENT, BillingDocument.BILLING_DATE, BillingDocument.TOTAL_NET_AMOUNT, BillingDocument.SALES_ORDER ) .filter(BillingDocument.BILLING_DATE.greaterThan(new Date('2024-01-01'))) .execute(defaultDestination); return billingDocs; } catch (error) { console.error('发票查询失败:', error); throw error; } } // 调用执行 fetchBillingDocuments().then(docs => console.log('查询到的发票:', docs));
3. 无生成客户端时的手动请求方式
如果未生成服务客户端,可使用通用OData v4请求构建器:
import { ODataV4RequestBuilder, getRequestConfig } from '@sap-cloud-sdk/core'; import { defaultDestination } from './your-destination-config'; async function fetchSalesOrdersManual(): Promise<any[]> { const requestBuilder = new ODataV4RequestBuilder('GET', '/SalesOrder', { select: ['SalesOrder', 'SalesOrderDate', 'TotalNetAmount'], filter: "Customer eq '10000000'" }); const requestConfig = await getRequestConfig(requestBuilder, defaultDestination); const response = await fetch(requestConfig.url, { headers: requestConfig.headers }); if (!response.ok) throw new Error(`请求失败:${response.statusText}`); return response.json(); }
关键注意事项
- 服务激活:确认目标S/4HANA系统已激活对应OData v4服务(可通过系统事务码
/IWFND/MAINT_SERVICE检查) - 权限配置:确保连接系统的用户拥有销售订单和发票的读取权限(例如S/4HANA中的
SD_SALES_ORD_VIEW、SD_BILLING_VIEW角色) - 关联查询:若需关联销售订单与发票,可通过
SalesOrder字段作为关联条件,在发票查询中筛选对应订单的发票
内容的提问来源于stack exchange,提问作者Adam91Holt
相关产品推荐
相关产品推荐

