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

2020-08-14 18:04发布

         点击此处--->   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)

         点击此处--->   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条回答
奄奄一息的小鱼
1楼 · 2020-08-14 18:26.采纳回答

嗨克里斯托夫,

我们找到了解决问题的方法。

->过滤器表达式错误

问题可以解决。

三十六小时_GS
2楼-- · 2020-08-14 18:31

嗨,马文,

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

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

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

问候

克里斯

浮生未央
3楼-- · 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

落灬小鱼
4楼-- · 2020-08-14 18:30

嗨Marvin,

您是如何解决的?

谢谢

约翰内斯

一周热门 更多>