代码之家  ›  专栏  ›  技术社区  ›  Polo

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

  •  0
  • Polo  · 技术社区  · 15 年前

    从我的Biztalk2006rc通过ftp发送文件时遇到一些问题。 我努力的部分是创建一个真正的文件,名为“opa0037”,只有一行

    "OPA0037;TEST;;;"
    

    在ftp部分之后不是问题,我只是不知道如何根据消息创建文件…它只能在业务流程中。

    任何帮助,任何想法都欢迎!谢谢!!

    2 回复  |  直到 15 年前
        1
  •  3
  •   David Hall    15 年前

    现在还不清楚你在这里遇到了什么问题,所以我将详细介绍你描述的每一个步骤,并介绍各种选择。希望其中一点能解决你的问题。

    我一直在考虑可能的额外问题,所以这篇文章很有意思——我怀疑你的关键部分会是最后一个。 在Biztalk中使用ftp传输发送消息

    让我们知道你是怎么相处的…

    在业务流程中创建平面文件消息

    在Biztalk中,您从不以XML以外的任何格式创建业务流程消息。

    要从Biztalk业务流程中创建平面文件消息,需要在设计时创建平面文件架构,然后在运行时生成此架构的实例,并通过在组装阶段配置了Biztalk平面文件组装程序的Biztalk发送端口将其发送出去。

    平面文件架构只是一个带有特殊注释的XML架构,用于通知Biztalk平面文件组装程序如何将XML序列化为文本。

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

    在业务流程中创建消息

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

    为了避免重新创建轮子, here 是马特·梅尔斯基关于这个话题的一篇相当经典的文章的链接。

    要总结Matt所说的内容,要在Biztalk中创建消息的新实例,您可以使用四个主要选项:

    1. 使用Biztalk映射从现有消息创建新消息
    2. 从邮件分配形状中的另一封邮件分配一封邮件
    3. 在消息分配形状中使用xml.xmldocument变量。
    4. 使用返回所需类型消息的.NET助手类。

    和大多数事情一样,上面的每一个选项都有自己的长篇文章。

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

    在Biztalk中使用ftp传输发送消息

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

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

    1。设置receivedfilename并使用%sourcefilename%宏

    在研究我的答案时,我认为这种方法不适用于ftp,但我发现了一个生产示例,我正在做这件事。试一试。

    在编排中 Construct Message 形状,添加 Message Assignment 形状。

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

    yourFlatFileMessage(FILE.ReceivedFileName) = whateverFileNameYouWant;
    

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

    %源文件名%.txt

    然后,ftp适配器将替换%sourcefilename%宏,为您提供一个类似whateverfilename youwant.txt的文件名。

    在发送端口中,然后需要指定一个发送管道,该管道包含用于您的平面文件格式的平面文件汇编程序。

    2。将动态发送端口与对管道的编程调用一起使用

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

    问题是,要在Biztalk中发送具有指定文件名的FTP消息,需要使用动态发送端口。 但是 使用动态发送端口时,您只能使用直通管道,因此没有地方可以指定平面文件汇编程序。

    创建一个动态发送端口,该端口创建要在业务流程消息分配形状中跟踪代码的文件名(由提供 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; 
    

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

    这个把戏已经讨论过了 here .您需要做的是从业务流程中调用发送管道(Biztalk2006中的新功能)。

    要执行此操作的代码如下:

    //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。Biztalk仍然认为这是一个XML文档,但事实并非如此。当您通过动态发送端口及其直通管道发送此消息时,应该看到平面文件内容。

        2
  •  1
  •   alejofv    15 年前

    也许你可以尝试两种最常见的选择:

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

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

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