Friday, June 18, 2010

Guest post: Misleading error message with SAP WCF custom adapter

In an IDOC receive scenario using the WCF custom adapter with SAP binding we received the following error messages:

The adapter "WCF-Custom" raised an error message. Details "Microsoft.Adapters.SAP.RFCException: Details: ErrorCode=RFC_EXCEPTION. ErrorGroup=RFC_ERROR_APPLICATION_EXCEPTION. SapErrorMessage=OBJECT_UNKNOWN. AdapterErrorMessage=Error returned by RfcCallReceiveEx while calling RFC: IDOCTYPE_READ_COMPLETE..

The solution is quite simple as it resides in the SAP setting for the RFC connection, transaction SM59. Switching the communication type to Unicode solved the problem.




(This post is brougth to you by Franziska Kirschner, our great new team member)

Friday, December 25, 2009

Sabbatical

I'm taking a sabbatical next year at Estrellas en la calle in Cochabamba, Bolivia, thus I won't post anything here in 2010.
- Christoph

One year later, I'm back. Thanks for continue posting!

Tuesday, December 8, 2009

Directly Create an EDIFACT Interchange

If you want to create the EDIFACT interchange directly instead of using the built-in functionality of BizTalk, you can create your own schema and send it the EdiSendPipeline. When you use BizTalk's built-in batching functionality, you can see which schema BizTalk uses to prepare the interchange. As far as I see, you can build your custom interchange schema this way:

Import...
  • Microsoft.BizTalk.Edi.BaseArtefacts.EdifactServiceSchema.dll (with namespace "http://schemas.microsoft.com/Edi/EdifactServiceSchema")
  • the EDI schema, e.g. EFACT_D06A_INVOIC_2.0
Create...
  • root node "EdifactInterchangeXml"
  • Below root, Create attribut @DelimiterSetSerializedData and set fixed value to 39:-1:-1:43:58:63:42:44:-1 (if this is how UNA should look like).
  • Below root, create groups UNA, UNB, UNZ and reference the types from the EdifactServiceSchema
  • Below root, create group "TransactionSetGroup" and subgroup "TransactionSet"
  • Below "TransactionSet", create a group that references the EDIFACT schema
  • Below "TransactionSet", create attribute @TransactionSetActivityId
  • Below "TransactionSet", create attribute @DocType and set fixed value to http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006#EFACT_D06A_INVOIC_2.0
The result looks like this:


Weired Error "This is often an indication that other memory is corrupt." executing pipeline component

After migrating our biztalk app to 2009 we received a confusing error message everytime we dropped a file into a file receive location with a pipeline containing a bunch of pipeline components:

"There was a failure executing the receive pipeline:
...
Reason: Attempted to read or write protected memory. This is often an indication that other memory is corrupt"

After along irritating searching we finally debugged the pipeline component and find the root cause:
The call of

message.Context.Read(propertyName, propertyNamespace);

within an pipeline component must not be done with a "Null" value of "propertyNamespace". Obviously there is no internal check for this and the following call within the unsafe code leads into a Null reference call and the error message above.

Friday, December 4, 2009

Problems getting the current assembly in VS2008/BTS2009

BizTalk 2009 seems to copy self-developed BizTalk assemblies into hidden system folders. If you run into the problem that your assemblies are not updated (although you deploy them in Biztalk, add them to the GAC, or save them to the pipeline components folder), it might be that BizTalk still references an old version of the assembly that is in a system folder.

In that case, find and delete the old version of the assembly and try again.

Friday, November 20, 2009

Sending E-Mails with multiple attachments with BizTalk 2006

If you want to send an email with several attachments using the SMTP Adapter of BizTalk, you have to set the following context properties:
  • SMTP properties of the message: Subject, From, ...
  • MIME properties of each bodyparts: FileName and IsMIMEEncoded
The latter could look like this:
inmsg.BodyPart.PartProperties.Write("FileName", "http://schemas.microsoft.com/BizTalk/2003/mime-properties", "file.html");
inmsg.BodyPart.PartProperties.Write("IsMIMEEncoded", "http://schemas.microsoft.com/BizTalk/2003/mime-properties", false);

Thursday, November 19, 2009

Errors exist for one or more children

After changing an orchestration only little, the build process sometimes throws an exception that says "Erros exist for one or more children". This message seems a bit random, since I couldn't find a real problem, like a missing assembly, definition, or port.

In my case, it helped to recreate the construct shapes from the orchestration by deleting the shape, creating a new one, and adding the code of the deleted one. After that, the error disappeared.

PS: You can even find the error message also inside the orchestration file. It might help to watch the changes inside the code, while you modify the orchestration in the orchestration designer. This way, you get a feeling of how BizTalk creates the code from the designer, and you can also observe when the error disappears.
 
3 years later... If you open the orchestration code, for example in an XML editor, and remove everything below row #endif // __DESIGNER_DATA. Then close file and rebuild project. BizTalk will now recreate the implementation code and compiles without that problem.

Friday, November 6, 2009

Is the Convoy Pattern Orchestration getting slow?

In our team, we discussed whether our orchestrations that implement the convoy pattern are getting slower while processing message by message. A small test showed that this is not true, even if you call a sub-orchestration for each message. The time line moved like this in our test:



There is just one exception where processing needs longer, but the mean duration is not increasing.

Friday, October 23, 2009

The part '%messagepart%' of message '%multipart message%' contained a null value at the end of the construct block.

BizTalk throws the following error when one tries to create a multipart message with a message part that was just created from a map in the same construct shape:

Shape name: Send_1
ShapeId: 11910fdc-f4a1-4391-b09d-6a9bd0275ff8
Exception thrown from: segment 1, progress 11
Inner exception: The part '%messagepart%' of message '%multipart message%' contained a null value at the end of the construct block.

Exception type: NullPartException
Source: Microsoft.XLANGs.Engine
Target Site: Void CheckNonNull()
The following is a stack trace that identifies the location where the exception occured

at Microsoft.XLANGs.Core.Part.CheckNonNull()

Somehow, BizTalk looses the value of the message part that was NOT mapped.

A work-around for this is to create a second construct shape. One just creates the message part in a mapping, and the second shape puts the message parts together.

Thanks, Christian!

Monday, October 5, 2009

If the Pipeline Component doesn't appear in the Pipeline Editor toolbox

If your BizTalk pipeline component doesn't show up in the toolbox of the pipeline editor, you should check these things:
  • Is the GUID of the pipeline component the same in AssemblyInfo and in the class itself (it appears twice there)?

  • Is the right assembly name used when instanciating an object of ResourceManager?

  • Are you using the same namespace outside the class, in the properties, and in the ResourceManager?

  • Is the assembly copied to %biztalk installation%\pipeline components?

  • Are you looking for the right component type (encoder, decoder, ...) in the pipeline editor?