我有一个相当复杂的要求 - 我必须在FTP位置删除一个非常具体命名的文件,这里的诀窍是我经常要把它放到一个新的位置并且每次都有一个新的文件名(目录名和文件名都取决于年,月,日期和时间)。显然,为此我选择使用动态发送端口,我使用MessageAssignment Shape配置了它。
每天都会生成一个文件。我需要将它放在这种形式的远程位置: 的采样服务器名级/默认/文件/ FTP / PaymentReports / YYYY / MM_ [MONTHNAME] / PaymentReportYYYYMMDD_HHMISS
例如,对于 2016年3月2日下午6:45 发布的文件,我们会:
采样服务器名级/默认/文件/ FTP / PaymentReports / 2016 / 03_March / PaymentReport20160302_184500
这是我在MessageAssignment Shape中的代码:
FTPSendPort1(Microsoft.XLANGs.BaseTypes.Address) = "ftp://sample-servername-stage:721";
FTPSendPort1(Microsoft.XLANGs.BaseTypes.TransportType) = "FTP";
Output(FTP.CommandLogFileName) = "D:\\BiztalkLogs\\FTPLog\\DynamicFTPLog.txt";
Output(FTP.UserName) = "sampleUsername";
Output(FTP.Password) = "samplePassword";
Output(FTP.BeforePut) = "MKD " + Variable_1 + ";CWD " + Variable_1;
FTPSendport1 - 动态发送端口的名称。
输出 - 输出消息的名称。
Variable_1 - 我将存储要创建的目录名称的变量。
以下是最大的问题:
我需要检查目录是否已存在 - 年份,然后导航并检查月份是否已存在。如果它们存在,我只需进入并删除文件。如果没有,我创建它并将文件放在那里。
我需要使用上面显示的格式命名具有日期时间细节的文件。除了上面显示的代码之外,我还尝试了很多方面,包括设置FILE.ReceivedFileName
,FTP.ReceivedFileName
属性等。似乎没有任何效果。这可能是因为我无法在任何地方使用宏%SourceFileName%
。因此,它不断将文件放入具有GUID名称的位置而不是我设置的位置。它表现得好像完全跳过/忽略了我设置文件名的命令。
我在这一点上非常困惑。我不确定如何使用FTP命令混合检查条件(如果文件夹已经存在等),特别是不确定如何在业务流程中执行此操作。
答案 0 :(得分:2)
文件命名在您提供FTP URL的地址属性中完成。实际上你甚至可以在那里使用宏。试试这个:
FTPSendPort1(Microsoft.XLANGs.BaseTypes.Address) = "ftp://sample-servername-stage:721/SomeFolder/SomeFileName_%datetime%.xml"
对于您检查FTP上是否存在文件夹并创建它们的其他问题,我认为您必须编写自定义管道组件。