Hi all

When trying to help the guy I wrote about in http://blog.eliasen.dk/2009/07/07/DistinguishedFieldNotWorking.aspx getting
his distinguished field working, another guy suggested that he just used he xpath
function instead of trying to get the distinguished field working. Now, he actually
ended up using the xpath function because he had a reserved word in the xpath statement
to the field he needed to access the field, but I thought I’d just write a post about
why the xpath function should be avoided and perhaps generalize the post to the usage
of promoted properties, distinguished fields and the xpath function. When to use what
and why

Why use distinguished fields over the xpath function

  1. Readability. Inside an expression shape, it is much easier for a
    BizTalk developer to look at “Message.MyElement.MyField” than it is to look at “xpath(Message,
    “string(/*[local-name()=’MyElement’ and namespace-uri()=’http://mynamespace.com/something/somethingmore’]/*[local-name()=’Myfield’
    and namespace-uri()=’’])”)”
  2. Maintainability. If you need to change a schema at some point, the
    distinguished field is automatically updated to correspond to the new xpath expression
    that points to the relevant field (if you are using the BizTalk Editor, that is).
    If you use the xpath function, you need to find ALL occurrences of the xpath function
    in your entire solution that has an xpath expression that needs to be updated.
  3. Performance. If you use the xpath expression to get values form a
    message, then the entire message needs to be loaded from the database and the xpath
    expression is then evaluated. Distinguished fields, on the other hand, are kept in
    the context of the message and is therefore loaded quickly at runtime.

Why use promoted properties over distinguished fields

  1. Routing. Only promoted properties can be used for routing in the
    internal publish/subscribe engine if you need to route based on the content of a message.
  2. Correlation. If you need to correlate a received message into a specific
    instance of your orchestrations, then you need to do this using promoted properties,
    as these are the only properties that can be added to a correlation type. This makes
    sense when you think of it, because correlation is really just runtime routing – setting
    up the correct subscriptions at runtime that will make the message hit the correct
    orchestration instance. And routing can only be done with promoted properties, hence
    these are needed for correlation.
  3. Tracking. You cannot track distinguished fields – for tracking, you
    need promoted properties.

Why use the xpath function

  1. Distinguished fields cannot be used because there is a reserved word in the path of
    the xpath expression
  2. Distinguished fields cannot be used because you need to set or read a value from a
    reoccurring element

Why use distinguished fields over promoted properties

  1. Performance. You want to keep the number of promoted properties as
    low as possible, since the messaging engine really needs as few promoted properties
    as possible to evaluate when finding out which subscriptions match an incoming message
    that is published to the MessageBox.

So, to sum up: Use distinguished fields whenever possible, switching only to xpath
function or promoted properties if really needed.



eliasen