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
Friday, December 25, 2009
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...
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
- 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
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.
"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.
Labels:
Biztalk,
Biztalk 2009,
BizTalk error,
Pipeline,
Pipeline Component
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.
In that case, find and delete the old version of the assembly and try again.
Labels:
Assembly,
Biztalk,
Biztalk 2009,
BizTalk bug
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:
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);
- SMTP properties of the message: Subject, From, ...
- MIME properties of each bodyparts: FileName and IsMIMEEncoded
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);
Labels:
Biztalk,
Bodypart properties,
MIME Properties,
SMTP
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.
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.
Labels:
alk,
Biztalk,
BizTalk bug,
orchestration,
orchestration error
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.

There is just one exception where processing needs longer, but the mean duration is not increasing.
Labels:
Biztalk,
Convoy Pattern,
Statistics
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!
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!
Labels:
Biztalk,
BizTalk error
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?
Labels:
Biztalk,
Pipeline,
Pipeline Component
Thursday, September 10, 2009
Archiving Table Entries
If you want to backup table entries into a second table and delete them in the master table, you can use the folling SQL:
DELETE FROM masterTable
OUTPUT DELETED.* INTO archiveTable
FROM deletionTable
WHERE masterTable.ID=deletionTable.ID
while deletionTable contains the IDs of the entries, which should be deleted.
When using this, all entries of the masterTable, which are joined to the IDs in the deletionTable are copied to the archiveTable and then deleted.
Thanks, Ronny!
DELETE FROM masterTable
OUTPUT DELETED.* INTO archiveTable
FROM deletionTable
WHERE masterTable.ID=deletionTable.ID
while deletionTable contains the IDs of the entries, which should be deleted.
When using this, all entries of the masterTable, which are joined to the IDs in the deletionTable are copied to the archiveTable and then deleted.
Thanks, Ronny!
Labels:
backup,
SQL Server
Subscribe to:
Posts (Atom)