使用Java映射编辑文件内容

2020-08-27 17:48发布

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

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


专家您好,

我们正在研究从文件到SFTP的方案,该方案处理的是带有随机数据的平面文件。 我们不使用FCC,这是一个传递方案。 在文件发送到目标之前,我们正在使用Java映射来更改文件名。

但是,我们还有另一个要求,我们需要用另一个字符替换文件中特定位置(例如,文件开头的第13个位置)处的字符。 文件的其余内容将保持相同。是否有可能在Java映射中进行处理? 如果是这样,您能帮我提供代码吗? 我们正在使用SAP PO 7.4 SP17。

我不太熟悉Java代码并在论坛上进行了搜索,但是找不到任何合适的帖子。 下面给出的是我当前正在使用的代码:

公共类fileName扩展AbstractTransformation {public void transform(TransformationInput TransformationInput,TransformationOutput TransformationOutput)引发StreamTransformationException {

尝试{

InputStream inputstream = TransformationInput.getInputPayload()。getInputStream();

OutputStream outputstream = TransformationOutput.getOutputPayload()。getOutputStream();

Map mapParameters =(Map)TransformationInput.getInputHeader()。getAll();

String NewFileName ="";

mapParameters.put(DynamicConfigurationKey.create(" http://sap.com/ xi/XI/Dynamic ",StreamTransformationConstants.DYNAMIC_CONFIGURATION),"");

DynamicConfiguration conf =(DynamicConfiguration)mapParameters.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);

DynamicConfigurationKey键= DynamicConfigurationKey.create(" http://sap.com/xi/XI/System/File "," FileName"); NewFileName = conf.get(key)+" .txt";

conf.put(key,NewFileName);

byte [] b =新的byte [inputstream.available()];

inputstream.read(b);

outputstream.write(b);

} catch(异常异常)

{getTrace()。addDebugMessage(exception.getMessage());

抛出新的StreamTransformationException(exception.toString());

}

}}

提前谢谢!

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

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


专家您好,

我们正在研究从文件到SFTP的方案,该方案处理的是带有随机数据的平面文件。 我们不使用FCC,这是一个传递方案。 在文件发送到目标之前,我们正在使用Java映射来更改文件名。

但是,我们还有另一个要求,我们需要用另一个字符替换文件中特定位置(例如,文件开头的第13个位置)处的字符。 文件的其余内容将保持相同。是否有可能在Java映射中进行处理? 如果是这样,您能帮我提供代码吗? 我们正在使用SAP PO 7.4 SP17。

我不太熟悉Java代码并在论坛上进行了搜索,但是找不到任何合适的帖子。 下面给出的是我当前正在使用的代码:

公共类fileName扩展AbstractTransformation {public void transform(TransformationInput TransformationInput,TransformationOutput TransformationOutput)引发StreamTransformationException {

尝试{

InputStream inputstream = TransformationInput.getInputPayload()。getInputStream();

OutputStream outputstream = TransformationOutput.getOutputPayload()。getOutputStream();

Map mapParameters =(Map)TransformationInput.getInputHeader()。getAll();

String NewFileName ="";

mapParameters.put(DynamicConfigurationKey.create(" http://sap.com/ xi/XI/Dynamic ",StreamTransformationConstants.DYNAMIC_CONFIGURATION),"");

DynamicConfiguration conf =(DynamicConfiguration)mapParameters.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);

DynamicConfigurationKey键= DynamicConfigurationKey.create(" http://sap.com/xi/XI/System/File "," FileName"); NewFileName = conf.get(key)+" .txt";

conf.put(key,NewFileName);

byte [] b =新的byte [inputstream.available()];

inputstream.read(b);

outputstream.write(b);

} catch(异常异常)

{getTrace()。addDebugMessage(exception.getMessage());

抛出新的StreamTransformationException(exception.toString());

}

}}

提前谢谢!

付费偷看设置
发送
4条回答
葫芦娃快救爷爷
1楼 · 2020-08-27 18:33.采纳回答

Hello Faisal,
在读取输入流之后,可以将以下代码片段添加到Java映射中。 您需要将输入流转换为String,然后在特定位置读取该字符的String内容-

