如何在Azure数据工厂(ADF)中对接带自定义参数的SAP CDS OData数据源
解决方案
1 路径选择重复问题处理
SAP CDS暴露OData服务时,会默认生成两类暴露对象:
- 不带
Set后缀的ZC_XXX_TU_SR_Activity:带参数的操作绑定实体,是你需要选择的对象 - 带
Set后缀的ZC_XXX_TU_SR_ActivitySet:无参数的实体集合,用于无参数的全量查询场景
路径选择环节直接选不带Set后缀的实体即可,不需要选择带Set后缀的对象。
2 OData接口参数正确配置步骤
你之前的配置错误核心是把OData路径参数当成了查询参数(?开头的参数),正确配置逻辑如下:
- OData连接的服务URL仅填写根路径:
http://XXXXXXX/ZC_XXX_TU_SR_ACTIVITY_CDS/,不要拼接后续实体、参数内容 - 跳过数据集的自动路径选择,找到「相对URL」配置项,直接填写完整的实体+参数路径:
ZC_XXX_TU_SR_Activity(p_warehouse='E065',p_from=datetimeoffset'2021-06-01T00:01:01',p_to=datetimeoffset'2021-08-11T23:01:01')/Set
注意:不要在路径前加
?,该部分是OData请求路径的组成部分,不属于查询参数,不需要填写到「查询选项」配置框中。
如果需要动态传入参数,可先在数据集定义p_warehouse、p_from、p_to三个参数,再将相对URL设置为动态表达式:
@concat('ZC_XXX_TU_SR_Activity(p_warehouse=''',dataset().p_warehouse,''',p_from=datetimeoffset''',dataset().p_from,''',p_to=datetimeoffset''',dataset().p_to,''')/Set')
3 SY/530报错排查方案
报错SY/530是SAP ABAP端的运行时异常,可按以下顺序排查:
- 检查参数值合法性:确认
p_warehouse值在SAP系统中真实存在,时间范围符合CDS视图的校验逻辑,比如时间跨度不能超过90天等前置限制 - 检查参数类型匹配:如果SAP CDS的时间参数定义为
datetime而非datetimeoffset,去掉参数中的offset标识即可 - 检查权限:确认OData认证账号有该CDS视图的访问权限,以及参数对应仓库数据的查询权限
- 抓包确认请求:可让SAP开发人员在网关层抓取实际收到的请求URL,确认ADF是否对参数做了额外转义,比如单引号被错误编码导致SAP端无法识别
内容的提问来源于stack exchange,提问作者Cobby Christiano
相关产品推荐
相关产品推荐

