MSDN Magazine article on building custom activities for workflows

My article on building custom activities for Windows Workflow Foundation has finally posted to MSDN. For those of you fortunate enough to get a printed copy, you got an entire week advanced screening. 🙂
I tried to cover the basics of building an activity and the various components; designer, validator, etc, as well as touch on some of the things you can do for more advanced activities that need to listen for external data/events.
I’ll be writing more articles for MSDN Magazine on Windows Workflow Foundation in the coming months. If you have specific topcis that are of interest, post your feedback here and I’ll consider it as I plan the next articles.

BizTalk Message Context Properties – handy guide

Came across this handy page during my searching travels.
Covers the common Context Properties and gives a little blurb on each.

This is taken from MSDN

Message Context Properties 

System properties are mostly used internally by BizTalk Messaging Engine and its components.
In general, changing the values set by the engine for those properties is not recommended,
because it may affect the execution logic of the engine. However, there are a large
number of properties that you can change.

The following table contains a list of message context properties that the Messaging
Engine can promote. You can use these properties for creation of filter expressions
on send ports and orchestrations in Microsoft%u00ae BizTalk Server 2006. A separate
table lists additional properties that may be of use in some BizTalk applications
that cannot be promoted.

For additional information about properties and property schemas associated with pipeline
components and adapters, see the following:

  • BizTalk
    Message Queuing Adapter Property Schema and Properties

  • File
    Adapter Property Schema and Properties

  • FTP
    Adapter Property Schema and Properties

  • HTTP
    Adapter Property Schema and Properties

  • MSMQ
    Adapter Property Schema and Properties

  • SMTP
    Adapter Property Schema and Properties

  • SOAP
    Adapter Property Schema and Properties

  • BizTalk
    Framework Schema and Properties

  • MQSeries
    Adapter Properties

  • POP3
    Adapter Property Schema and Properties

  • Windows
    SharePoint Services Adapter Properties Reference

  • MIME/SMIME
    Property Schema and Properties

  • XML
    and Flat File Property Schema and Properties

Property When and where it is promoted Type Description

BTS.AckFailureCategory

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:int

Identifies the ErrorCategory, which gives the place and reason for the suspension.

BTS.AckFailureCode

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the ErrorCode, which gives the place and reason for the suspension.

BTS.AckID

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the MessageID of the original message.

BTS.AckInboundTransportLocation

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the InboundTransportLocation from the original message.

BTS.AckOutboundTransportLocation

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the OutboundTransportLocation from the original message.

BTS.AckOwnerID

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the instance ID from original message.

BTS.AckReceivePortID

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the ReceivePortID from the original message.

BTS.AckReceivePortName

Promoted by the Messaging Engine for the acknowledgement message.

xs:string

Identifies the ReceivePortName from the original message.

BTS.AckSendPortID

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the SendPortID from the original message.

BTS.AckSendPortName

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Identifies the SendPortName from the original message.

BTS.AckType

Promoted by the Messaging Engine before publishing an acknowledgement message into
the MessageBox database.

xs:string

Allows monitoring of acknowledgements and non-acknowledgements by an orchestration.
The value will be ACK for an acknowledgment and NACK for a negative acknowledgment.

BTS.ActionOnFailure

This property can be set by an adapter prior to calling IBTTTransportBatch::SubmitMessage()
API to submit the message to BizTalk.

xs:int

Controls the behavior of the messaging engine when there is a failure in the receive
pipeline. Typically the messaging engine suspends failed messages; however, certain
adapters (like HTTP) would report the failure back to the client instead of suspending
the message on a receive pipeline failure.

Valid values:

  • Default. If the property does not exist, the messaging engine will automatically try
    to suspend the message.

  • 0. Indicates that the messaging engine should not automatically suspend the engine.

Other values are reserved for future use.

BTS.CorrelationToken

If this property is set on the message context, it is promoted by the Messaging Engine.
This property is set on a context implicitly when request-response adapter or an orchestration
submits a request message into the MessageBox database.

xs:string

Enables routing of response to request-response ports.

BTS.EpmRRCorrelationToken

Promoted by the Messaging Engine on request-response message execution. The property
is promoted before messages are submitted into the MessageBox database.

xs:int

Used internally by the Messaging Engine. Specifies the Server Name, Process ID and
a unique GUID for a request response stream of messages.

BTS.InboundTransportLocation

Promoted by the Messaging Engine after receiving a message from a receive adapter
and before publishing it into the MessageBox database.

xs:string

Specifies the location (URI) on which the message was received by the handler.

BTS.InboundTransportType

Promoted by the Messaging Engine after receiving a message from a receive adapter
and before publishing it into the MessageBox database.

xs:string

