Hi
On my current project, I ran into a small issue. In my orchestration, I created a record in a table in a database. The stored procedure that created the record also returned the ID of the record. This ID was to be emailed to a trading partner in the body of an html email. The trading partner could reply, and I needed to correlate on the ID of the record in the database.
But how to do that? The body of the email is one long rawstring with the ID embedded in the HTML.
Off course, there was the obvious way; Just use a property that is never used in some property schema. I happen to know that my solution will never actually use the POP3.Subject property, and therefore I can use it for my purposes. So when I create the Message to be sent out by email to the trading partner, I put the ID inside the POP3.Subject property. When the message is sent, I initialize a correlation set that is based on this single property. I have then also promoted some element of the reply from the trading partner to the same property, and this works just great.
BUT, I am not a fan of misusing properties like that. I find it a bit ugly. So I looked for alternatives, and then I found the /dev/null adapter written by BizTalk MVP Tomas Restrepo. Baiscally, the adapter discards anything it receives. Tomas writes that it can be used to subscribe to anything in order to avoid getting the "No subscribers found" errors, but I found another use for it.
So I created a dummy schema that only had one element in it and promoted that element to a property of my own property schema. I also promoted the appropriate element from the reply from the trading partner to the same property. In my orchestration, I then created a correlation set based on this property, and I added a send port that sends out an instance of the dummy schema just after sending out the email to a port using the /dev/null adapter. The message doesn't go anywhere, but the correlation set gets initialized and I can follow it later on in my orchestration.
See my solution at CorrelationAfterSMTPSend.zip (94,37 KB)
Remember that you must download and install the /dev/null adapter before trying this.
And see the solution without using Tomas' adapter here: CorrelationAfterSMTPSendWithoutDevNull.zip (78,18 KB)
Pros and cons... Well, the first obvious solution is much simpler, as it doesn't require a dummy schema, it doesn't require a property schema and the orchestration doesn't need to create and instance of the dummy schema and send it out. On the other hand, it really isn't pretty to use the properties like that.
The second solution requires installing an adapter, registering it, and all the legwork described above. But the solution uses my own properties and the POP3.Subject property can be use later on, should it be necessary.
Oh well, use whichever you like best
Hope this was helpful to someone.
Updated on the 10'th December 2006:
Well, had I taken the time to think it over again before writing the blog entry, I would have realized that my first obvious approach, which is using the POP3.Subject property doesn't actually have to use an existing property in an existing property schema. I could just as easily have created my own property schema and used that instead.
The reason I abandoned this approach was, that after creating the property schema and creating a property inside the property schema, to which I promoted fields in the schemas, I couldn't assign values to it in message assignment shapes. The property just didn't show up using intellisense in the message assignment shapes.
So I went ahead and used the POP3-Subject property instead. BUT, I discovered that I can actually assign values to my own properties. I just need to change a property of the property element in the property schema. The property element needs to be marked as "MessageContextPropertyBase" in the "Property Schema Base" property of the property element in the property schema.
So, I have abandoned the /dev/null adapter, although I liked the idea And am now using my own property. The best of the two worlds!
--
eliasen