Today, I will bring back to life another old BizTalk Server blog post by an old friend of mine, Thomas Canter, with his permission, that I find pretty interesting and useful: Checking for the existence of a property. This was initially published on http://geekswithblogs.net/ThomasCanter, now retired.
NOTE:
- The variable PropExists as bool has already been created
- The Property of interest is BTS.RetryCount
- The Message is Message_In
The list from Using Operators in Expressions (https://learn.microsoft.com/en-us/biztalk/core/using-operators-in-expressions) has the typical list of stuff that you expect in C#, multiplication, bit operations (shift left and right), and Boolean operators, but a couple of extremely useful constructs are available that are unique to BizTalk.
The most important of these (in my humble opinion) is the exists operator.
As you are all aware, to even check whether a property exists in an expression throws an exception… as in the following case:
PropExists = (Message_In(BTS.RetryCount) != null && Message_In(BTS.RetryCount) != “”);
If BTS.RetryCount does not exist in the message context, then the MissingPropertyException (Windows Event Log Event ID 10019) is thrown.
Without having to resort to a scope shape and exception handler, the exists operator allows you to check if a property exists in a message and is used in the following format:
PropExists = BTS.RetryCount exists Message_In;
OR
if (BTS.RetryCount exists Message_In)
{
…;
}
Conclusion
Using the XLANG/s exists operator in your orchestration allows you to test for the existence of a property in a message without resorting to a scope shape and exception handler.
Below are a few more XLANG/s functions that can provide some value to your Orchestrations:
Operator | Description | Example |
checked() | raise error on arithmetic overflow | checked(x = y * 1000) |
unchecked() | ignore arithmetic overflow | unchecked(x = y * 1000) |
succeeded() | test for successful completion of transactional scope or orchestration | succeeded(<transaction ID for child transaction of current scope or service>) |
exists | test for the existence of a message context property | BTS.RetryCount exists Message_In |
Hope you find this helpful! So, if you liked the content or found it helpful and want to help me write more content, you can buy (or help buy) my son a Star Wars Lego!