Specifies the type of adapter that received this message and submitted it into the
server: FILE, HTTP, etc.

BTS.InterchangeSequenceNumber

Pomoted by the Messaging Engine after receiving a message from the receive adapter
and before publishing it into the MessageBox database.

xs:int

Indicates the sequence number of the document in the interchange. If the document
is not part of an interchange that was disassembled into individual documents, then
this value will be 1. The property can be read in an orchestration, a send pipeline
and send adapter.

BTS.MessageDestination

This property can be set in the receive pipeline by a disassembler pipeline component
when it returns a message from GetNext().

xs:string

Used primarily to support Recoverable Interchange Processing in disassemblers, this
property controls whether a message is published to the message box or is suspended
into the suspend queue. If a pipeline encounters a bad message in an interchange and
wants to suspend the message and continue processing, it can do so by setting MessageDestination
= SuspendQueue and return the message when the engine calls GetNext() on the disassembler.

Valid values:

  • Default. If the property does not exist, the message is assumed good and is published
    to the message box.

  • SuspendQueue. Directs the messaging engine to suspend the message.
Note
The suspended message will be the post-pipeline/mapping message and not the message
submitted by the adapter (i.e. the wire message).

BTS.MessageType

Promoted by the disassembler pipeline components during message parsing.

xs:string

Specifies the type of the message. The message type is defined as a concatenation
of document schema namespace and document root node: http://MyNamespace#MyRoot.

BTS.OutboundTransportLocation

If this property is set on the message context, it is promoted by the Messaging Engine.
This property is set on a message context implicitly when an orchestration sends a
message to a send port. This property can be also set explicitly in an orchestration
or in a pipeline.

xs:string

Specifies the destination location URI where the message is sent. The URI may contain
the adapter prefix, such as http://. The adapter prefix is used by the Messaging
Engine to determine the type of adapter to use when sending the message. If both the
adapter prefix and the BTS.OutboundTransportType property are set, the adapter
type from BTS.OutboundTransportType always takes precedence over the adapter
type determined from the prefix.

Valid values:

BizTalk Message Queuing: DIRECT=, PRIVATE=, and PUBLIC=

FILE: file://

FTP: FTP://

HTTP: http:// and https://

SMTP: mailto:

SOAP: SOAP://

SQL: SQL://

BTS.OutboundTransportType

If this property is set on the message context, it is promoted by the Messaging Engine.
This property is set on a context implicitly when an orchestration sends a message
to a send port. This property can also be set explicitly in an orchestration or in
a pipeline.

xs:string

Specifies the type of adapter used to send the message. The available adapter types
are FILE, FTP, HTTP, SMTP, MSMQT (BizTalk Message
Queuing), SOAP, and SQL.

The values set on this property as well as adapter prefixes specified in the address
are not case-sensitive.

BTS.PropertiesToUpdate

An adapter sets this property when it needs to preserve some of the property values
on a failed message that is being resubmitted or suspended.

This means that when the message gets resubmitted or resumed, it will have the specified
properties set on the context.

xs:string

Contains an XML string with elements that represent property names, namespaces
and values.

BTS.ReceivePortID

Promoted by the Messaging Engine after receiving a message from a receive adapter
and before publishing it into the MessageBox database.

xs:int

Identifies the receive port on which the message was received.

BTS.ReceivePortName

Promoted by the Messaging Engine after receiving a message from a receive adapter
and before publishing it into the MessageBox database.

xs:string

User-friendly name of the receive port on which the message was received.

BTS.RouteDirectToTP

Promoted by the Messaging Engine on messages for loop back or request-response execution.
The property is promoted before messages are submitted into the MessageBox database.

xs:boolean

Used internally by the Messaging Engine to enable loop back and request-response scenarios.

BTS.SPGroupID

Promoted by the Messaging Engine when the message is sent to a send port from orchestration.

xs:string

Specifies the ID of the send port group.

BTS.SPID

Promoted by the Messaging Engine when a message is sent to a send port from orchestration.

xs:string

Specifies the ID of the send port.

BTS.SPTransportBackupID

Promoted by the Messaging Engine when a message is sent to a send port from an orchestration.

xs:string

Specifies the ID of the backup adapter in the send port.

BTS.SPTransportID

Promoted by the Messaging Engine when a message is sent to a send port from an orchestration.

xs:string

Specifies the ID of the primary adapter in the send port.

BTS.SuspendAsNonResumable

This property can be set by an adapter before calling SubmitMessage() or in an orchestration
before sending a message to a send port.

Note
SubmitRequestMessage() will ignore this property; two-way messages are always suspended
as non-resumable.

xs:boolean

