Biztalk Cannot process EDIFACT file - biztalk

I'm new in processing EDIFACT files. I want to process a EDIFACT file of type D:01B INTFSTA. I searched for schema in BizTalk server, created orchestration and deployed in BizTalk server. While processing the file I get the following error.
Error encountered during parsing.
Error: 1 (Miscellaneous error)
70: Cannot locate document specification because multiple schemas matched the message type "http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006#EFACT_D01B_IFTSTA".
Error: 2 (Miscellaneous error)
71: Transaction Set or Group Control Number Mismatch
Error: 3 (Miscellaneous error)
29: Invalid count specified at interchange, group or message level
.
The sequence number of the suspended message is 1.
There is no other application using the same schema (D:01B INTFSTA).
Please help.

Most likely you have the schema deployed more than once in your BizTalk environment. In the BizTalk console, go to "All Artifacts", select "Schemas" and list alphabetically. There, search for EFACT_D01B_IFTSTA in the Root Name column. You will find that it is deployed in another application most likely.
A good practice around deploying EDI schemas btw, is to update the namespace to include the name of your trading partner. More than 1 of your trading partners may use the schema in different ways or have customizations in it. This approach lets you handle this situation.
The suggested namespace would, for example, be http://schemas.yourcompany.com/partners/yourtradingpartner

Most likely, the schema is not deployed. Check the Schemas node of the All Artifacts Application.
2&3. You test EDIFACT instance is invalid. Did you cut and paste it together? That would cause the mis-matches.
Note, it's a better practice to change the Target Namespace on the EDI schemas to something specific to the app which uses them.

Related

BizTalk pipeline custom component disassemble with no document schema

I am going to parse and format the flat file input based on the business logic stored in SQL server database tables. I don’t have a document schema for the input. I wrote a C# custom component class for the disassemble. When I use the custom component in Disassemble stage in receive pipeline, I am getting document schema not found error.
Did anyone come across with same situation and handled it differently? .
BizTalk routes messages using the 'MessageType' property (The namespace + the root node name of the XML in the message) in the context portion of the message. You don't have that with your design so it doesn't know what to do with it.
You can:
handle each type of flat file separately by parsing and assigning a unique message type
distill the content into one type of message
wrap the content of the file in an 'envelope'
You'll need to create a schema for any of those choices.
Namespaces and routing are a spiffy way to handle changes to file structure. If you include the version of the file in the namespace BizTalk can route the message to the code that handles that kind of message for you. You can continue to handle old style messages as well as new formats. We handle pilot programs that way.

BizTalk Preserve Interchange - wrong root node

