在SAP系统中,当你通过OData服务暴露带有参数的CDS视图时,可以通过几种方式传递参数。这里主要介绍如何使用URL查询选项(如$filter
)和直接在URL路径中指定参数来传递参数。
使用 $filter
传递参数
对于大多数情况,特别是当你想根据某些条件过滤数据时,可以使用 OData 的 $filter
查询选项来传递参数。例如,假设你有一个名为 Z_Example_CDS_View_With_Parameters
的 CDS 视图,并且它定义了一个参数 p_ebeln
,你可以这样构建请求:
/sap/opu/odata/sap/Z_Example_CDS_View_With_Parameters?$filter=EBELN eq 'your_purchase_document_number'
在这个例子中,EBELN
是你在CDS视图中选择列表中的字段名,而 'your_purchase_document_number'
是你想过滤的具体值。
直接在 URL 路径中传递参数
如果CDS视图被设计为接受路径参数(较少见的情况),你可以直接在URL路径中传递参数。然而,在大多数情况下,CDS视图的参数是通过查询选项传递的,而不是作为路径的一部分。
要使用参数 调用正确的实体集,请执行以下操作:
- 首先获取元数据,<URL>\YY1_<ODATA-SERVICE>\$metadata
- 在元数据中,找到您的 EntitySet 并检查其实体类型,如下所示:
<EntitySet Name="YY1_<NAME>" EntityType="YY1_<ODATASERVICE>.YY1_<NAME>Parameters" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/> - 然后找到 <EntityType Name="YY1_<NAME>Parameters" ,如下所示
<EntityType Name="YY1_<NAME>Parameters" sap:semantic="parameters" sap:content-version="1">
<键值>
<PropertyRef Name="P_1"/>
<PropertyRef Name="P_2"/>
</代码> - 在参数 EntityType 下,找到以下内容:
<NavigationProperty Name="<RESULTSNAME>"。。。/>
</EntityType> - 现在,用户可以按 https://<URL>/sap/opu/odata/sap/YY1_<ODATA-SERVICE>/YY1_<NAME>(P_1='<WHATEVER-VALUE>',P_2='<WHATEVER-VALUE>')/<RESULTNAME>
- <RESULTNAME>:无论名称来自步骤 4
- YY1_<NAME> 是步骤 2 中的 EntitySet 名称
- P_1、P_2:步骤 3 中的参数名称,如果参数列表有 X 个参数,则需要列出它们
- 注意:如果结果很大,我们可以添加 $top=1 以进行测试,例如:
https://<URL>/sap/opu/odata/sap/YY1_<ODATA-SERVICE>/YY1_<NAME>(P_1='<WHATEVER-VALUE>',P_2='<WHATEVER-VALUE>')/<RESULTNAME>?$top=1参考文献:https://me.sap.com/notes/2600276/1