Controls whether the Message Engine should suspend a message as non-resumable on message
failure. Typically messages are suspended as resumable but there are cases when this
is inappropriate — for example, resuming a message for an ordered send or receive
port would break message order.

Valid values:

  • False. Message is suspended as resumable (this is the default).

  • True. Message is suspended as non-resumable.

BTS.SuspendMessageOnRoutingFailure

Promoted by the Messaging Engine after receiving a message from a receive adapter
and before publishing it into the MessageBox database.

xs:boolean

Specifies behavior when a routing failure occurs with an incoming message.

Valid values:

  • Default / False. If the property does not exist or is set to False, the engine notifies
    the adapter of the error when a routing failure occurs.

  • True. The routing engine will suspend the message automatically when a routing failure
    occurs.
Note
The suspended message will be the post-pipeline/mapping message and not the message
submitted by the adapter (i.e. the wire message).

There are a number of other properties in this namespace that carry information that
may be useful for some BizTalk applications.

Property When and where it is promoted Type Description

BTS.AckDescription

Set by the Messaging Engine before publishing an acknowledgement message into the
MessageBox database.

xs:string

Identifies the ErrorDescription, which gives the place and reason for the suspension.

BTS.EncryptionCert

Not promotable.

xs:int

Identifies the thumbprint corresponding to the encryption certificate. Set this property
in an orchestration or custom pipeline component placed before the MIME/SMIME Encoder
pipeline component in a pipeline to perform response encryption on a request-response
port that is receiving a signed and encrypted message.

BTS.InterchangeID

Set by the Messaging Engine for each message that arrives on the server.

xs:string

Defines the unique ID that is used to group the documents that resulted from the same
interchange message.

BTS.Loopback

Set by an adapter when submitting the request message for loop back execution.

xs:boolean

Defines whether the message should be submitted into the server for a loop back execution.
In loop back execution, the request message is published into the MessageBox database
where it is routed directly to the receive adapter as a response.

BTS.SignatureCertificate

Set by some adapters when submitting a message into the server. This property is used
by the Party Resolution pipeline component.

xs:string

Identifies the thumbprint of the signing certificate that was used to sign the message
received by BizTalk Server.

BTS.SourcePartyID

Set by the Party Resolution pipeline component after the party has been identified
for the incoming message.

xs:string

The ID of the BizTalk party.

BTS.SSOTicket

If the receive adapter supports this property, it is set when publishing the message
to a server.

xs:string

A ticket contains the encrypted domain and username of the current user, as well as
the ticket expiration time. The ticket is used by SSO enabled adapters to get the
credentials for the user when authenticating with destination endpoints.

BTS.WindowsUser

Set by some adapters when submitting a message into the server. This property is used
by the Party Resolution pipeline component.

What makes a good BizTalk Administrator?

What makes a good BizTalk Administrator?

I suspect that many organisation don’t yet realise this, but “BizTalk Administrator” is a now a specialised job role. So often I see situations where, when things starting going wrong, the operations guys are forced to call in the BizTalk dev guys because they’re the only one’s in the company who have a firm grasp on how BizTalk works. Maybe that works in your organisation, but its worth pointing out that dev guys aren’t necessarily well suited to making stuff run. Devs build stuff. Operations people keep stuff running. Its different mindsets, and if your critical BizTalk infrastructure (or something BizTalk is dependant on) is currently down (it happens), do you really want mindsets clashing?

Whatwould be the hallmarks of a good BizTalk administrator?

  • Well for starters, a good BizTalk Administrator would actually realise they are the BizTalk Administrator. They understand that its a specialised skillset and requires specialised knowledge.
  • They’ve done some BizTalk Administration Training (company funded of course) and they’ve read the operations manual.
  • They actually havea BizTalk install on their own box which they play with. They may not have the dev background to get too involved with orchestrationsmaps and all that dev stuff, but they play with the SDK samples when they can.
  • They fully understand the Deploy Undeploy story around BizTalk and the various methods available for deploying artifacts.
  • They understand the relationships between, BizTalk and IIS, BizTalk and SQL, BizTalk and MSMQ, BizTalk adapters and everythingthey connect to, and so on. If you connect to a mainframe, they should have some idea how that magically happens.
  • They are plugged into the BizTalk blogosphere/newsgroups so they can keep a proactive watch out for issues, releases, Services Packs etc. No good BizTalk Administrator would be surprised to hear that BizTalk 2004 Service Pack 2 released recently (You already have this in your maintenance/release plan don’t you?)
  • If you’ve got BTS2006, then they hang out in the BizTalk Administror Hub page for a part of the day…you know just keeping an eye on things… If you have BTS2004, then they are intimately familar with HAT and use it daily. A really good Admin will even have custom HAT queries they use for looking atthingsof interest.

