Logic App Flat File Schemas and BizTalk Flat File Schemas
I recently started working on a new Logic App for a customer using the Enterprise Integration Pack for Visual Studio 2015, I was greeted with a familiar sight, the schema generation tools from BizTalk, but with a new lick of paint The Logic App requires the use of Flat File schemas, so I knocked up a schema from the instance I’d been provided and went to validate it against the instance used to generate it (since it should validate). My Flat File was a bit of a pain to be frank in that it had ragged endings, that is to say some sample rows might look a bit like: 1,2,3,4,5,6 1,2,3,4,5 1,2,3,4,5,6 Which I've worked with before....but couldn't quite remember how I solved exactly other than tinkering with the element properties. I generated the schema against the lines with the additional column and erroneously set the last field property Nillable to True. When I went to validate the instance lo’ and behold it wasn’t a valid instance and I had little information about why. So I fired up my BizTalk 2013 R2 virtual machine (I could have used my 2016 one to be fair if I hadn’t sent it to the farm with old yellow last week) and rinsed and repeated the Flat File Schema Wizard. So I got a bit more information this time, namely that the sample I’d been provided was missing a CR/LF on the final line and that the Nillable I’d set on the last column was throwing a wobbler by messing up the following lines. Setting the field’s Nillable property back to false, but it’s Min and Max occurs to 0 and 1 respectively and I had a valid working schema. So I copied the schema back to my Logic Apps VM and attempted to revalidate my file (with its final line CR/LF amended). To my annoyance, invalid instance! I was boggled at this quite frankly but some poking around the internet led me to this fellow’s Blog. https://blogs.msdn.microsoft.com/david_burgs_blog/2018/03/26/generate-and-validate-flat-file-native-instances-from-flat-file-schemas/ In short there’s an attribute added on a Flat File schema which denotes the extension class to be used by the schema editor, when built by a BizTalk Flat File Schema Wizard it’s set to Microsoft.BizTalk.FlatFileExtension.FlatFileExtension When generated by the Enterprise Integration Pack it’s Microsoft.Azure.Integration.DesignTools.FlatFileExtension.FlatFileExtension Changing this attribute value in my BizTalk generated Flat File schema and presto, the schema could validate the instance it was generated from. So in short I’ll say the flavour of the Schema designer tools in the Enterprise Integration Pack seem to throw out errors and verbosity a little different to its BizTalk ancestor, it still throws out mostly the same information, but in different places:
- EIP
You only get a generic error message in the output log. Go and examine the errors log for more information.
- BizTalk
You get the errors in the output log, and in the error log. In my case the combination of my two errors (the flat file being malformed slightly, and my Nillable field change) in the EIP only gave me an error "Root element is missing" which wasn't particularly helpful and the BizTalk tooling did give me a better fault diagnosis. On the bright side the two are more or less interchangeable. Something to bear in mind if you’re struggling with a Flat Schema and have a BizTalk development environment on hand.