In one of our BizTalk solution we receive purchase orders in the form of flat-file via FTP adapter from different buyers. Different Receive Locations with specific service windows are configured for each buyers. We got the solution in place, which will process the received purchase order, does some business process, routing etc, etc via BizTalk.
Recently we ended up in a strange situation, where we didn’t receive any purchase order from one particular buyer for atleast a week and nobody noticed it until the buyer called us and asked for the status via telephone. The purchase orders were lost somewhere on the wire and didn’t hit our BizTalk servers. If it had reached our BizTalk servers and once BizTalk started to process the message, then we have the full fault tolerance in place. Things like exceptions written to eventviewer, picked up by MOM and services people get notified etc, etc. In this case since we didn’t receive any message at all, there is nothing to process and nothing to notify.
What’s the solution?
If we look at what BizTalk offers out of the box, one solution I can think of is, we can configure BAM to look for activities that’s happening inside our business process, set up some BAM alerts to get notified and also ask service people to look at the BAM portal every day to monitor all the message flows.
Second option will be to implement some kind of reliable messaging between us and trading partners. Either using BTF framework or some other specification like ebXml, but this requires quite a bit of work.
In our case, we didn’t take the BAM or reliable messaging route , instead written a .NET application (quick and easy fix) scheduled via scheduled task to run every hour between 9AM to 6PM (Business hours). The .NET applications monitors the archive folder for new files and writes Error messages into the event viewer based on some business logic. The errors in the eventviewer are picked up by MOM and goes via our Service Desk channel.
So, What functionality I wish in BizTalk Server ?
In BizTalk server, if you look at the concept of Service Window, they are managed by Messaging Engine directly, I.e adapters don’t need to worry about service windows. Adapters don’t care about when to submit (Receive) messages into BizTalk and when to transmit (Send) message out of BizTalk, Messaging Engine will take care of the service window functionality. I wish there is a check box similar to the one I added to the Receive Location, Schedule Tab as shown in the below figure (Readers, be aware the functionality inside the red box is not present in BizTalk server 2006, I just manipulated the image, so don’t just go and check your Receive Locations)
If in case you can’t read it, it says “Raise Fault Message if no messages received during Service Window period“. So, whenever there is a situation where you didn’t receive any messages from your trading partner during the service window period, and “Raise Fault Message” setting is enabled for the receive location. Then the messaging engine can produce fault message, something similar to “Routing Failure” messages we receive at the moment in BizTalk 2006, with some extra promoted property. This will help us define new business process seamlessly for the condition described in “Problem” section above.
If you think its a valid request, please drop a comment for this post with your name.