SAP PI:"文件到文件"业务情景全部压缩

2020-09-10 12:53发布

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

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


早上好,

我是初级SAP PI开发人员,面临着一个棘手的要求。

要求:文件到文件方案。

在这种情况下,我有一个发送方通道FTP,而源服务器有一个文件夹,其中包含许多文件。

目标:我想将文件夹内的所有文件压缩为单个zip文件。

我了解了使用zipall模式的模块payloadzipbean,并尝试将其应用到接收方,但是结果是我在文件夹中的每个文件都有一个zip文件。

我如何达到我的要求?

谢谢

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

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


早上好,

我是初级SAP PI开发人员,面临着一个棘手的要求。

要求:文件到文件方案。

在这种情况下,我有一个发送方通道FTP,而源服务器有一个文件夹,其中包含许多文件。

目标:我想将文件夹内的所有文件压缩为单个zip文件。

我了解了使用zipall模式的模块payloadzipbean,并尝试将其应用到接收方,但是结果是我在文件夹中的每个文件都有一个zip文件。

我如何达到我的要求?

谢谢

付费偷看设置
发送
6条回答
当学会了学习
1楼 · 2020-09-10 13:12.采纳回答

你好Claudio,

由于需要将所有文件压缩到多个文件夹中,因此可以使用以下脚本。 此脚本将压缩所有带有文件夹名称的文件,并将源文件存档在每个文件夹的"存档"文件夹中。

例如,如果您的目录结构如下-

 ZIPTEST
      树液
            存档文件夹
            abc.pdf
            def.txt
   阿巴普
          存档文件夹
          abc1.pdf
          def2.txt
   PI
           存档文件夹
           abc2.pdf
           def3.txt
 

所有文件将被压缩为一个zip文件,源文件将被移动到相应的Archive文件夹中。

Zip文件名将为ABAP.zip,PI.zip和SAP。

下面是shell脚本代码,但是仅复制到测试文件将不起作用,您必须使用此代码创建.sh文件。

#!/bin/bash
 为我在*
 做
 如果[[-d" $ i"]];
 然后
 [-d" $ i"] && zip -rj" $ i.zip"" $ i"
 #below/C/ALL/Extra/ZIPTEST/是存在所有文件夹的根目录
 p ="/img/C/ALL/Extra/ZIPTEST/$ i"
 查找$ p -type f -print0 |  xargs -0 mv -t $ p/存档
 科幻
 完成

谢谢

Sugata

吹牛啤
2楼-- · 2020-09-10 13:08

嗨,克劳迪奥,

一个有限编码的简单解决方案:

a)ICO编号1(从FTP到文件)-将文件从FTP移到非FTP文件夹(不做任何更改),您可以在其中执行OS命令

b)ICO编号2( 文件到FTP)-执行OS命令(在文件适配器中运行os命令),该命令会将所有文件压缩为单个ZIP,然后使用发件人文件适配器将其提取并移至FTP目标,

最佳

Michal Krawczyk

代楠1984
3楼-- · 2020-09-10 13:26

嗨Michal,

感谢您的解决方案。
关于接收器通道上的PayloadZipBean模块,如果我

最好的问候,
Claudio

Violet凡
4楼-- · 2020-09-10 13:23

您好,Claudio,

而且您的基础团队不介意处理或维护操作系统级别的脚本,那么您可以继续执行Michal提出的解决方案。

但是,您需要确定一件事-您将如何知道 所有文件都放在您的源目录中? 因为PI sender文件适配器在轮询模式下工作。 源目录中一旦有文件,PI就会选择它。 我宁愿在源目录中有一个触发文件来通知所有文件都完全在源中写入。 在这种情况下,您可以设计这样的场景-

Step1:将所有文件写入源目录后,请求源系统放置一个触发文件。 例如,文件名可能是-Complete.trg

步骤2:创建一个方案(ICO1),这将是第一个方案-在这种情况下,发送方PI文件适配器将查找文件Complete.trg,并且 捡起来一样。 您可以将此方案配置为要发送的文件(一些通知到电子邮件ID)。 在这种情况下,您可以创建一个适配器模块以将发送方目录中的所有文件压缩为.zip扩展名。 您可以将模块放置在这种情况下,用于发送方适配器。

步骤3:ICO2-这将在源目录中查找.zip文件并发送到目标目录。 您可以使用文件修改检查参数来检查zip文件的完整性。

模块的复杂性取决于源系统-是NFS还是FTP?

谢谢

Sugata

哎,真难
5楼-- · 2020-09-10 13:27

嗨,Sugata,


关于该文件夹中的文件,它们每月将同时加载1天所有文件,因此,通过适配器文件发件人,我将一起接收所有文件。
关于解决方案,我必须提出FTP 到FTP或从NFS到FTP,取决于哪种方法更容易实现我的目标。

我第一次尝试配置FTP到FTP方案时,下面是配置:

我从副服务器同时放置了两个文件,但是有关zip的结果是,我仅在zip中获得了一个文件,而不是两个:


感谢您的支持。


Claudio

嗨,Claudio,

PayloadZipBean将不起作用,因为PI发件人文件适配器将一个接一个地拾取所有文件。 并创建多个XI消息。

因此,适配器模块一次将仅压缩一个文件。
如果您可以将PI文件系统中的源文件系统设置为NFS,则可以尝试以下操作 -

1。 请您的源系统放置一个虚拟文件-Complete.trg,如我之前的文章中所述。 这将表示所有文件都已加载。

2。 创建一个ICO-这是您的第一个,并且可以是"文件到文件"虚拟方案,在这种情况下,您可以选择Complete.trg文件,并将其放置在带有时间戳的同一源目录中。 在这种情况下,您可以在接收器适配器中调用脚本来压缩所有源文件。 并创建一个.zip文件。

3。 创建另一个ICO,在该ICO中,您将提取从第一种情况创建的zip文件。

您可以使用下面的shell脚本对源文件进行压缩,并在压缩后删除源文件。

p>

您可以将此Shell脚本放在NFS源目录中,并在第一个ICO的接收方通道中为文件路径名提供参数。

如果源目录名是-abc/123/ZipFiles

,然后将所有文件压缩到ZipFiles_ .zip

 #!/bin/bash
 出口目录= $ 1
 dattm ="`date +%Y%m%d%H%M%S`"
 export zipnm =" $(基本名称$ 1)" _
 zip -rj $ zipnm $ dattm.zip -x * .zip $ dir
 shopt -s extglob
 rm-!(*。zip)

谢谢

Sugata

一周热门 更多>