CPI:API调用以根据来自第一个API调用的最后一条记录的ID来获取第二组记录

2020-08-15 11:55发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家们, 要求:通过API调...

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

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


专家们,

要求:通过API调用获取发票,并通过调用客户API丰富客户数据,然后通过OData将其发布到ECC。

要退回的发票数限制为100条记录。 我有500多个发票,可以按时间增加。 我应该对API调用使用过滤器,以获取下一组记录,如下所示:

第一次API调用: https://XXXXX.com/v1/invoices ?limit = 100

第二个API调用: https://XXXXX.com/v1/invoices ?limit = 100 和starting_after = {来自第一个API调用的第100个发票ID}

第三个API调用: https://XXXXX.com/v1/invoices ?limit = 100 &starting_after = {第二个API调用中的第100个发票ID}

第四次API调用: https://XXXXX.com/v1/invoices ?limit = 100 ⁡&starting_after = {来自第3个API调用的第100个发票ID}

....第N次通话。

如何在CPI中实现这一目标? 任何指针都会有很大帮助。


尝试的方法:使用//has_more ='true'循环调用。 但是它一次又一次地提取相同的发票,API不支持此发票。

此致

Pavan G

3条回答
南山jay
2020-08-15 12:27 .采纳回答

通过添加一个普通的脚本以及循环过程调用,该问题已得到解决。

Groovy脚本1:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入java.time.ZonedDateTime
 导入java.time.ZoneId
 导入java.time.temporal.ChronoUnit
 def消息processData(消息消息){
     map = message.getProperties();
     def查询=" status = open&limit = 100"
     ZonedDateTime midnightToday = ZonedDateTime.now(ZoneId.of(" UTC-8"))。truncatedTo(ChronoUnit.DAYS)
 ZonedDateTime firstOfThisMonth = midnightToday.withDayOfMonth(1)
//ZonedDateTime firstOfNextMonth = firstOfThisMonth.plusMonths(1)

 ZonedDateTime firstDayOfLastMonth = firstOfThisMonth.minusMonths(1);
    //ZonedDateTime lastDayOfLastMonth = firstOfThisMonth.plusMonths(0)-1;
 long timestampLower = firstDayOfLastMonth.toEpochSecond()
 long timestampUpper = firstOfThisMonth.toEpochSecond()

//将时间戳设置为Property
   //message.setProperty(" FDPM",timestampLower);
    //message.setProperty("FDCM",timestampUpper);
     时间= map.get("时间");
     if(时间=='真')
     查询=查询+"&created [gte] =" + timestampLower +"&created [lt] =" + timestampUpper
     值= map.get(" starting_after");
     if(值!=''&&值!= null)
     查询=查询+"☆ting_after =" +值
     message.setProperty(" query",query);
        返回消息;
 } 

Groovy Script2:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.json.JsonSlurper;
 def消息processData(消息消息){
    //身体
     def body = message.getBody(java.lang.String);
     JsonSlurper slurper =新的JsonSlurper()
     def json = slurper.parseText(body)
     for(def d:json.data)
         id = d.id
     def has_more = json.has_more.toString()
    //属性
     message.setProperty(" starting_after",id);
     message.setProperty(" has_more",has_more);
     返回消息;
     } 

iFlow设计:

此致

Pavan G

一周热门 更多>