This has been my 2 cents.

Mark

BizUnit Context

BizUnit Context

So after several cribs and rants about BizUnit, a while ago i decided to take matters into my own hands and went through the code base with a fine tooth comb and worked out what exactly it does and doesnt do.  I then wrote up a tutorial on the context object and have been intending to post it here for a long time. Finally i got round to it this evening as i was prodded by an email from someone who wants to check it out. So i have put up an article on this site and its available at (http://dotnetjunkies.com/WebLog/netblog/articles/BizUnit_Context_Tutorial.aspx)


From the introduction :


BizUnit is a very extensible testing framework. One of the core elements of BizUnit is the Context object. Unfortunately the documentation does not explain how users can take advantage of it and it is left to developers to try and understand it from NDoc samples scattered around in the documentation.


This tutorial introduces the Context object and how it can be used in BizUnit based testing. It uses examples from the official documentation wherever applicable and supplements it where the information in the documentation is not very clear. It will not replicate the list of methods and properties etc, so for an exhaustive reference, please refer back to the documentation. This is the first in a series of articles on BizUnit.


Disclaimers & Misc stuff


The word template i used was really cool but the formatting available on this site is very limited so it looks rather poor and there is no provision for attaching entire documents, so please excuse the appearance of the article.  I have applied for a CodePlex project where I intend to put the articles and other tutorials as well as the code for the new steps we have written. As soon as that is available i will let you folks know.


I welcome any comments on this article and suggestions for improvement.


(Btw, I wonder if its my browser, but something appears to have happened to the rendering on this main page. All the posts are skewed in format)

View the C# files behind your BizTalk Project

View the C# files behind your BizTalk Project

As you may know, the BTS VS.NET IDE plugin during a build goes off and compiles your
BizTalk maps, schemas and orchestrations to C#.

Then from there we have another compile and viola – we have dlls produced.

The IDE uses the compiler XSharpP.exe to produce your C# files.

Wouldnt it be nice to see what the C# files are – also very useful for line
by line debugging.fingerscrossed

All you need to do is to create the appropriate Registry Key and corresponding
value


Key Location: HKCU\Software\Microsoft\VisualStudio\8

Key Name: BizTalkProject

Value Type: DWORD

Value Name: GenerateCSFiles (this is the only acceptible value at this point)
Value : 1

Done! Load a BTS Project up, and compile – you’ll see some changes.

 

Note: I have had this fail a couple of times on some huge BTS solutions with over
40 odd ‘Solution Folders’ (and bts projects under those etc).

Nov + December Webcasts Coming up

Some great Webcasts coming up for November and December.

Check them out.

 

The 2007 Microsoft Office system:
Watch, learn, enter to win!

Attend any live or on-demand webcast in this series through June 30, 2007, and qualify
to win an Acer Ferrari laptop, Windows Mobile powered Smartphone, or Creative MP3/video
player or Microsoft Zune (official
rules). Offer open to residents of the U.S. only.

.NET 3.0 Series: Windows Presentation
Foundation Overview

Monday, November 20, 2006 10:00 AM Eastern Time (US & Canada)

devCast: Web Wednesdays-ASP.Net
AJAX Control Toolkit

Wednesday, November 22, 2006 12:00 PM Eastern Time (US & Canada)

devBrainPick:FAQ Fridays

Friday, November 24, 2006 12:00 PM Eastern Time (US & Canada)

XNA Overview

Monday, November 27, 2006 10:00 AM Eastern Time (US & Canada)

Live From Redmond: Client Application
Services in Orcas

Tuesday, November 28, 2006 9:00 AM Pacific Time (US & Canada)

Migration Best Practices for
Financial Services (WinDNA to .NET 2.0)

Tuesday, November 28, 2006 1:00 PM Eastern Time (US & Canada)

devCast: Web Wednesdays-Microsoft
AJAX Library and ASP .NET 2.0 AJAX Extensions- Deep Dive

Wednesday, November 29, 2006 12:00 PM Eastern Time (US & Canada)

Live From Redmond: Visual Studio:
Developing Local and Mobile Data Solutions with SQL Server Everywhere

Monday, December 04, 2006 9:00 AM Pacific Time (US & Canada)

ASP.NET Series: Intro to ASP.NET
“Atlas”

Monday, December 04, 2006 10:00 AM Eastern Time (US & Canada)

Live From Redmond: IronPython:
Developing agile but rich client applications using Python

Wednesday, December 06, 2006 9:00 AM Pacific Time (US & Canada)

devCast: Web Wednesdays-Windows
Live: Intro to Gadgets

Wednesday, December 06, 2006 12:00 PM Eastern Time (US & Canada)

ArchDevBrainPick

Friday, December 08, 2006 10:00 AM Eastern Time (US & Canada)

devBrainPick:FAQ Fridays

Friday, December 08, 2006 12:00 PM Eastern Time (US & Canada)

ASP.NET Series: What’s New in
IIS 7.0

Monday, December 11, 2006 10:00 AM Eastern Time (US & Canada)

devCast: Web Wednesdays-ASP.NET
2.0 Overview

Wednesday, December 13, 2006 12:00 PM Eastern Time (US & Canada)

ASP.NET Series: ASP.NET “Atlas”
Deep Dive

Monday, December 18, 2006 10:00 AM Eastern Time (US & Canada)

devCast: Web Wednesdays- Microsoft
AJAX Library and ASP .NET 2.0 AJAX Extensions-Overview

Wednesday, December 20, 2006 12:00 PM Eastern Time (US & Canada)

devBrainPick:FAQ Fridays

Friday, December 22, 2006 12:00 PM Eastern Time (US & Canada)

Live From Redmond: Using the
Microsoft ASP.NET AJAX Library with “other” server technologies

Tuesday, November 21, 2006 9:00 AM Pacific Time (US & Canada)

MSDN Webcast: Developing Professional
ASP.NET Applications: Securing Your ASP.NET Application (Level 200)

Wednesday, November 22, 2006 9:00 AM Pacific Time (US & Canada)

MSDN Webcast: MSDN geekSpeak:
ASP.NET Security with Jeff Prosise (Level 200)

Wednesday, November 29, 2006 12:00 PM Pacific Time (US & Canada)

Live From Redmond: Microsoft
AJAX Patterns – Implementing Predictive Fetch with Microsoft ASP.NET 2.0 AJAX Extensions

Thursday, November 30, 2006 9:00 AM Pacific Time (US & Canada)

Live From Redmond: An in-depth
look at the “ListView” control

Friday, December 08, 2006 9:00 AM Pacific Time (US & Canada)

Live From Redmond: Team development
on web applications

Tuesday, December 12, 2006 9:00 AM Pacific Time (US & Canada)

MSDN Webcast: Accelerate Your
Supply Chain with a Hybrid Approach to Business-to-Business Integration (Level 200)

Thursday, December 07, 2006 11:00 AM Pacific Time (US & Canada)

MSDN Webcast: Enabling a New
Generation of Dynamic Applications Through Service-Oriented Architecture (Level 200)

Tuesday, December 19, 2006 9:00 AM Pacific Time (US & Canada)

Momentum Webcast: Learn About
a Customer’s Experiences with Microsoft Dynamics GP (Level 100)

Tuesday, November 28, 2006 9:00 AM Pacific Time (US & Canada)

Microsoft Dynamics Webcast: Learn
About the New Benefits Available in Microsoft Dynamics Service Plans (Level 100)

Tuesday, November 28, 2006 11:00 AM Pacific Time (US & Canada)

Momentum Webcast: Building High-Value
Connections with Your Supply Chain (Level 100)

Monday, December 04, 2006 9:00 AM Pacific Time (US & Canada)

Microsoft Dynamics Webcast: Discover
the Value of Deluxe Support Services for Microsoft Dynamics (Level 100)

Monday, December 04, 2006 12:30 PM Pacific Time (US & Canada)

Momentum Webcast: Using Financial
Management Solutions to Make Intelligent Business Decisions (Level 100)

Monday, December 04, 2006 1:00 PM Pacific Time (US & Canada)

Momentum Webcast: Learn About
Customers’ Experiences with Microsoft Dynamics CRM (Level 100)

Tuesday, December 05, 2006 9:00 AM Pacific Time (US & Canada)

Momentum Webcast: Using Technology
to Manage the Complexities of Regulatory Compliance (Level 100)

Monday, December 11, 2006 9:00 AM Pacific Time (US & Canada)

Momentum Webcast: Reporting Challenges
Faced by Corporate, Divisions, and Subsidiaries (Level 100)

Monday, December 11, 2006 1:00 PM Pacific Time (US & Canada)

Momentum Webcast: Redefine Your
Customer Relationships with Microsoft CRM 3.0 (Level 100)

Thursday, December 14, 2006 9:00 AM Pacific Time (US & Canada)

Momentum Webcast: Developing
and Strengthening Profitable Customer Relationships with Microsoft Dynamics CRM (Level
100)

Monday, December 18, 2006 9:00 AM Pacific Time (US & Canada)

No upcoming Internet Information Server (IIS) webcasts are scheduled.

On-demand Internet Information
Server (IIS) webcasts

TechNet Webcast: Technical Overview
of Office Groove 2007 (Level 200)

Monday, November 20, 2006 11:30 AM Pacific Time (US & Canada)

TechNet Webcast: Data Mining
Add-ins for the 2007 Office System (Level 200)

Monday, November 27, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: SharePoint Security
from Service Accounts to Item-Level Access (Level 200)

Monday, November 27, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: Microsoft Office
Live Communications Server 2005 SP1 Technical Overview (Level 200)

Tuesday, November 28, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Keeping Control
of Your Microsoft Office SharePoint Server 2007 Sites with IT Governance (Level 200)

Wednesday, November 29, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: Public Instant
Messaging Connectivity with Office Live Communications Server 2005 SP1 (Level 200)

Thursday, November 30, 2006 9:30 AM Pacific Time (US & Canada)

Windows Vista Support WebCast:
Windows Vista with the 2007 Microsoft Office System – better together

Thursday, November 30, 2006 10:00 AM Pacific Time (US & Canada)

TechNet Webcast: An In-Depth
Look at Windows SharePoint Services and Office SharePoint Server 2007 (Level 200)

Friday, December 01, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Deploying Microsoft
Office Live Communications Server 2005 SP1 (Level 300)

Tuesday, December 05, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: How Microsoft
Automated Employee Performance Reviews (Level 300)

Tuesday, December 05, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Planning for
and Deploying Office SharePoint Server 2007 (Part 1 of 2) (Level 200)

Wednesday, December 06, 2006 9:30 AM Pacific Time (US & Canada)

Microsoft Office System Webcast:
A First Look at the 2007 Microsoft Office System: Five Useful New E-mail and Collaboration
Features (Level 100)

Thursday, December 07, 2006 9:00 AM Pacific Time (US & Canada)

TechNet Webcast: Microsoft Office
Live Communications Server 2005 SP1 Federation (Level 300)

Thursday, December 07, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Planning for
and Deploying Office SharePoint Server 2007 (Part 2 of 2) (Level 200)

Friday, December 08, 2006 9:30 AM Pacific Time (US & Canada)

MSDN Webcast: Office SharePoint
Server 2007 Business Data Catalog (Part 2 of 2): Developing Web Services (Level 200)

Friday, December 08, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: Integrating
the Business Data Catalog and Business Applications Using Microsoft Office SharePoint
Server 2007 (Level 200)

Friday, December 08, 2006 11:30 AM Pacific Time (US & Canada)

TechNet Webcast: Real-Time Collaboration
and Office SharePoint Server 2007 (Level 200)

Monday, December 11, 2006 11:30 AM Pacific Time (US & Canada)

TechNet Webcast: Deploying Microsoft
Office Communicator 2005 (Level 300)

Tuesday, December 12, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: An In-Depth
Look at Search Technology in Office SharePoint Server 2007 (Level 200)

Wednesday, December 13, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: Preparing Your
DNS for Office Live Communications Server 2005 SP1 Deployment (Level 300)

Thursday, December 14, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Excel Services
Technical Overview (Level 200)

Friday, December 15, 2006 1:00 PM Pacific Time (US & Canada)

Microsoft Office System Webcast:
A First Look at the 2007 Microsoft Office System: Five Important New Features (Level
100)

Tuesday, December 19, 2006 9:00 AM Pacific Time (US & Canada)

TechNet Webcast: How Microsoft
IT Manages the World’s Largest Windows SharePoint Services Deployment (Level 300)

Tuesday, December 19, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Configuring
Certificates for Office Live Communications Server 2005 SP1 Deployment (Level 300)

Tuesday, December 19, 2006 11:30 AM Pacific Time (US & Canada)

TechNet Webcast: Best Practices
for Developing, Deploying, and Maintaining Forms Solutions (Level 200)

Wednesday, December 20, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Compliance and
Records Management (Level 200)

Friday, December 22, 2006 9:30 AM Pacific Time (US & Canada)

Small Business Webcast: New Integrated
Services in Microsoft Office Accounting 2007 (Level 100)

Wednesday, December 27, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: SharePoint Security
from Service Accounts to Item-Level Access (Level 200)

Monday, November 27, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: An In-Depth
Look at Windows SharePoint Services and Office SharePoint Server 2007 (Level 200)

Friday, December 01, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Planning for
and Deploying Office SharePoint Server 2007 (Part 1 of 2) (Level 200)

Wednesday, December 06, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Planning for
and Deploying Office SharePoint Server 2007 (Part 2 of 2) (Level 200)

Friday, December 08, 2006 9:30 AM Pacific Time (US & Canada)

MSDN Webcast: Office SharePoint
Server 2007 Business Data Catalog (Part 2 of 2): Developing Web Services (Level 200)

Friday, December 08, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: Integrating
the Business Data Catalog and Business Applications Using Microsoft Office SharePoint
Server 2007 (Level 200)

Friday, December 08, 2006 11:30 AM Pacific Time (US & Canada)

TechNet Webcast: Real-Time Collaboration
and Office SharePoint Server 2007 (Level 200)

Monday, December 11, 2006 11:30 AM Pacific Time (US & Canada)

TechNet Webcast: An In-Depth
Look at Search Technology in Office SharePoint Server 2007 (Level 200)

Wednesday, December 13, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: Excel Services
Technical Overview (Level 200)

Friday, December 15, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: How Microsoft
IT Manages the World’s Largest Windows SharePoint Services Deployment (Level 300)

Tuesday, December 19, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Best Practices
for Developing, Deploying, and Maintaining Forms Solutions (Level 200)

Wednesday, December 20, 2006 9:30 AM Pacific Time (US & Canada)

TechNet Webcast: Compliance and
Records Management (Level 200)

Friday, December 22, 2006 9:30 AM Pacific Time (US & Canada)

MSDN Webcast: Data Warehousing
with SQL Server 2005 (Level 200)

Tuesday, November 21, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: Using SQL Server
Analysis Services with the 2007 Microsoft Office System (Level 200)

Wednesday, November 22, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: Data Mining
Add-ins for the 2007 Office System (Level 200)

Monday, November 27, 2006 9:30 AM Pacific Time (US & Canada)

Microsoft Webcast: An Overview
of the Integrated, End-to-End Business Intelligence Solutions from Microsoft

Tuesday, December 05, 2006 12:00 PM Pacific Time (US & Canada)

Momentum Webcast: Retail Customer
Experience with SQL Server 2005 (Level 100)

Thursday, December 07, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: An Overview
of the Integrated, End-to-End Business Intelligence Solutions from Microsoft (Level
200)

Friday, December 08, 2006 11:30 AM Pacific Time (US & Canada)

MSDN Webcast: Introduction to
Microsoft Visual Studio 2005 Team Edition for Database (Level 200)

Monday, November 20, 2006 10:00 AM Pacific Time (US & Canada)

Momentum Webcast: Best Practices
for Source Code Management with Visual Studio 2005 Team Foundation Server (Level 100)

Thursday, November 30, 2006 11:00 AM Pacific Time (US & Canada)

Visual Studio Team System Demo

Thursday, November 30, 2006 2:00 PM Central Time (US & Canada)

MSDN Webcast: Overview of Visual
Studio 2005 Team Edition for Software Testers (Level 200)

Friday, December 01, 2006 11:00 AM Pacific Time (US & Canada)

Momentum Webcast: Using Reporting
in Visual Studio 2005 Team Foundation Server to Gain Insight into Your Development
Process (Level 100)

Thursday, December 14, 2006 11:00 AM Pacific Time (US & Canada)

Visual Studio Team Foundation
Server HOW TO: Plan for, Install, and Configure

Thursday, December 14, 2006 2:00 PM Central Time (US & Canada)

TechNet Webcast: Understanding
Group Policy (Part 3 of 3) (Level 200)

Monday, November 20, 2006 11:30 AM Pacific Time (US & Canada)

Microsoft Webcast: Introduction
to Microsoft Certificate Lifecycle Manager

Monday, November 20, 2006 1:00 PM Pacific Time (US & Canada)

MSDN Webcast: Windows 64-Bit
Software Development (Level 200)

Monday, November 27, 2006 11:00 AM Pacific Time (US & Canada)

Microsoft Webcast: Web Single
Sign-On and Identity Federation with Active Directory Federation Services

Monday, November 27, 2006 11:00 AM Pacific Time (US & Canada)

Microsoft Webcast: Identity Life-Cycle
Management with Microsoft Identity Integration Server 2003

Wednesday, November 29, 2006 11:00 AM Pacific Time (US & Canada)

TechNet Webcast: Migrating from
Windows NT Server 4.0 to Windows Server 2003 (Level 200)

Friday, December 01, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: Windows Rights
Management Services (RMS) Components and Architecture (Level 200)

Tuesday, December 05, 2006 11:30 AM Pacific Time (US & Canada)

Support WebCast: Exploring the
nuances of remote file encryption

Wednesday, December 06, 2006 10:00 AM Pacific Time (US & Canada)

TechNet Webcast: Windows Server
“Longhorn” and Windows Vista: Better Together (Level 200)

Thursday, December 07, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: Active Directory
Fundamentals (Level 200)

Friday, December 08, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: Planning and
Deploying the Branch Office Technologies in Windows Server 2003 (Level 200)

Monday, December 18, 2006 1:00 PM Pacific Time (US & Canada)

TechNet Webcast: Best Practices
for Designing the Active Directory Structure (Level 200)

Wednesday, December 20, 2006 11:30 AM Pacific Time (US & Canada)

No upcoming in-person events are scheduled for your area.

Parsing Errors

I make so many mistakes with BizTalk that I forget how much I have learned, or better yet, how many mistakes I really can make! (This blog is a testament tosome of them that I at least confess to.)A recent contract reminded of a behavior of the BTAHL7 pipeline component that is not that obvious.

While starting off on a new message, the first thing that I normally do is send the message in using the BTAHL72X pipeline on both the send and recieve port (yes, I put the BTS.ReceivePortName as the filter). I normally look in the destination folder to make sure it is a valid, which it almost never shows up!

I then go to my first troubleshooting haven – HAT. There I look at the last 100 instances, and see that the receive successfully, but the sending had an issue:

In looking closer, it looks like it cannot re serialized back into HL7

So the problem must be in the send pipeline.

WRONG

The actual issue is when the BTAHL72XReceivePipeline attempts to parse the HL7 message, and it is unable to, it completes successfullyby doing nothing and sending it in as a text blob. Of course the send pipeline is expecting that multipart message in xml format, not some unserializable text blob, which of course it knows nothing about!

CORRECTION: I justpulled a Pinocchio;the recieve pipelineactually does something, it logs information to the event log, and will create a ACK/NAK if it is configured. It will not suspend the message because it would then queue up all of the rest of the messages that are following this erroneous message. So it does not stop the other messages from coming in. You also need to make sure that you have a send port that has the BTAHL7.ParseError==true filter to pick have a subscription looking for those bad HL7 messages. I briefly blogged about this here.

The actual errors are logged to the event log (and created in the ACK if you have configured that component). This was a definate Doh moment, when at a different client, I ended up calling support because I was rock headed and did not even bother to look in the event log when data was not showing up out of the message box in xml format.

When I look at the event logI get all of the details I want:

Event Type: Error
Event Source: BizTalk Accelerator for HL7
Event Category: None
Event ID: 4101
Date: 11/17/2006
Time: 6:43:37 PM
User: N/A
Computer: SERVER2003
Description:
Error happened in body during parsing
Error # 1
Segment Id: PID_PatientIdentification
Sequence Number: 1
Field Number: 3
Error Number: 101
Error Description: Required field is missing
Encoding System: HL7nnnn

Error # 2
Segment Id: PV1_PatientVisit
Sequence Number: 1
Field Number: 2
Error Number: 101
Error Description: Required field is missing
Encoding System: HL7nnnn

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

MSDN Magazine Article on Custom BizTalk Adapters


Good article in this month’s MSDN Magazine called Integrate E-Mail Processing Into Your Business Solutions. It covers a variety of topics, including the POP3 adapter, orchestration and some BizTalk plumbing. I also found the part on writing a custom adapter to deal with email message attachment parts fairly interesting. The custom adapter takes each message part and adds it to a custom database. Check it out.


Technorati Tags: BizTalk

BizTalk Property Schemas Separated From Associated Schemas


I caught a glimpse of something in the BizTalk Server 2006 Help the other day that surprised me a bit. The note said:
If a property schema is associated with a message schema, then these two must be in the same BizTalk project. Separating property schema from its associated message schema in different BizTalk projects is not supported.
I had seen that mentioned elsewhere and had mentally discarded it, but I wanted to see whether it’s not possible, or it’s not supported.


First step was to build two separate projects; one to hold my property schema, another to hold my working schemas.


The property schema has a single field, OrderID. After building and compiling the project, I referenced that project from my primary schemas project. I then tried to promote the OrderNumber value in the schema, and sure enough, I was allowed to pick a schema from a referenced assembly. So far so good.



After also promoting the value in my second schema, I deployed all the projects. Next step was to build a send port that had a subscription filter in the OrderID property field. Finally, I dropped two different messages into BizTalk (via FILE receive location), and both messages were picked up by the send port.



So, from a technical standpoint, this seems to work fine. Clearly there’s some reason for us making this an unsupported configuration, and I’m all ears as for why that’s the case. It would seem to me that separating my property schemas into a separate assembly creates a much more flexible architecture than forcing it to live with the schemas that use it. Thoughts?


BTW, I’m jazzed that this is my first post using Microsoft Windows Vista RTM, Office 2007 RTM, and Expression Web Designer (to write the post itself). After installing Windows Vista, I finally had to discard my trusty Allaire Homesite which wouldn’t install correctly. I’ve used Homesite (now owned by Macromedia) for years to write all my HTML, but finally have to upgrade my toolset. Of course, I’ll still do the HTML by hand, but now in a snazzier shell.


Technorati Tags: BizTalk