0 Comments

After getting my feet wet doing BizTalk development for about a year now, I found the following free tools quite useful during development / support lifecycle (Not necessarily in order of importance).

1. Fiddler

Very very useful to be able to monitor web traffic especially when integrating with WCF / Web Service endpoint.  Also useful when trying to figure out what’s going across the wire when prototyping web service call using a 3rd party web service API i.e. HP Trim, IBM Maximo, SunSystems Connect, etc.  Found it helpful when trying to determine the correct SOAP Action to bind to the port as well.  Used it to debug / monitor messages flying across the wire after deployment (act as a proxy to BizTalk web service / WCF endpoints).

2. SoapUI

Got introduced to this tool in the last couple projects.  Basically Fiddler can play this role as well, but I’ve found myself using this to create and save sample SOAP calls and see what’s coming back from web service call without having to manually intercept messages coming and going across the wire ala Fiddler.  If you know what message you want to send across and the endpoint it needs to go to, you can fake outgoing message from one system and send it directly to the next endpoint.  Found it quite useful when the source system is not quite ready yet to be integrated while you have to test the next part of the integration or the inbound system is unable to communicate to BizTalk for whatever reason in a support / testing scenario.

3. DanSharp XmlViewer

Quick way to get the right xpath given a sample XML file.  Otherwise you have to go through the XML schema in Visual Studio to figure this out.  Just load the sample XML, click on the node / attribute you are interested in and ouila, instant xpath.  You can test xpath modification as well to see what result you are going to get.  It has saved me a lot of headache trying to debug xml namespacing issue.

4. xsltcake

Awesome, I repeat… AWESOME, online tool to create and test XSL transformation ala jsfiddle / jsbin (similar tools for quick prototyping JavaScript and sharing them to the masses).  It even can do Microsoft inline scripting using inline C#, VB, etc. when you set the processor to .NET.  This has become my favorite free tool when I have to do custom XSLT mapping.

5. Windows Sysinternals DebugView

What can I say… this is just another awesome tool.  One thing that is a pain to do in BizTalk solution is debugging it, so put a lot.. I mean A LOT of System.Diagnostics.Trace (TraceInfo / TraceError) statements in your expression shapes in the orchestration / custom components and see it light up inside DebugView to see what’s actually going on in your BizTalk application.  LIFESAVER in UAT / production environment!!

6. find (Windows built in command line tool)

Hmm… couldn’t find the technet / msdn article on this, but…  This is a tool that you can use to quickly figure out if a particular message goes through a BizTalk “debug/audit” ports.  Trick is to actually save the messages you wish to audit (just subscribe to the port or build it into your orchestration).  Hook it up to File Receive Location and when you need to find a particular message having a certain text in it, fire up command prompt, go to the directory where you store your audit files and launch this. I.e. find /N “<InvoiceID>12934</InvoiceId>” *.xml | more.

There you have it…  Did I mention they are all free?  So… just use them and enjoy.

0 Comments
  1. 1. Enable safe typing in the binding (this, more than often, will safe you headache of dealing w/ date and other numerical problem when converting one message to another in BizTalk (to and from SAP)
  2. 2. When pulling data from something like BAPI_EMPLOYEE_GETDATA that returns things back in an array, make sure you pass an empty node of the array that you are interested in inside the REQUEST message.  For example, in BAPI_EMPLOYEE_GETDATA... if you are interested in ARCHIVELINK and  PERSONAL_DATA being returned in the RESPONSE message, construct the REQUEST message like so:

    <ns0:BAPI_EMPLOYEE_GETDATA …>
      <ns0:AUTHORITY_CHECK>X</ns0:AUTHORITY_CHECK>
      <ns0:DATE>20090912</ns0:DATE>
      <ns0:EMPLOYEE_ID>0100001<ns0:EMPLOYEE_ID>
      <!—Here is the tricky part, need to add these empty placeholders -->
      <ns0:ARCHIVELINK>
        <ns1:BAPITOAV0 xmlns:ns1=”…” />
      </ns0:ARCHIVELINK>
      <ns0:PERSONAL_DATA>
        <ns1:BAPIP0002B xmlns:ns1=”…” />
      </ns0:PERSONAL_DATA>
    </ns0:BAPI_EMPLOYEE_GETDATA>
    and pass it to BizTalk to pass to SAP.  SAP will then return the two nodes w/ the appropriate content.
  3. Use Add Generated Item, Consume Adapter Service to create the appropriate SAP binding file.

0 Comments

Install the supported OS, BT2009 prerequisites and BizTalk 2009 server itself as described in the BizTalk 2009 installation documents found here.

Install the WCF LOB Adapter SDK SP2 and then BizTalk Adapter Pack 2.0 as described in this blog post.

Afterward, install all the SAP RFC Runtime and other component downloadable from SAP Marketplace.  The detail components you need are in installguide.htm of the SAP Adapter Pack downloable here.

Here is a little bit clearer sample instruction on what to do w/ the file downloaded.

If everything went right, Add Generated Item should work properly and so does Add Service Reference on non BizTalk WCF project.

0 Comments

I blogged regarding a particular error that you will received from not entering the correct Action during the WCF-SAP send port configuration in this post. but I didn't tell you what to put in there.

What should be in there is something like: http://Microsoft.LobServices.Sap/2007/03/Types/Rfc/BAPI_NAME_YOU_WANT_TO_CALL.  Replace the last part with the appropriate value.

The easiest way I found to do this is by creating a WCF console application to consume an Adapter Reference to SAP and basically pick the BAPIs you are interested in and after it created the sapBinding.cs file, just open it and browse for the BAPI that you wish to map to WCF-SAP port, copy and paste the URI string that will look similar to the one above into the Action textbox of the WCF-SAP port setting.

If anyone know of a better way, please let me know.

0 Comments

Note to self…

When you see this Application event log entry:

Event Type:         Warning 
Event Source:       BizTalk Server 2009 
Event Category:     (1) 
Event ID:           5743 
Date:               6/26/2009 
Time:               8:06:42 PM 
User:               N/A 
Computer:          CSD-Labs 
Description: 
The adapter failed to transmit message going to send port "SAPPortBilling" with URL "sap://CLIENT=999;LANG=EN;@a/99.99.99.99/00?RfcSdkTrace=False&AbapDebug=False". It will be retransmitted after the retry interval specified for this Send Port. Details:"System.ArgumentNullException: Value cannot be null. 
Parameter name: key 
   at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) 
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) 
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.CreateChannelFactory[TChannel](IBaseMessage bizTalkMessage) 
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.InitializeValues(IBaseMessage message) 
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2..ctor(IBaseMessage message, WcfTransmitter`2 transmitter) 
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfTransmitter`2.GetClientFromCache(String spid, IBaseMessage message) 
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfAsyncBatch`2.BatchWorker(List`1 messages)". 

Make sure you have entered something in the Action part when configuring BizTalk SAP Adapter Send Port.