2016-03-03 2 views
1

У меня довольно сложное требование - мне нужно отбросить файл с очень конкретным именем в FTP-местоположении, и вот тут-то и дело, что мне часто приходится его бросать в новое место и с новым именем файла каждый раз (имя каталога и имя файла в зависимости от года, месяца, даты и времени). Очевидно, для этой цели я решил использовать динамический порт отправки, который я настроил с помощью формы MessageAssignment.BizTalk 2010 Dynamic FTP Send Port Output Directory and File Name Issue

Файл будет генерироваться каждый день. Мне нужно, чтобы бросить его в удаленном месте в таком виде: образца имя_сервера стадии// файл по умолчанию/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.ReceivedFileName, FTP.ReceivedFileName и т. Д. Ничто не работает. Возможно, это связано с тем, что я не могу использовать макрос %SourceFileName% где угодно. Из-за этого он продолжает отбрасывать файл в место с именем GUID вместо того, которое я установил. Он ведет себя так, как будто он полностью пропускает/пропускает команду, где я устанавливаю имя файла.

На этом этапе я полностью смущен. Я не уверен, как я могу смешивать условия проверки (если папки уже существуют и т. Д.) С командами FTP и особенно не уверен, как это сделать в рамках оркестровки.

+0

Вы пытались установить свойство fileMask на нужное имя файла? Действительно ли MKD вызывает ошибку, если она уже существует? – Dijkgraaf

+0

@Dijkgraaf Невозможно установить свойство fileMask при указании параметров для динамического FTP-порта отправки в рамках оркестровки. По крайней мере, если есть, я не знаю, как получить к нему доступ. Существует свойство, называемое FTP.ReceivedFileName, и это тоже не работает. – JDoe

+1

Я уверен, что вам придется делать создание каталога отдельно от адаптера. FTP.ReceivedFileName должен работать, чтобы установить имя файла, но не создадите каталоги для вас, если они еще не существуют. Если возможно, я задал бы это как задание на целевом сервере - каждую ночь в полночь (или 11:59) он создает новый каталог за день. –

ответ

2

Именование файлов выполняется в свойстве адреса, где вы указываете URL-адрес FTP. На самом деле вы можете использовать макросы там. Попробуйте это:

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

Для вас другая проблема проверки, если папки существует на FTP и создавая их, я думаю, вы должны написать пользовательский компонент трубопровода.