none
Pipeline with multiple FlatFiledisassemblers not able to resolve correct schema RRS feed

  • Question

  • Hi,

    I have got a receive location which needs to receive 2 types of flat files(Say Schema1 and Schema2).

    Both files are positional flat files. The two schemas are quite similar , except few minor differences  like length of few elements are different and Schema2 has an additional field at the end.

    I have created a pipeline with 2 flat file disassembler components. One component has Schema1 specified as Doc spec Name while other has Schema2 specified.

    So, now I have 2 input files say Input1 for Schem1 and Input2 for Schema2.

    When the input file is picked up by the receive location, Input1 works fine. However Input2 fails with error which you will get if you try to validate the input2 file against Schema1.

    Hence it appears that BizTalk thinks Input2 is for Schema1  while it should use Schema2.

    If I create 2 separate receive locations it all works fine. But my requirement is to have single receive location to allow both kind of files.

    Can anyone suggest anything I might try to resolve this issue?

    Thanks,

    Payal



    Tuesday, May 12, 2015 10:46 AM

Answers

  • Yes, I think easiest way is to create separate receive locations. I have done that now.

    Thanks for all the suggestions.

    • Marked as answer by Angie Xu Tuesday, May 19, 2015 1:35 AM
    Tuesday, May 12, 2015 1:13 PM

All replies

  • I'm pretty sure that I have experienced the same. Even though MS says we can have up to 255 different Disassemblers in the Disassemble Stage on a Receive Pipeline, it will not work if you have more than one of the same Disassembler. As soon as FFDisassembler 1 fails, FFDisassembler 2 will also fail always.

    I consider this an error in BizTalk, but believe it has either been there forever, or at least since BizTalk Server 2010.

    I believe the only workaround is somehow distinguishing the file using a file mask, and then create 2 different Receive Locations with different Pipelines.

    Morten la Cour

    Tuesday, May 12, 2015 10:58 AM
  • Hi,

    If you define several FF Disassemblers in your pipeline, the correct disassembler component is selected by probing if the message matches the specified schema. This system tries to validate if the input message should be processed by a specific disassembler or not. If the processed messages are very similar, maybe this probing system is not working correctly.

    Other option can be the using of a Schema Resolver component to identify the messages that you are processed. With this component you can add your custom logic to identify any type of message that is processed.

    Please, take a look at the following article:

    https://msdn.microsoft.com/en-us/library/aa577629(v=bts.20).aspx

    Regards.




    • Edited by ohawari Tuesday, May 12, 2015 11:00 AM
    Tuesday, May 12, 2015 10:59 AM
  • "The two schemas are quite similar , except few minor differences "

    That's what you have to overcome.  What's happening is ffdasm 1 is probing (IProbeMessage) the message and determines that it matches it's schema so tries to disassemble it.  At that point, both message1 and message2 essentially look the same.

    Tagged flat files work pretty well, regular CSV's not so much.

    There are several ways to solve this but by far, the easiest is just have two receive locations and each Pipeline with one flat file Schema.

    Tuesday, May 12, 2015 11:20 AM
    Moderator
  • Yes, I think easiest way is to create separate receive locations. I have done that now.

    Thanks for all the suggestions.

    • Marked as answer by Angie Xu Tuesday, May 19, 2015 1:35 AM
    Tuesday, May 12, 2015 1:13 PM