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条回答
浮生未央
2020-08-14 18:28

嗨克里斯托夫,

感谢您的帮助。 您说得对,第二个用例只是尝试使其工作。 真正的问题是,我们使用过滤器调用第一个OData服务:

$ filter =('Maufnr'eq'0001')

然后,我们要提取此过滤器值Maufnr eq 0001,因此我们使用queryRequest.getQueryExpression()来返回具有正确值的对象。

下一步,我们尝试使用过滤器值调用下一个OData服务,这里我们需要一个FilterExpression对象,但需要使用FilterExpressionConverter.convertTo(queryRequest.getQueryExpression())方法

-仅返回" eq Maufnr",而不是" Maufnr eq 0001"之类的

这是正确的吗?看起来好像只有键,但是值0001在哪里?

Java应用程序没有堆栈跟踪->因为后端服务仅抛出一个异常,例如->错误的过滤器表达式

谢谢

Marvin

一周热门 更多>