Непонятно, с чем именно у вас возникают проблемы, поэтому я собираюсь пройтись по каждому описанному вами шагу и охватить различные варианты. Надеемся, что один из этих пунктов решит вашу проблему.
Пост стал довольно запутанным, так как я продолжал думать о возможных дополнительных проблемах - подозреваю, что ключевой раздел для вас будет последним Отправка сообщения с использованием транспорта FTP в BizTalk
Дайте нам знать, как вы ладите ...
Создание сообщения FlatFile в оркестровке
В BizTalk вы никогда не создаете оркестровочных сообщений в любом формате, кроме XML.
Чтобы создать сообщение FlatFile из оркестровки BizTalk, нужно создать схему FlatFile во время разработки, а затем во время выполнения создать экземпляр этой схемы и отправить его через порт отправки BizTalk, имеющий BizTalk FlatFile ассемблер настроен на этапе сборки.
Схема FlatFile - это просто схема XML со специальными аннотациями, которые информируют ассемблер BizTalk FlatFile, как сериализовать XML в текст.
Таким образом, создание сообщения FlatFile в оркестровке фактически совпадает с созданием любого другого формата документа в оркестровке.
Создание сообщения в оркестровке
Итак, как создать новое сообщение в оркестровке BizTalk?
Чтобы не воссоздавать колесо, здесь - ссылка на довольно классический пост Мэтта Мелески, посвященный именно этой теме.
Чтобы подвести итог тому, что говорит Мэтт, для создания нового экземпляра сообщения в BizTalk у вас есть четыре основных варианта:
- Создание нового сообщения из существующего сообщения с использованием карты BizTalk
- Назначить одно сообщение из другого сообщения в форме Назначение сообщения
- Использование переменной XML.XMLDocument в форме назначения сообщения.
- Используйте вспомогательный класс .NET, который возвращает сообщение требуемого типа.
Как и в большинстве случаев, у каждого из вышеперечисленных вариантов может быть написан собственный длинный пост.
Вероятно, для вашего случая необходимости создания простого однострочного документа, либо опция отображения (1), либо опция XMLDocument (3) приведет вас туда, куда вам нужно.
Отправка сообщения с использованием транспорта FTP в BizTalk
Я думаю, что это может быть вашей проблемой - как отправить сообщение FTP или формат FlatFile в BizTalk с указанным именем файла.
Существует несколько подходов к этому. Я дам два, надеюсь, первое должно сработать, но затем вы можете вернуться ко второму.
1. Установите ReceivedFileName и используйте макрос% SourceFileName%
При изучении моего ответа я не думал, что этот подход будет работать для FTP, но я нашел производственный пример, где я делаю именно это. Попробуй.
В форму оркестровки Construct Message
добавьте форму Message Assignment
.
В этой форме назначения сообщения вы можете установить свойство FILE.ReceivedFileName
для вашего сообщения плоского файла следующим образом:
yourFlatFileMessage(FILE.ReceivedFileName) = whateverFileNameYouWant;
Устанавливает свойство контекста, которое затем будет использоваться при подключении порта статической отправки к порту оркестрации. В вашем статическом порту отправки вы указываете FTP-адаптер с именем целевого файла, например:
% SourceFileName% .txt
А затем адаптер FTP заменяет макрос% SourceFileName%, давая вам имя файла, например whatFileNameYouWant.txt
В вашем порту отправки вам нужно указать конвейер отправки, который содержит ассемблер FlatFile для вашего формата плоского файла.
2. Использовать динамический порт отправки с программным вызовом в конвейер
Если описанный выше метод не работает, вам нужно использовать конвейер динамической отправки.
Проблема заключается в том, что для отправки сообщения FTP с указанным именем файла в BizTalk необходимо использовать динамический порт отправки. НО с динамическим портом отправки вы ограничены проходом через конвейер, поэтому вам некуда указывать ваш ассемблер FlatFile.
Чтобы создать динамический порт отправки, который создает имя файла, которому вы хотите следовать после кода в форме назначения сообщения оркестровки (любезно предоставлено Christof Claessens ' blog):
//Set dynamic ports location:
orchprtSndMyMessagePort(Microsoft.XLANGs.BaseTypes.Address) = "ftp://myserver/mydirectory/myfilename.xml";
//Set context on the message you want to send:
msgMyMessage(FTP.UserName) = "myFTPUsername";
msgMyMessage(FTP.Password) = "myFTPPassword";
msgMyMessage(BTS.RetryCount) = 20;
msgMyMessage(BTS.RetryInterval) = 2;
Итак, как заставить этот динамический порт отправки отправлять файл в формате плоского файла?
Этот трюк обсуждается здесь . То, что вам нужно сделать, это вызвать конвейер отправки из Orchestration (новая возможность в BizTalk 2006).
Код для этого ниже:
//PipeMsg is a variable of type: Microsoft.XLANGs.Pipeline.SendPipelineInputMessages
PipeMsg = new Microsoft.XLANGs.Pipeline.SendPipelineInputMessages();
PipeMsg.Add(<MessageToAssemble>);
Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteSendPipeline(typeof (<fullyQualifiedNameofSendPipline>),PipeMsg,msg_Output_FF);
Затем оно заполняет ваше сообщение оркестровки msg_OUtput_FF вашим форматированным текстом FlatFile. BizTalk все еще думает об этом как о документе XML, но на самом деле это не так. Когда вы отправляете это через динамический порт отправки с проходящим конвейером, вы должны увидеть содержимое плоского файла.