在业务流程内的Biztalk消息中创建文件

时间:2009-12-22 14:55:54

标签: c# .net file file-io biztalk

我在从BizTalk 2006RC通过ftp发送文件时遇到了一些麻烦。 我努力的部分是创建一个名为“OPA0037”的真实文件,只有一行

"OPA0037;TEST;;;"

它在ftp部分之后不是问题我juste看不到如何从消息创建文件...它只能在业务流程中。

任何帮助任何想法都欢迎!非常感谢!!

2 个答案:

答案 0 :(得分:3)

目前尚不清楚你在这里遇到什么问题,所以我将逐步介绍你描述的每一步并涵盖各种选项。希望其中一个点可以解决您的问题。

由于我一直在考虑可能的额外问题,因此该帖子非常复杂 - 我怀疑关键部分将是最后一个使用BizTalk中的FTP传输发送消息

让我们知道你是如何相处的......

在业务流程

中创建FlatFile消息

在BizTalk中,您永远不会以XML以外的任何格式创建编排消息。

从BizTalk业务流程中创建FlatFile消息需要做的是在设计时创建FlatFile架构,然后在运行时生成此架构的实例,并通过BizTalk发送端口将其发送出去BizTalk FlatFile汇编程序在汇编阶段配置。

FlatFile模式只是一个带有特殊注释的XML模式,它通知BizTalk FlatFile汇编器如何将XML序列化为文本。

因此,在业务流程中创建FlatFile消息实际上与在业务流程中创建任何其他文档格式相同。

在业务流程中创建消息

那么,如何在BizTalk业务流程中创建新消息?

为了避免重新创建方向盘,here是Matt Meleski关于此主题的相当经典的帖子的链接。

总结一下Matt所说的,要在BizTalk中创建一个新的消息实例,您有四个主要选项:

  1. 使用BizTalk地图从现有消息创建新消息
  2. 在消息分配形状中为另一条消息分配一条消息
  3. 在消息分配形状中使用XML.XMLDocument变量。
  4. 使用返回所需类型消息的.NET帮助程序类。
  5. 与大多数事情一样,上面的每个选项都有自己的冗长帖子。

    可能对于需要创建简单的单行文档的情况,映射选项(1)或XMLDocument选项(3)将为您提供所需的位置。

    使用BizTalk中的FTP传输

    发送消息

    我认为这可能是您的问题 - 如何使用指定的文件名在BizTalk中发送FTP消息或FlatFile格式。

    有很多方法可以解决这个问题。我会给两个,希望第一个应该工作,但你可以回到第二个。

    <强> 1。设置ReceivedFileName并使用%SourceFileName%宏

    在研究我的答案时,我并不认为这种方法适用于FTP,但我找到了一个生产示例,我正在这样做。试一试。

    在业务流程Construct Message形状中,添加Message Assignment形状。

    在该消息分配形状中,您可以为平面文件消息设置FILE.ReceivedFileName属性:

    yourFlatFileMessage(FILE.ReceivedFileName) = whateverFileNameYouWant;
    

    这将设置一个上下文属性,当您将静态发送端口连接到业务流程端口时,将使用该属性。在静态发送端口中,使用目标文件名指定FTP适配器,如:

    %SourceFileName%的.txt

    然后FTP适配器替换%SourceFileName%宏,为您提供像filesFileNameYouWant.txt

    这样的文件名

    在发送端口中,您需要指定一个包含Flatfile格式的FlatFile汇编程序的发送管道。

    <强> 2。使用动态发送端口以及对管道的编程调用

    如果上述方法不起作用,则需要使用动态发送管道。

    问题是要在BizTalk中发送带有指定文件名的FTP消息,您需要使用动态发送端口。使用动态发送端口的仅限于传递管道,因此无法指定FlatFile汇编程序。

    创建一个动态发送端口,用于创建要在编排消息分配形状中跟踪代码的文件名(由Christof Claessens'博客提供):

    //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; 
    

    那么,如何让这个动态发送端口发送一个flatfile格式文件?

    讨论了这个技巧here。您需要做的是从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);
    

    然后使用FlatFile格式的文本填充您的业务流程消息msg_OUtput_FF。 BizTalk仍然认为这是一个XML文档,但事实并非如此。当您通过动态发送端口及其直通管道发送出去时,您应该看到flatfile内容。

答案 1 :(得分:1)

也许您可以尝试两种最常见的选项:

  • 通过发送端口发送消息,并将该端口配置为使用FILE或FTP适配器。如果文件是具有分隔结构的平面文件(如示例中所示),则应在其汇编阶段创建相应的平面文件架构和包含平面文件汇编程序的发送管道。然后,配置物理端口以使用该管道。

请看msdn关于创建平面文件的演练: http://msdn.microsoft.com/en-us/library/aa577898(BTS.20).aspx

  • 使用编写物理文件的代码创建一个.NET类库,并从Orchestration中使用它。您需要添加类库程序集作为对BTS项目的引用。