根据SAP CPI中的记录数来自定义序列号

2020-08-23 03:14发布

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

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


亲爱的

我有csv格式的最终​​有效负载,其中包含一些员工记录。 每个记录都有其自己的序列号(目前为静态1)。 我有2个主要的价值可以使用:

-顺序字段(为每个记录添加)
-personal_id(每个员工均唯一)

由于每个员工可以拥有多个记录,因此需要为每个ID具有相应的序号。 换句话说,如果ID为" 123"的员工有5条记录,则序列值应为1,2,3,4,5,而不是1,1,1,1,1。

这是输入有效载荷:

序列; ID;
1; 123456;
1; 232323;
1; 232323;
1; 232323;
1; 111111;
1; 111111; < br> 1; 222222;
1; 222222;
1; 222222;
1; 222222;
1; 222222;
1; 222222;
1; 222222;

这是预期的有效载荷

序列; ID;
1; 123456;
1; 232323;
2; 232323; <3> 232323;
1; 111111;
2; 111111; < br> 1; 222222;
2; 222222;
3; 222222; <4> 222222; <5> 222222; <6> 222222; <7> 222222;

最终的有效负载记录按personal_Id排序,因此应该更易于管理。

是否有办法在消息映射甚至常规脚本中执行此操作?

请帮助我

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

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


亲爱的

我有csv格式的最终​​有效负载,其中包含一些员工记录。 每个记录都有其自己的序列号(目前为静态1)。 我有2个主要的价值可以使用:

-顺序字段(为每个记录添加)
-personal_id(每个员工均唯一)

由于每个员工可以拥有多个记录,因此需要为每个ID具有相应的序号。 换句话说,如果ID为" 123"的员工有5条记录,则序列值应为1,2,3,4,5,而不是1,1,1,1,1。

这是输入有效载荷:

序列; ID;
1; 123456;
1; 232323;
1; 232323;
1; 232323;
1; 111111;
1; 111111; < br> 1; 222222;
1; 222222;
1; 222222;
1; 222222;
1; 222222;
1; 222222;
1; 222222;

这是预期的有效载荷

序列; ID;
1; 123456;
1; 232323;
2; 232323; <3> 232323;
1; 111111;
2; 111111; < br> 1; 222222;
2; 222222;
3; 222222; <4> 222222; <5> 222222; <6> 222222; <7> 222222;

最终的有效负载记录按personal_Id排序,因此应该更易于管理。

是否有办法在消息映射甚至常规脚本中执行此操作?

请帮助我

付费偷看设置
发送
3条回答
zhangjiyang1323
1楼 · 2020-08-23 03:55.采纳回答

嗨Pawel

在创建CSV有效负载后运行以下Groovy:

 import com.sap.gateway.ip.core.customdev.util.Message

 def消息processData(消息消息){

     def有效负载= message.getBody(java.lang.String)
     def prevId =''
     def序列= 1
     def sb =新的StringBuilder()

     payload.eachLine {行->
         def值= line.split(';')
         if(values [1]!= prevId){
            //新的个人ID
             顺序= 1
             prevId =值[1]
         }其他{
            //同一个人ID的另一行
             顺序+ = 1
         }
         values [0] =序列
         sb.append(values.join(';'))。append(System.lineSeparator())
     }

     message.setBody(sb.toString())
     返回讯息

 } 

它基本上循环遍历各行,检查每一个个人ID是否与前一个ID匹配。 如果是这样,它将序列号增加一。 如果没有,则将序列号重置为1。

(要使其正常工作,CSV行必须按个人ID分组,因此是我的问题。)

让 我知道它是如何工作的。

关于

Morten

clasier
2楼-- · 2020-08-23 04:18

嗨帕维尔

您的CSV行按 个人ID,如您的示例有效载荷中一样?

问候,

Morten

软件心理学工程师
3楼-- · 2020-08-23 04:16

好主意:)

祝你一切顺利!

亲切的问候

毛巾

一周热门 更多>