在Java类中添加以下方法-

 public String convertStreamToString(  InputStream in)
       {
         StringBuffer sb = new StringBuffer();
         尝试
         {
         InputStreamReader isr =新的InputStreamReader(in);
         读者读者=
         新的BufferedReader(isr);
         诠释
         while(((ch = in.read())> -1){
             sb.append((char)ch);}
             reader.close();
         }
         catch(Exception异常)
         {
             exception.toString();
         }
         返回sb.toString();
         }


 

在您的transform方法中调用上述方法-如下所示

 String content = convertStreamToString(inputstream);
        //获取索引
         int index = 13;//您可以将此作为参数传递给Java映射
        //获取将替换现有角色的角色
         char replcch ='Y'; //特别注意带有备用字符的字符
                            //或带有转义序列
        //获取要检查的字符
          char existch ='P';
//您也可以将字符作为参数传递
 如果(string.charAt(index)== existch)//检查您的字符
    {
       内容= content.substring(0,索引)
               + replcch + str.substring(索引+1);
     }
  

在此之后将此字符串作为输出流传递-

尝试
         {
         TransformationOutput.getOutputPayload()。getOutputStream()。write(content.getBytes(" UTF-8"));
         }
         catch(异常e)
          {
             e.toString();
          } 

谢谢

Sugata

Tong__Ming
2楼-- · 2020-08-27 18:32

Hello Sugata,

非常感谢您的及时回复!

尝试编辑代码时出现以下错误:

错误:无法解析类型java.lang.CharSequence。 从所需的.class文件间接引用

方法定义中发生错误:convertStreamToString行:sb.append((char)ch);

要在上面添加内容,我正在使用NWDS创建JAR文件。 当我将指针指向错误行时,建议的解决方法是配置构建路径。

有什么想法吗?

谢谢

Faisal

callcenter油条
3楼-- · 2020-08-27 18:18

Hello Faisal,

我给出了完整的代码,没有在单个源文件中更改文件名逻辑,请创建Java文件并创建 罐子-

 import java.io.BufferedReader;
 导入java.io.InputStream;
 导入java.io.InputStreamReader;
 导入java.io.Reader;
 导入java.util.Map;
 导入com.sap.aii.mapping.api.AbstractTransformation;
 导入com.sap.aii.mapping.api.DynamicConfiguration;
 导入com.sap.aii.mapping.api.DynamicConfigurationKey;
 导入com.sap.aii.mapping.api.StreamTransformationConstants;
 导入com.sap.aii.mapping.api.StreamTransformationException;
 导入com.sap.aii.mapping.api.TransformationInput;
 导入com.sap.aii.mapping.api.TransformationOutput;

 公共类fileName扩展AbstractTransformation
 {
    
 公共无效transform(TransformationInput TransformationInput,TransformationOutput TransformationOutput)引发StreamTransformationException
  {
     尝试{

         InputStream inputstream = TransformationInput.getInputPayload()。getInputStream();
         字符串内容= convertStreamToString(inputstream);
        //获取索引
         int index = 13;//您可以将此作为参数传递给Java映射
        //获取将替换现有角色的角色
         char replcch ='Y'; //特别注意带有备用字符的字符
                            //或带有转义序列
        //获取要检查的字符
          char existch ='P';
//您也可以将字符作为参数传递
 if(content.charAt(index)== existch)//检查您的角色
    {
       内容= content.substring(0,索引)
               + replcch + content.substring(index +1);
     }

     地图mapParameters =(Map)TransformationInput.getInputHeader()。getAll();

         字符串NewFileName ="";

         mapParameters.put(DynamicConfigurationKey.create(" http://sap.com/xi/XI/Dynamic",StreamTransformationConstants.DYNAMIC_CONFIGURATION),"");

         DynamicConfiguration conf =(DynamicConfiguration)mapParameters.get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);

         DynamicConfigurationKey键= DynamicConfigurationKey.create(" http://sap.com/xi/XI/System/File"," FileName");  NewFileName = conf.get(key)+" .txt";

         conf.put(key,NewFileName);

         尝试
         {
         TransformationOutput.getOutputPayload()。getOutputStream()。write(content.getBytes(" UTF-8"));
         }
         catch(异常e)
          {
             e.toString();
          }

         捕获(异常异常)

         {getTrace()。addDebugMessage(exception.getMessage());

         抛出新的StreamTransformationException(exception.toString());

         }
    
 }

 公共字符串convertStreamToString(InputStream in)
 {
   StringBuffer sb = new StringBuffer();
   尝试
   {
   InputStreamReader isr =新的InputStreamReader(in);
   读者读者=
   新的BufferedReader(isr);
   诠释
   while(((ch = in.read())> -1){
       sb.append((char)ch);}
       reader.close();
   }
   catch(Exception异常)
   {
       exception.toString();
   }
   返回sb.toString();
   }

 } 
绿领巾童鞋
4楼-- · 2020-08-27 18:35

Hug Sugata,

非常感谢您的帮助!

我认为这是我正在使用的NWDS(也许是JVM版本..?)存在的问题,因此出现错误。

我尝试编写您在消息映射("功能"选项卡->"属性和方法")中提供的具有伪数据/消息类型的代码,并在"操作映射"中使用了此消息映射。 运行正常。

再次感谢您的帮助。 您节省了一天! :)

此致

失败

一周热门 更多>