SAP Cloud SDK-获取和转换过滤器表达式不起作用

2020-08-14 18:04发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我们已经在Cloud...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我们已经在Cloud Foundry中使用CAP创建了基于CDS的OData服务,以调用由SAP ECC公开的OData,正如我们在此博客中所读到的:

https ://blogs.sap.com/2019/02/28/sap-s4hana-cloud-sdk-version-2.12.0-is-available/

我们应该能够将从 QueryRequest 对象检索到的过滤器表达式转换为可以在 filter 方法中使用的过滤器表达式 ODataQueryBuilder 对象的

我们已经在pom.xml文件中修改了以下依赖项版本:

com.sap.cloud.s4hana

sdk-modules-bom

2.18.0

导入

pom

因此,当我们启动服务并尝试调用具有设置为show的filter属性的GET方法时:

/odata/v2/Search1LService/Mmain?$ filter =('Maufnr'eq'0001')

由于过滤器格式,我们得到了一个例外。

显然, queryRequest.getQueryExpression() 提供了正确的过滤器数据,但是当我们尝试将该对象转换为FilterExpression对象时,出现了问题。

您会看到String值为:" eq%27Maufnr%27"而不是"%27Maufnr%27%20eq%20%270001%27"。

FilterExpression对象(fe2)显然存在相同的问题,因此执行调用以异常结束,因为我们传递给后端系统的OData过滤器的格式错误。

作者在博客中将 FilterExpressionConverter.queryRequest.getQueryExpression() 对象传递给 UncheckedFilterExpression 构造函数 设置过滤器输入参数:

myService.getAllSomething()

.filter(new UncheckedFilterExpression <>(

FilterExpressionConverter.convertTo(

queryRequest.getQueryExpression())))

.execute();

在我们的课程中,此代码导致语法错误,因为过滤器不接受此 UncheckedFilterExpression 对象作为输入:

类型为ODataQueryBuilder的方法filter(FilterExpression)不适用于自变量(新的UncheckedFilterExpression <>(FilterExpressionConverter.convertTo(queryRequest.getQueryExpression()))) Java调试

有人可以帮助解决这个问题吗? 获取表达式是否有问题,或者Cloud SDK中存在转换表达式的错误?

最好的问候

(133.4 kB)
4条回答
三十六小时_GS
2020-08-14 18:31

嗨,马文,

在您描述的第一个用例中,能否请您添加收到的异常的堆栈跟踪? 我的假设是转义应该在调用链的后面进行,而不是在toString()方法中进行。

关于第二个用例:UncheckedFilterExpression旨在与" SAP Cloud SDK"的OData VDM一起使用,该数据库构建于例如 您正在使用的"用于服务开发的SAP Cloud Platform SDK"的ODataQueryBuilder。 这意味着您不能在ODataQueryBuilder中使用我们的UncheckedFilterExpression(并且不需要)。

使用我们的OData VDM,您可以将所有这些String属性隐藏到类型安全的外观中,该外观可以为您完成所有繁重的工作。 有关更多详细信息,请参见此处此处

问候

克里斯

一周热门 更多>