点击此处---> 群内免费提供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文件中修改了以下依赖项版本:
因此,当我们启动服务并尝试调用具有设置为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)
嗨克里斯托夫,
我们找到了解决问题的方法。
->过滤器表达式错误
问题可以解决。
嗨,马文,
在您描述的第一个用例中,能否请您添加收到的异常的堆栈跟踪? 我的假设是转义应该在调用链的后面进行,而不是在toString()方法中进行。
关于第二个用例:UncheckedFilterExpression旨在与" SAP Cloud SDK"的OData VDM一起使用,该数据库构建于例如 您正在使用的"用于服务开发的SAP Cloud Platform SDK"的ODataQueryBuilder。 这意味着您不能在ODataQueryBuilder中使用我们的UncheckedFilterExpression(并且不需要)。
使用我们的OData VDM,您可以将所有这些String属性隐藏到类型安全的外观中,该外观可以为您完成所有繁重的工作。 有关更多详细信息,请参见此处和此处。
问候
克里斯
嗨克里斯托夫,
感谢您的帮助。 您说得对,第二个用例只是尝试使其工作。 真正的问题是,我们使用过滤器调用第一个OData服务:
$ filter =('Maufnr'eq'0001')
然后,我们要提取此过滤器值Maufnr eq 0001,因此我们使用queryRequest.getQueryExpression()来返回具有正确值的对象。
下一步,我们尝试使用过滤器值调用下一个OData服务,这里我们需要一个FilterExpression对象,但需要使用FilterExpressionConverter.convertTo(queryRequest.getQueryExpression())方法
-仅返回" eq Maufnr",而不是" Maufnr eq 0001"之类的
这是正确的吗?看起来好像只有键,但是值0001在哪里?
Java应用程序没有堆栈跟踪->因为后端服务仅抛出一个异常,例如->错误的过滤器表达式
谢谢
Marvin
嗨Marvin,
您是如何解决的?
谢谢
约翰内斯
一周热门 更多>