SAP Java SuccessFactors 实体上的 Cloud SDK 计数查询不起作用

SAP Java Cloud SDK count query on SuccessFactors entity is not working

SuccessFactors 实体上的计数查询不起作用,因为它要求 $top 大于 0,但 FluentHelperCount 的 count() 方法用 0 覆盖 $top。因此 SuccessFactors 拒绝调用并返回 400 错误。

这是我的代码(抛出异常):

long count = new UserFluentHelper(QueryUtils.getSFServicePath()).top(1).select(User.USER_ID).count()
            .execute(QueryUtils.getSFDestination());

使用 Postman 执行查询,URL 由 count() 方法生成

构造查询时如有错误请指出

谢谢

首先,您能否详细说明一下您的 OData 查询的语义?您同时使用 $select$count。参考 $count 上的 OData spec 它 returns 一个普通数字。我不明白你 select 实体字段的意图是基于什么。

假设您只想对实体进行计数,忽略显示的查询中的额外 $select,这里是 SAP Cloud SDK 中可用的替代代码片段。请注意,此 API 是实验性的。

final HttpDestination httpDestination = DestinationAccessor.getDestination("my-destination").asHttp();

final ODataRequestCount requestCount = new ODataRequestCount("/odata/v2", "User, "", ODataProtocol.V2);

final ODataRequestResultGeneric result =
            requestCount.execute(HttpClientAccessor.getHttpClient(httpDestination));

final Long count = result.as(Long.class);

如果 FluentHelperCount 得到改进,我将更新此答案。

更新:从 Cloud SDK 3.29.1 开始,支持查询 $count 端点。

您可以更改代码以使用:

long count = new UserFluentHelper(QueryUtils.getSFServicePath())
            .count()
            .executeRequest(QueryUtils.getSFDestination());

executeRequest 方法将查询 $count 端点。相比之下,现在已弃用的 execute 方法仍将执行内联计数。

有关详细信息,请查看 release notes