2016-03-03 61 views
1

我有一個相當複雜的要求 - 我必須在FTP位置放置一個非常具體的命名文件,這裏的訣竅是我經常必須放棄它進入一個新的位置並且每次都有一個新的文件名(目錄名和文件名取決於年份,月份,日期和時間)。顯然,爲此我選擇使用動態發送端口,我已經使用MessageAssignment Shape進行了配置。BizTalk 2010動態FTP發送端口輸出目錄和文件名問題

每天都會生成一個文件。我需要刪除它在遠程位置以這種形式: 採樣服務器名級/默認/文件/ FTP/PaymentReports/YYYY/MM_ [MONTHNAME]/PaymentReportYYYYMMDD_HHMISS

例如,對於一個文件上發佈月,2 2016年下午6:45,我們將有:

樣本服務器名級/默認/文件/ FTP/PaymentReports/2016/03_March/PaymentReport20160302_184500

這裏是我的代碼MessageAssignment形狀:

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 - 變量,我將存儲要創建的目錄名稱。

這裏是最大的問題:

  1. 我需要檢查,如果目錄已經存在 - 這一年,然後在導航和檢查月份已經存在。如果存在,我只需進入並放下文件。如果沒有,我創建它並將文件放在那裏。

  2. 我需要用上面顯示的格式命名帶有日期時間細節的文件。除了上面顯示的代碼,我已經嘗試了很多東西,包括設置FILE.ReceivedFileNameFTP.ReceivedFileName屬性等。似乎沒有任何工作。這可能是因爲我無法在任何地方使用宏%SourceFileName%。正因爲如此,它不斷將文件放入帶有GUID名稱的位置,而不是我設置的位置。它的行爲就像完全跳過/忽略了我設置文件名的命令一樣。

在這一點上我完全困惑。我不確定如何使用FTP命令混合檢查條件(如果文件夾已存在等),尤其不確定如何在編排中執行此操作。

+0

您是否嘗試過將fileMask屬性設置爲所需的文件名? MKD實際上是否會導致錯誤,如果它已經存在? – Dijkgraaf

+0

@Dijkgraaf在業務流程中爲動態FTP發送端口指定參數時,無法設置fileMask屬性。至少,如果有的話,我不知道如何訪問它。有一個名爲FTP.ReceivedFileName的屬性,也不起作用。 – JDoe

+1

我很確定你必須做獨立於適配器的目錄創建。 FTP.ReceivedFileName應該設置文件名,但如果它們不存在,則不會爲你創建目錄。如果可能的話,我會把它設置爲目標服務器上的一項工作 - 每晚在午夜(或11:59)它會創建一天的新目錄。 –

回答

2

文件命名是在您提供FTP URL的地址屬性中完成的。事實上,你甚至可以在那裏使用宏。試試看:

FTPSendPort1(Microsoft.XLANGs.BaseTypes.Address) = "ftp://sample-servername-stage:721/SomeFolder/SomeFileName_%datetime%.xml" 

對於其他問題,檢查FTP上是否存在文件夾並創建它們,我認爲您必須編寫自定義管道組件。

相關問題