在SAP CPI中更改为第一行后读取平面文件的第一行并返回整个文件

2020-08-22 05:26发布

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

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


专家您好,

问题陈述。

CPI接收平面文件(制表符分隔),该文件包含列名和列名的数据记录。 收到平面文件后,我想读取和更改第一行中的列名[space('')替换为下划线(_)],而不是读取整个文件。 更改列名后,请返回整个文件,其中包含列名的更改。

示例输入文件:

否<标签> 员工编号 <标签>客户<标签> 案例编号

1 12345 ABC 2345

2 3231 34532

注意:这些文件是15 MB-50MB之间的大文件。

所需的输出:

否<标签> 雇员编号 <标签>客户<标签> 案件编号

1 12345 ABC 2345

2 3231 34532

我当前正在使用的Groovy脚本。 该脚本仅将输出作为列名提供,而不提供包括数据记录在内的整个平面文件。

*********************************

导入com.sap.gateway.ip.core.customdev.util.Message;

import java.util.HashMap;

def消息processData(消息消息)

{def reader = message.getBody(java.io.Reader)

def数组= []

reader.find {行->行== 1

字符串newline = line.replaceAll('','_')

array.add(newline)

}

def messageLog = messageLogFactory.getMessageLog(message); messageLog.addAttachmentAsString(" CSV_file",array.toListString()," text/plain");

message.setBody(array.toListString());

返回消息}

****************************************

请提供解决方案,以返回整个平面文件以及增强的列名作为输出。

此致

Hemant

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

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


专家您好,

问题陈述。

CPI接收平面文件(制表符分隔),该文件包含列名和列名的数据记录。 收到平面文件后,我想读取和更改第一行中的列名[space('')替换为下划线(_)],而不是读取整个文件。 更改列名后,请返回整个文件,其中包含列名的更改。

示例输入文件:

否<标签> 员工编号 <标签>客户<标签> 案例编号

1 12345 ABC 2345

2 3231 34532

注意:这些文件是15 MB-50MB之间的大文件。

所需的输出:

否<标签> 雇员编号 <标签>客户<标签> 案件编号

1 12345 ABC 2345

2 3231 34532

我当前正在使用的Groovy脚本。 该脚本仅将输出作为列名提供,而不提供包括数据记录在内的整个平面文件。

*********************************

导入com.sap.gateway.ip.core.customdev.util.Message;

import java.util.HashMap;

def消息processData(消息消息)

{def reader = message.getBody(java.io.Reader)

def数组= []

reader.find {行->行== 1

字符串newline = line.replaceAll('','_')

array.add(newline)

}

def messageLog = messageLogFactory.getMessageLog(message); messageLog.addAttachmentAsString(" CSV_file",array.toListString()," text/plain");

message.setBody(array.toListString());

返回消息}

****************************************

请提供解决方案,以返回整个平面文件以及增强的列名作为输出。

此致

Hemant

付费偷看设置
发送
2条回答
粗暴的香蕉
1楼 · 2020-08-22 06:20.采纳回答

您好 Hemant Malvi

您可以使用阅读器的transformLine功能,然后仅过滤第一行。 查看示例代码后,它应该像这样工作:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 def消息processData(消息消息)
 {
     def reader = message.getBody(java.io.Reader)
     def writer =新的StringWriter()
     def首先= true
     reader.transformLine(writer){行->
         如果(第一){
             line = line.replace(""," _")
 第一=错误
         }
         线
     }
     def结果= writer.toString()
     def messageLog = messageLogFactory.getMessageLog(message)
     messageLog.addAttachmentAsString(" CSV_file",result," text/plain")
     message.setBody(result);
     返回讯息
 } 

p.s .:在 answers.sap.com 上的文本编辑器中,有一个名为"代码"的小按钮。 通过使用它,您可以轻松地在问题中设置源代码的格式。

大简至美
2楼-- · 2020-08-22 06:11

您好,Hemant,

是的,这也会产生一些影响。 与在计算机上运行的所有内容一样:更多的资源=(大多数情况下)更高的处理速度。 因此,如果运行生产租户,则过程可能会加快。

一周热门 更多>