SAP Cloud SDK for JavaScript:自定义查询参数

2020-08-21 03:43发布

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

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


大家好,
和往常一样,在我逐步浏览SDK的过程中又提出了另一个问题。

我正在使用SDK来使用SuccessFactors OData API,并且运行良好。 它是一个非常强大的工具,利用它可以完成许多令人惊奇的事情。
但是,我遇到了一个非常特殊的情况,目前SDK尚不支持(我必须说)。

在SuccessFactors中,我们可以查询有效日期的实体,但是标准行为是仅返回实际记录(=到今天为止有效的记录),除非URL中存在两个自定义查询参数:

 .../EmpJob?$ select = startDate,companyNav/externalCode&$ format = json&fromDate = 2000-01-01&toDate = 9999-12-31 

fromDate toDate 这两个参数指示API实际获取属于指定时间间隔的所有记录。

从SDK fluent API中,我们可以通过以下方式构造所构建查询的完整URL:

 EmpJob.requestBuilder()。getAll()。select(...)。filter(...)。build({})。url()

因此,可以通过串联将自定义查询参数轻松添加到其中。

问题是:我该如何使用新定义的URL拍摄请求? 还是更好。。。有没有办法在构建请求时注入自定义查询参数?

非常感谢

罗伯托。

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

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


大家好,
和往常一样,在我逐步浏览SDK的过程中又提出了另一个问题。

我正在使用SDK来使用SuccessFactors OData API,并且运行良好。 它是一个非常强大的工具,利用它可以完成许多令人惊奇的事情。
但是,我遇到了一个非常特殊的情况,目前SDK尚不支持(我必须说)。

在SuccessFactors中,我们可以查询有效日期的实体,但是标准行为是仅返回实际记录(=到今天为止有效的记录),除非URL中存在两个自定义查询参数:

 .../EmpJob?$ select = startDate,companyNav/externalCode&$ format = json&fromDate = 2000-01-01&toDate = 9999-12-31 

fromDate toDate 这两个参数指示API实际获取属于指定时间间隔的所有记录。

从SDK fluent API中,我们可以通过以下方式构造所构建查询的完整URL:

 EmpJob.requestBuilder()。getAll()。select(...)。filter(...)。build({})。url()

因此,可以通过串联将自定义查询参数轻松添加到其中。

问题是:我该如何使用新定义的URL拍摄请求? 还是更好。。。有没有办法在构建请求时注入自定义查询参数?

非常感谢

罗伯托。

付费偷看设置
发送
5条回答
微wx笑
1楼 · 2020-08-21 04:20.采纳回答

你好罗伯托,

我实际上已经在处理此问题,您可以在此处找到相应的请求请求: https://github.com/SAP/cloud-sdk/pull/74

明天我们应该可以合并。 对于您的解决方法,我不确定可能是什么问题,也许您可​​以尝试

deserializeEntity(d,EmpJob);

如果这不起作用,那么了解数据的外观可能会很有趣?

更新:

此功能在1.19.0版中可用,请使用:

 EmpJob.requestBuilder()。withCustomQueryParameters({param:value})。
天桥码农
2楼-- · 2020-08-21 04:28

升级到1.19.0后,一切正常。

对于SuccessFactors API使用者,以下是从系统中获取历史记录的方法(这是使用实体EmpPayCompRecurring的示例):

 EmpPayCompRecurring.requestBuilder()。getAll()。select(
       EmpPayCompRecurring.PAY_COMPONENT,
       EmpPayCompRecurring.PAYCOMPVALUE,
       EmpPayCompRecurring。START_DATE,
       EmpPayCompRecurring.FREQUENCY_NAV.select(
         FoFrequency.ANNUALIZATION_FACTOR
       )
     ).filter(EmpPayCompRecurring.USER_ID.equals(userId))。withCustomQueryParameters({fromDate:'1970-01-01',toDate:'9999-12-31'})
     .execute({destinationName:this.configService.get ('ACTIVE_DESTINATION')}); 

为SDK团队助一臂之力! ;)

派大星 ヾ
3楼-- · 2020-08-21 04:32

你好罗伯托,

听起来像是明智的选择。 我们只是计划进行此工作,因此我们可能会很快发布此功能。 这对您来说很关键吗?与此同时,您是否仍然需要解决方法?

此致

Marika

路亽曱_Ryan
4楼-- · 2020-08-21 04:15

亲爱的 Marika Marszalkowski
I 做一个快速而肮脏的测试。 似乎有些东西起作用,但后来我被卡住了。

我首先从请求构建器获取完整的URL:

常量odataRequest:ODataRequest > =
       等待EmpPayCompRecurring.requestBuilder()。getAll()。select(
         EmpPayCompRecurring.PAY_COMPONENT,
         EmpPayCompRecurring.PAYCOMPVALUE,
         EmpPayCompRecurring。START_DATE,
         EmpPayCompRecurring.FREQUENCY_NAV.select(
           FoFrequency.ANNUALIZATION_FACTOR
         )
       ).filter(EmpPayCompRecurring.USER_ID.equals(userId))
        .build({destinationName:this.configService.get ('ACTIVE_DESTINATION')}); 

从请求中,URL和标头可以通过以下方式轻松获取:

 const fullUrl =`$ {odataRequest.url()}&fromDate = 1970-01-01&toDate = 9999-12-31`;
     const headers = await odataRequest.headers(); 

Axios请求:

 const odataResult:axios.AxiosResponse  =等待axios.default.get(fullUrl,{
        方法:odataRequest.config.method,
        标头:标头
     }); 

我能够得到结果,响应就在那里。
但是现在我陷入了对实体反序列化的困扰……我尝试使用:

 deserializeEntity(d,EmpJob.requestBuilder()._ entityConstructor);
 

但是它失败了:

错误无法读取未定义的属性'_allFields'


我相信我做错了:)

希望你能指出我的方向!

谢谢,
罗伯托。

亦是此间程序员
5楼-- · 2020-08-21 04:22

你好玛丽卡,
谢谢你的回答。 我应该在GitHub上打开功能请求吗?
暂时有一个解决方法会很好,这将是我正在处理的应用程序的最后一部分:)

与此同时,我试图直接使用axios执行请求,让您知道它是否有效。

谢谢!

一周热门 更多>