I've got a Party/Agreement with the setting "Preserve Interchange - suspend Interchange on error". My understanding is that that's supposed to provide data with http://schemas.microsoft.com/BizTalk/EDI/X12/2006/InterchangeXML and a root "X12InterchangeXml".
Apparently the root is being set to X12_00401_820 as I'm getting the error below.
Error:
6: Finding the document specification by message type "http://schemas.microsoft.com/BizTalk/EDI/X12/2006/InterchangeXML#X12_00401_820" failed. Verify the schema deployed properly.`
I'm trying to reverse engineer an old system (from BT2010 to BT2013/R2) that has an orchestration with http://schemas.microsoft.com/BizTalk/EDI/X12/2006/InterchangeXML and a root "X12InterchangeXml". I have the code and the bindings, but not the party definition, so I'm taking test data and building on my party/agreement for the 820 to try to recreate what they were doing before.
References:
EDI Batch Schemas
BizTalk Server: Working with Preserve Interchange EDI Xml (Part 1)
It turns out the error namespace was really from the outbound part of the receive port, not the inbound part. I had a map to the 820 specified in the message, but that 820 schema was not deployed.

BizTalk error Schema Not Found

I'm receiving an HL7 2.3 ORU schema. I've configured the appropriate party to use a schema namespace of "http://mycompany.ca/application/HL7/2X/2.3/1"
I've built my custom HL7 Schema, ad set the targetNamespace to "http://mycompany.ca/application/HL7/2X/2.3/1", and ensured it has a root element of "ORU_R01_23_GLO_DEF".
I've deployed the schema to biztalk by importing it, then running the msi.
I can see that my BIzTalk application has the schema in it, and I can see that the MSI installed the schema on the drive.
When I send an HL7 to my receive location, I get an error in the evenlog:
Error happened in body during parsing
Error # 1
Alternate Error Number: 301
Alternate Error Description: Schema http://mycompany.ca/application/HL7/2X/2.3/1#ORU_R01_23_GLO_DEF not found
Alternate Encoding System: HL7-BTA
From this, I can tell that the party resolution worked correctly, but can't figure out why it can not find the schema.

Pool Multiple Messages with BizTalk 2006 SQL Adapter

I have a StoredProcedure that returns a simple table containing several records:
DECLARE #STEPS_TABLE AS TABLE (OrchestrationID uniqueidentifier, [Message] nvarchar(1000));
-- LOADING THE VALUES HERE
SELECT * FROM #STEPS_TABLE As Step FOR XML AUTO, XMLDATA, ELEMENTS
I used the SQL Transport Schema Generation Wizard to create my schema and could configure the port correctly. If I use this schema on my orchestration, it works perfectly. BizTalk starts one instance of the orchestration everytime the #STEPS_TABLE has more than 1 record.
Reading Microsoft technical documentation, they recommend to get several messages in one call and then use the XML pipeline to disassemble the multi-row BizTalk message into a single-row BizTalk message.
I haven't used the XML pipeline before, so I tried the provided steps but couldn't get it to work.
Could somebody provide me a link to a "how to" (didn't find anything until now, after several hours of searching) or give me some hints to succeed.
Thanks in advance.
... some hours later I could figure it out myself. So if anybody comes across the same issue as me, here you have some guidelines to make it work on your environment.
At the end I followed a different walkthrough from Microsoft and avoided the pipeline recommendation altogether. The documentation I found is called "Disassembling Result Sets Using the SQL Adapter" and does exactly what i was looking for. You can just follow the whole walkthrough from Microsoft but avoid the creation of the send port and make some little adjustment on the receive port.
After following the technical document you will end up with two schemas, I will call them message and envelope (contains several messages) for the sake of this excercise. In your orchestration you can create a receiving port that maps to the message and then when you configure it as a SQL Port and you link it to your stored procedure (or select statement), you only have to change the Document Root Element Name to the envelope root name; the XML Receive pipeline (provided by default in BizTalk 2006) will do the magic of disassembling the messages contained in the envelope and instantiating an orchestration for each message.
The Microsoft "Disassembling Result Sets Using the SQL Adapter" walkthrough can be found under:
http://msdn.microsoft.com/en-us/library/aa562098(v=bts.20).aspx
Mission accomplished :)

Storing or looking up ISA numbers with BizTalk EDI

My company uses BizTalk for our EDI and AS2 communications. One periodic issue is that a VAN or similar partner we transmit with will want to know whether we received a file by it's ISA #. We currently do use the ISA # for routing within our ports, but I can't seem to find anywhere that this information is stored in BizTalk. Is there a way to look up an EDI message that BizTalk recieved by ISA#? Or perhaps someway I could get a hold of it and store it on my own?
If you're not explicitly using Business Activity Monitoring (BAM) to track this, you may be able to use message tracking.
If you have:
message tracking turned on for the message properties at a point in processing the messages when the ISA number is used, and
if the ISA number is promoted in a published schema (which I'm guessing it is, if you're using the out-of-the-box EDI stuff)
...then you could use the admin console to look for tracked messages with that schema and based on the particular field in the schema (e.g., EDI.ISA08 or EDI.ISA06). Of course, if you are mapping the ISA# to a particular party through your BizTalk configuration, then you would just need to search for Tracked Message Events where the Party Name equals the name you configured for that ISA#.
There is also built-in EDI tracking (see http://msdn.microsoft.com/en-us/library/bb226464(v=bts.10).aspx), with its own reports, but I'm not familiar with it enough to say whether or not it'll give you exactly what you need.
Otherwise, you will want to look at setting up BAM to save the ISA info that you need.
These fields are available inside the Biztalk message if you do EDI receive.
msgIn(EDI.ISASegment) contains all ISA segments. Then you can do substring on control numbers and then put it in your outgoing filename:
ctrlnum (variable) = msgIn(EDI.ISA13)
newfilename = FILE.ReceivedFileName + ctrlnum ;
This way each control number will show up in your filename and you don't even need to open the file or check tracked messages.

Resources