I'm working on my first Biztalk 2004 project, putting together a demonstrator for the Microsoft partner community, and stuck in the bowels of TVP (Microsoft's UK headquarters). The demonstrator implements a simple scenario for the fictional Contoso Clothing company and uses not just BizTalk 2004, but also InfoPath, Great Plains, MS CRM, Windows SharePoint Services and Commerce Server. It's ths first time I've had a chance to take BizTalk 2004 out for a spin, and for the most part I'm really enjoying it.
BizTalk 2004 is a massive step up from earlier versions. It presents a steep learning curve, and the preliminary documentation is a little thin, but it is well worth perservering We had a few initial problems getting a working build, so my advice is to run BTS2K4 on a clean, minimal base and only install those bits you really need. Once we got a working build, though, everything began to fall into place. I shan't make too many comments here, but doubtless will have a lot more to say about the product in the future.
InfoPath development came as a bit of a shock. At one level, you can create foms very quickly using the designer. However, as soon as you want to add anything smart to the form, you quickly discover that it is most un-RAD like. We have a simple form that invokes web services to populate drop down lists. Creating secondary data sources for this was OK, but then we had to post parameters to our web services to get the required response. You'd think this would be easy. In fact, the SDK has sparse documentation on how to do this, and it can be quite tricky. Each secondary data source is represented as a separate XML doc within the form. If you want to post data to the web service during a request, you have to use DOM to add the parameter data to the correct elements in this XML doc. You then call Query() on the data adapter, and the results are apended to another part of the XML doc. It took a little time to work this out, and the problem then bacame one of writing generic code that would submit parameterised requests and then display the results for a number of different web services. A few hundred lines of code later, and we have some fairly generic code to do this, but I'm still tweaking it to iron out faulty assumptions about namespaces and prefixes.
Don't get me wrong. InfoPath is a great tool. But for serious development, you must be prepared to invest some significant effort in writing script to deal with lots of common requirements. And don't even think of going there if you don't understand XML DOM and namespace handling.
I haven't tried out the preview InfoPath upgrade yet, as I don't want to risk destabilising my notebook during this project. However, it looks promising.