<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">get on the bus</title><subtitle type="html">the neudesic connected systems team blog
&lt;br&gt;
&lt;br&gt;
Neuron|ESB, ESB Guidance, BizTalk Server 2006 R2
&lt;br&gt;
Enterprise Service Bus, Service Oriented Architecture, Event Driven Architecture, Message Oriented Middleware
</subtitle><id>http://blogs.neudesic.com/blogs/enterprise_integration/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.neudesic.com/blogs/enterprise_integration/atom.aspx" /><generator uri="http://communityserver.org" version="2.0.60217.2664">Community Server</generator><updated>2006-12-27T18:41:00Z</updated><entry><title>Increasing BizTalk development productivity by removing DLLs from the GAC</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/12/04/22215.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/12/04/22215.aspx</id><published>2007-12-04T00:39:00Z</published><updated>2007-12-04T00:39:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;SPAN&gt;The average BizTalk solution has a large number of DLLs that need to reside in the Global Assembly Cache (GAC). As a result, deploying the BizTalk solution can consume more cycles than is necesary. The time factor becomes apparent during troubleshooting (debugging) BizTalk, when the solution must be frequently rebuilt, redeployed, and restarted.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;The problem described may be resolved by removing BizTalk DLLs from the GAC and placing them into a common folder. Then the runtime section of the BTSNTSvc.exe.config must be updated to include dependent assembly references to BizTalk DLLs residing in the common folder. Below is the fragment of an updated BTSNTSvc.exe.config runtime section.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;runtime&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;probing privatePath="BizTalk Assemblies;Developer Tools;Tracking;Tracking\interop" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;dependentAssembly&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;assemblyIdentity name="Solution.Project.Module" publicKeyToken="909dd514af6267cd" culture="neutral" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;bindingRedirect oldVersion="1.0.0.0-9.9.9.9" newVersion="1.0.0.0" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;codeBase version="1.0.0.0" href="file:///C:\PathToBizTalkDlls\Solution.Project.Module.dll" /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/dependentAssembly&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/assemblyBinding&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&amp;lt;/runtime&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;This approach can increase development speed and reduce the cost to maintain a BizTalk solution in a development environment. While this is not generally recommended for production environments, we do have clients that have a hard “no GAC” policy; yes, even in production. As such, those customers must have a mechanism for running a BizTalk solution sans GAC.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=22215" width="1" height="1"&gt;</content><author><name>Oleksiy Tereshchenko</name><uri>http://blogs.neudesic.com/members/Oleksiy+Tereshchenko.aspx</uri></author></entry><entry><title>The maligned Distinguished Field or why Distinguished Fields are cool</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/10/16/18739.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/10/16/18739.aspx</id><published>2007-10-16T16:43:02Z</published><updated>2007-10-16T16:43:02Z</updated><content type="html">&lt;p&gt;(This article was first published in &lt;span&gt;&lt;a href="http://www.biztalkhotrod.com/"&gt;BizTalk Hotrod&lt;/a&gt;&lt;/span&gt;) &lt;/p&gt;  &lt;p&gt;The Distinguished Field is often seen as the weaker of the two types of Fields when handling Fields in BizTalk. &lt;/p&gt;  &lt;p&gt;After all, the Distinguished Field can't be used as a filter on a message, and it's slower than its big brother the Promoted Field. &lt;/p&gt;  &lt;p&gt;Well, today I'm here to dispel the myth of the wimpy Distinguished Field and place in the pantheon of power that equals, and in some ways exceeds the Promoted Field. &lt;/p&gt;  &lt;p&gt;MYTH: &lt;strong&gt;Getting the value of a Distinguished Field requires loading the entire message into memory. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The first myth that we need to dispel is that the Promoted Field is a quicker field to access than the Distinguished Field. &lt;/p&gt;  &lt;p&gt;This is due to the statement in the BizTalk Documentation, and I quote: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a&gt;The BizTalk Server Message&lt;/a&gt;      &lt;br /&gt;&amp;#x2026; Lots of stuff cut out &amp;#x2026;      &lt;br /&gt;&amp;quot;One of the benefits of promoted Fields is that the value of the element that is promoted is available in the context of the message. This means that &lt;strong&gt;retrieving that value is inexpensive&lt;/strong&gt;, as it &lt;strong&gt;does not require loading the message into memory&lt;/strong&gt; to execute an XPath statement on the message.&amp;quot; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;What is implied here is that for the Promoted Field reading its value doesn't require an XPath read into the message and conversely, that the Distinguished Field is does require loading the message and has a performance cost because it's evaluated when queried. &lt;/p&gt;  &lt;p&gt;Nothing could be further from the truth! In fact, the both the Promoted and Distinguished Fields are evaluated at the same time, and both are placed in the message context at the same time. So, let's talk about how fields get into the message context. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a&gt;About BizTalk Message Context Fields&lt;/a&gt;      &lt;br /&gt;&amp;#x2026; Lots of stuff cut out...      &lt;br /&gt;&amp;quot;Since Distinguished fields do not require a separate property schema, the &lt;strong&gt;evaluation of Distinguished fields&lt;/strong&gt; by the Orchestration engine consumes &lt;strong&gt;less overhead&lt;/strong&gt; than the &lt;strong&gt;evaluation of Property fields&lt;/strong&gt; by the Orchestration engine. The evaluation of Property fields requires an XPath query, the evaluation of Distinguished fields does not require an XPath query as the pipeline disassembler populates the Distinguished fields in the context and the orchestration engine gets the cached values. However, if the orchestration engine does not find the property in the context, it will then evaluate the XPath query to find the value. Distinguished fields do not have a size limitation. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, how does Promoted and Distinguished Fields get into the Message Context? This occurs automatically in the Receive Pipeline by certain pre-built pipeline components? &lt;/p&gt;  &lt;p&gt;Out of the box, the BizTalk XML Disassembler, BizTalk Flat File Disassembler and the BizTalk Framework Disassembler Promote Fields to the message context. All other production level Pipelines promote fields, most also support Distinguished Fields. &lt;/p&gt;  &lt;p&gt;Distinguished Fields are written to the Message Context if one of these Receive Pipeline Components is used in the Pipeline. Interestingly enough, this explains why the Passthrough pipeline doesn't promote Fields from the message, there are no components in the Passthrough Pipeline, it does nothing to the message content and therefore nothing gets promoted, especially BTS.MessageType. &lt;/p&gt;  &lt;p&gt;As far as performance, Distinguished Fields beat out Promoted Fields 9 days each week. This is because both Promoted and Distinguished require the same overhead of writing the message value to the context Field bag in the Message Box, but Promoted Fields have the additional overhead of both being written to the Message Box context database AND the Subscription database. Promoted Fields have an impact every time a message is written to the Message Box because each Promoted Field that exists musts be evaluated in a massive &lt;strong&gt;union&lt;/strong&gt; (very efficiently written &lt;strong&gt;union&lt;/strong&gt; mind you!) that builds the list of matching activation subscriptions. So in short, the more Promoted Fields that you have the costlier the subscription process. &lt;/p&gt;  &lt;p&gt;RECOMMENDATION: Use Promoted somewhat sparingly, don't avoid them, but do not use them if you do not need to. Use Promoted Fields as they were designed, to facilitate message routing, but not to make it easy to access a message value. Instead primarily use Distinguished Fields. &lt;/p&gt;  &lt;p&gt;MYTH: &lt;strong&gt;Its always safe to use a Promoted or Distinguished Field in an Orchestration.&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a&gt;Using Operators in Expressions&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;exists&amp;#xA0;&amp;#xA0;&amp;#xA0; test for the existence of a message context property&amp;#xA0;&amp;#xA0;&amp;#xA0; BTS.RetryCount exists Message_In &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Let us talk about how to handle message content that is missing when it is a Promoted Field and a Distinguished Field. What we are talking about specifically is the field that was Promoted or Distinguished did not exist in the inbound message. The XLANG/s &lt;span&gt;xpath&lt;/span&gt; statement that was used to query the message for the content during pipeline processing returned a null object. &lt;/p&gt;  &lt;p&gt;The first thing to understand is when a Promoted and Distinguished Field comes into existence. They are essentially the same, and this occurs when a Pipeline component parses a message and either Promotes or Writes the value to the context. The simple answer is, when the value does not exist, the Field is not created. A query to the context for the Field returns a null object. &lt;/p&gt;  &lt;p&gt;So, if you attempt to access a Promoted or Distinguished Field that didn't exist in the inbound message, you can cause an unhandled exception to be thrown. Specifically in both cases a NullReferenceException. &lt;/p&gt;  &lt;p&gt;Promoted Fields, have a special XLang/s test &lt;span&gt;exists&lt;/span&gt; (see my previous blog post in this) that you can use to determine if they exist before attempting to use them. In this case, Promoted Fields can always be tested for existence before use and can safely be avoided when they don't exist. &lt;/p&gt;  &lt;p&gt;Unfortunately, Distinguished Fields don't have such a special test, and can cause an unpreventable unhandled exception. Specifically if you use a Field that the underlying type is a native non-nullable type. For instance, suppose the value that you have distinguished is a integer. Integers cannot be null (and yes, I am aware of the Nullable&amp;lt;T&amp;gt; generics, but we are talking about what BizTalk XLANG/s has, not what is C# has) and if the underlying value didn't exist and you attempt to use the value, or even test to see if the value exists will cause an unhandled NullReferenceException when BizTalk's XLang engine attempts to convert a null value into an integer by calling the System.Number.Parse(string) method with a null value. &lt;/p&gt;  &lt;p&gt;Here comes in the kicker and why a Distinguished field can appear to be fine at design time, but bite you at run-time. &lt;/p&gt;  &lt;p&gt;At design-time the expression editor generates a pseudo class-like dotted object for you to use in your expression. At run-time there is simple type-casting that occurs by the run-time engine that inspects the XML datatype of the node in the Schema, retrieves the value as an object&amp;#x2026; then attempts to call the appropriate ConvertTo method on the Object. When casting a Null to an Int32 or any other intrinsic datatype, a NullReferenceException is thrown and the Orchestration fails. &lt;/p&gt;  &lt;p&gt;The primary difference (excluding Routing) between Promoted and Distinguished Fields is the developer design-time experience. Distinguished Fields are easy to use because they emulate .Net Class dotted notation. &lt;/p&gt;  &lt;p&gt;RECOMMENDATION: &lt;strong&gt;If there is any chance that accessing the Distinguished Field may cause an exception, then place the check in a Scope Shape that has a catch shape to handle the NullReferenceException.&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;MYTH: &lt;strong&gt;Distinguished Fields are only accessible in Orchestrations&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;WRONG Documentation: Field Schemas   &lt;br /&gt;RIGHT Documentation: Distinguished Fields in Disassembler Pipeline Components, Processing the Message, Promote Properties (Node Property of All Schemas) &lt;/p&gt;  &lt;p&gt;Another major fallacy about Distinguished Fields is that they are only accessible in the Orchestration. This is also untrue, the BizTalk Server Documentation clearly has an example of how to use Distinguished Fields in any component from the RIGHT Documentation above. &lt;/p&gt;  &lt;p&gt;All Distinguished Fields outside of an Orchestration use a fixed schema:   &lt;br /&gt;&lt;span&gt;http://schemas.microsoft.com/BizTalk/2003/btsDistinguishedFields &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;The Field to use is the XPath of the node that is Distinguished such as:   &lt;br /&gt;&lt;span&gt;/*[local-name()='PO' and namespace-uri()='http://SendHtmlMessage.PO']/*[local-name()='Price' and namespace-uri()=''] &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Thus to access this you would use the Read Method:   &lt;br /&gt;&lt;span&gt;MyObject = MyMessageContext.Read(&amp;quot;/*[local-name()='PO' and namespace-uri()='http://SendHtmlMessage.PO']/*[local-name()='Price' and namespace-uri()='']&amp;quot;, &amp;quot; http://schemas.microsoft.com/BizTalk/2003/btsDistinguishedFields&amp;quot;);&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;If the Field exists, then MyObject will contain an object that can be cast to the appropriate type. &lt;/p&gt;  &lt;p&gt;RECOMMENDATION: Once a the proper Pipeline Component has processed the message, use the Distinguished Field as you would any Field without the Xpath lookup overhead. &lt;/p&gt;  &lt;p&gt;MYTH: &lt;strong&gt;Distinguished Fields in Orchestration Expression shapes are actually code. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You have to hand it to the people who did the coding for XLANG/s. It looks like C#, it feels like C# and 99% of the time it pretty much generates standard C#. &lt;/p&gt;  &lt;p&gt;In many ways, this is not your father's C#, it &lt;em&gt;is&lt;/em&gt; really XLANG/s and it has it's own syntax and special components. Distinguished Fields are a prime example. &lt;/p&gt;  &lt;p&gt;Think back on all the times you used a distinguished Field. It feels like it's a C# Object! It uses dotted notation (Node.Node.Node.Attribute). You assign values to it, you use it's value in an expression and it comes out as the correct type. When the node is Boolean, then it behaves like a Boolean. Nothing could be further from the actual behavior as Marty learned recently. Just because it looks like a duck, doesn't mean that it's a duck. It really is a trick, that the Expression Editor parses the XSD on the fly and generates a classlike editor experience, but no actual code ever gets generated. &lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;Further Reading &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa560436.aspx"&gt;&lt;u&gt;Planning and Architecture &amp;gt; BizTalk Server Architecture &amp;gt; Runtime Architecture &amp;gt; The BizTalk Server Message&lt;/u&gt;&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa561650.aspx"&gt;&lt;strong&gt;&lt;u&gt;Planning and Architecture &amp;gt; BizTalk Server Architecture &amp;gt; Runtime Architecture &amp;gt; Processing the Message&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/Aa561024.aspx"&gt;&lt;strong&gt;&lt;u&gt;Developing BizTalk Server Applications &amp;gt; Creating Pipelines Using Pipeline Designer &amp;gt; About Pipelines, Stages, and Components &amp;gt; Distinguished Fields in Disassembler Pipeline Components&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms189123.aspx"&gt;&lt;strong&gt;&lt;u&gt;Creating Orchestrations Using Orchestration Designer &amp;gt; Creating Orchestrations &amp;gt; Using Expressions in Orchestrations &amp;gt; Using Operators in Expressions&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a name="UsingOperatorsinExpressions"&gt;&lt;/a&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa561059.aspx"&gt;&lt;strong&gt;&lt;u&gt;Creating Schemas Using BizTalk Editor &amp;gt; About Schemas &amp;gt; Different Types of BizTalk Schemas &amp;gt; Property Schemas&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a name="PropertySchemas"&gt;&lt;/a&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa578366.aspx"&gt;&lt;strong&gt;&lt;u&gt;Creating Schemas Using BizTalk Editor &amp;gt; About Schemas &amp;gt; Ways to Use Message Content to Control Message Processing &amp;gt; About BizTalk Message Context Properties&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a name="AboutBizTalkMessageContextProperties"&gt;&lt;/a&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms965231.aspx"&gt;&lt;strong&gt;&lt;u&gt;Schema Property Reference &amp;gt; Node Properties - Alphabetical Listings &amp;gt; Node Properties of All Schemas &amp;gt; Promote Properties (Node Property of All Schemas)&lt;/u&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa546732.aspx"&gt;&lt;u&gt;&lt;strong&gt;Creating Schemas Using BizTalk Editor &amp;gt; Creating Schemas &amp;gt; Promoting Properties &amp;gt; How to Copy Data to the Message Context as Distinguished Fields&lt;/strong&gt;&lt;/u&gt;&lt;/a&gt;&lt;a name="HowtoCopyDatatotheMessageContext"&gt;&lt;/a&gt;&lt;/li&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=18739" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>Using WCF LOB Adapters with the Neuron ESB</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/09/17/17145.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/09/17/17145.aspx</id><published>2007-09-17T08:02:00Z</published><updated>2007-09-17T08:02:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=56278FDE-B708-469C-987E-DED9C6C5E580&amp;amp;displaylang=en"&gt;WCF LOB Adapters&lt;/A&gt; are a new technology for integration with back-end systems and applications. WCF LOB adapters&amp;nbsp;will supersede the&amp;nbsp;BizTalk Adapter Framework. If you're running an ESB powered by Neuron, you can use these adapters too. Here's how to configure your bus to talk to a back end system using a WCF LOB adapter.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Step 1: Add a New Binding&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Step 1 is to define a new binding to Neuron. &lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;A WCF LOB adapter is exposed to consumers as a new transport binding.&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Launch the ESB Explorer, go to the &lt;EM&gt;Services &amp;gt; Bindings&lt;/EM&gt; area, and click &lt;EM&gt;New&lt;/EM&gt; to add a new binding. &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Click the &lt;EM&gt;Browse&lt;/EM&gt; button and navigate to the WFC LOB adapter assembly you want to support. The ESB Explorer will automaically locate and set the class name of the binding.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Save the new binding under a meaningful name.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Step 2: Add a New Service&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;Step 2 is to define an endpoint for the WCF LOB system. The WCF LOB adapter makes this look like a service.&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Go to the &lt;EM&gt;Services &amp;gt; Endpoints&lt;/EM&gt; area and click &lt;EM&gt;New&lt;/EM&gt; to add a new service.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;On the &lt;EM&gt;General&lt;/EM&gt; tab, enter the access information for the service including address, binding, and contract. Select the binding you added in Step 1.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;On the &lt;EM&gt;Security&lt;/EM&gt; tab, if the service is secure, enter any credentials required such as username and password.&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;On the &lt;EM&gt;Ports&lt;/EM&gt; tab, set up a &lt;EM&gt;Send Port&lt;/EM&gt; to route message traffice to the back end service. Assign a subscriber&amp;nbsp;Id and topic to use for this purpose.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;STRONG&gt;Step 3: Start Messaging&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;At this point you're really done. Clients can now send messages to the back end service and receive replies. For successful communication check the following:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Messages need to use the proper schema and expected content&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT face=Arial size=2&gt;Messages need to specify support Action values&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;A technique I used with the samples in the WCF LOB SDK is to turn on WCF diagnostics and message logging when running the test client that comes with the samples. When viewing the logged messages with SvcTraceViewer, I now have examples of valid request and reply messages. Then I can use t&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;he .NET test client to send requests and verify that all is in working order.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=17145" width="1" height="1"&gt;</content><author><name>david.pallmann</name><uri>http://blogs.neudesic.com/members/david.pallmann.aspx</uri></author></entry><entry><title>BizTalk Easter Eggs</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/08/16/15285.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/08/16/15285.aspx</id><published>2007-08-16T21:49:40Z</published><updated>2007-08-16T21:49:40Z</updated><content type="html">&lt;p&gt;Ok, so this isn't really too much of a big deal, but Eric Stott found a funny &lt;a href="http://blog.biztalk-info.com/archive/2007/08/16/Microsoft_forgot_to_use_spell_checker.aspx"&gt;misspelling in the Import MSI Wizard&lt;/a&gt; which reminded of something I had noticed. &lt;/p&gt; &lt;p&gt;If you import or export an MSI and during the progress phase click the Progress item on the left list. &lt;/p&gt; &lt;p&gt;In the Export Wizard the "Results:" is blank and the top of the output says "label3" &lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/081607_2148_BizTalkEast1.png"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In the Import MSI Wizard the "Results:" is some generic value and the top says "label1". &lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/081607_2148_BizTalkEast2.png"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;What is your easter egg?&lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=15285" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>What I would like to see in the HL7 Accelerator 3.0!</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/07/31/13789.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/07/31/13789.aspx</id><published>2007-08-01T04:52:24Z</published><updated>2007-08-01T04:52:24Z</updated><content type="html">&lt;p&gt;List of enhancements to the HL7 Accelerator experience in BizTalk Server.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;The BizTalk HL7 Accelerator (BTAHL7) is non-compliant with the HL7 2.4 (and 2.3.1) Specification 2.10 in the following manners:
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Step 1 Message Construction (serialization):
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;b.2 if the [field] value is not present, no further characters are required
&lt;/li&gt;&lt;li&gt;b.5.iv components that are not present at the end of a field need not be represented by component separators
&lt;/li&gt;&lt;li&gt;&lt;div&gt;b.6.iv subcomponents that are not present at the end of a component need not be represented by subcomponent separators
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;In all of the above cases, the requirement is that the object with no value does not require a delimiter for it, but is certainly gives the implementer the latitude to include it. Incorrectly, BTAHL7 throws a parse error if a sending system sends delimiters at the end of a value that are empty.
&lt;/li&gt;&lt;li&gt;The desired behavior is that BTAHL7 quietly accepts any empty field at the end of any object in the system. This behavior is over ridden using a pipeline property or on a party by party basis, but by default the behavior is breaking. 
&lt;/li&gt;&lt;li&gt;EXAMPLES:
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Field:
&lt;/p&gt;&lt;p&gt;Case 1: Field is not last field in segment:&lt;br /&gt;NTE|| -&amp;gt; This will cause the parse to fail unless it is the "Allow Trailing Delimiters" flag is set.
&lt;/p&gt;&lt;p&gt;Case 2: Field is last field in segment:
&lt;/p&gt;&lt;p&gt;NTE||| -&amp;gt; This will always fail because BizTalk attempts to parse the extra field in the segment into a non-existent field in the segment.
&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Step 2 Converting Messages to data values (deserialization):
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;ignore segments, fields, components, subcomponents, and extra repetitions of a field that are present but were not expected.
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;BTAHL7 does not ignore any segments, fields, components, subcomponents or extra repetitions if they are not expected. Instead a parse error is thrown and the message is rejected.
&lt;/li&gt;&lt;li&gt;The desired behavior is that the HL7 Accelerator retains the extra data for transmission but does not capture the data for processing; additionally this should not cause a parse error.
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;treat segments that were expected but are not present as consisting entirely of fields that are not present
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;BTAHL7 does handle this correctly, but the error messages are generally inscrutable if the captured data does not contain required objects.
&lt;/li&gt;&lt;li&gt;The desired behavior is that BTAHL7 clearly points to the error.
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The overall impact of the non-compliant behavior is that the HL7 accelerator places a tremendous implementation burden on the implementer. Instead of concerning themselves with values of interest in the message, they spend a tremendous amount of time matching the current system requirements to the HL7 Accelerator defined specification. This increases the implementation time, reduces the flexibility of the solution and in general, makes any BizTalk solution extremely expensive.
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;The BizTalk Server model differentiates between various participants in the entire BizTalk Process.
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Business Analyst (BA)
&lt;/li&gt;&lt;li&gt;Solution Developer (SD)
&lt;/li&gt;&lt;li&gt;Operations Manager (OM)
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The HL7 Accelerator does not match this model. I believe that this lack of separation has made the entire HL7 Accelerator solution difficult to implement and complete solution engaging all of the roles that are involved. The BA has to provide an HL7 Solution definition that does not reflect the desired solution, for instance, they create a spread sheet or a word document that defines the message structure very loosely. There is no was for the BA to tell the SD what message definition and variations are required from the HL7 Standard. The only way to define the message is to directly edit the Schema in the BizTalk Schema editor. The only way to define transformations from Message Schema A to Message Schema B is in the BizTalk Mapper. The BA is completely disassociated from the definition process. They have to communicate via documents (Word or Excel) and then test the results using sample messages. The OM has control over the solution in such a way via the HL7 Configurator that should only be defined at the Development level. This disconnect makes it difficult for the appropriate roles to be applied and frustrates the users at each level.
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;The BizTalk Accelerator solution is difficult to debug and troubleshoot. The Developer has to deploy the schemas and pipelines and then manually submit the messages.
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Cannot test Schemas and Maps in the IDE you must deploy the entire solution to validate them.
&lt;/li&gt;&lt;li&gt;The HL7 Tables/Segments/Datatypes always have a global impact and are difficult to separate out. The relationship between them is not obvious and the XML editor is extremely difficult to master. This is resolved by using namespaces to separate the schemas, but even that solution is extremely complex.
&lt;/li&gt;&lt;li&gt;Editing of table values is difficult and not obvious. There is no way to easily import BA defined values into the table definitions.
&lt;/li&gt;&lt;li&gt;The MLLP Test tools are difficult to use and inflexible and seem to be as if they were written at the last minute. When errors are encountered, the tools simply throw an undecipherable exception message instead of reporting a helpful error message.
&lt;/li&gt;&lt;li&gt;The MLLP Test tools cannot help the solution test high volume message loading. The tools allow you to either send a single message repeatedly very quickly, or you must simply rerun the tool in some kind of loop in the console which processes relatively slowly.
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;The HL7 Accelerator does not expose any helpful .Net Classes to help decode/encode and handle message content.
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;The HL7 DateTime field does not map exactly to a .Net class. For instance, the HL7 DT field has 4 digits to the right of the decimal point (ss.mmmm) and the .Net DateTime Type only had 3 (ss.mmm) and so either you must accept a loss of precision (not acceptable for certain lab testing results where the value is a critical measurement) or construct a custom .Net HL7 DateTime datatype to hold this value, deserialize/serialize it and handle it.
&lt;/li&gt;&lt;li&gt;The HL7 Serialization/Deserialization does not allow you to choose to accept invalid messages. In other words, the user may want to accept a message that will parse, and then run a second pass on it to validate the data. To do this requires two schemas to be deployed, a loose schema for initial validation and a second tighter schema that must be called to revalidate the message for deeper content validation. It would help that you could turn off validation at the field level using configuration and then determine at which pass the validation will occur.
&lt;/li&gt;&lt;li&gt;Promoting message content properties is difficult. For instance, there are many message properties that clients almost invariably want to monitor. Patient Information, Lab Test information, MSH Tracking fields like MSH7 and MSH10 to correlate the message back to the sending system and Provider information. It is certainly possible to build an XPath based property promoter and construct a Property Schema to do this, but pipeline components are always problematic and considering the likelihood that client will want to do this, it seems that a simple pre-built component should already exist and be inside the HL7 Deserializer/Serializer to handle this.
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;The HL7 Accelerator and BizTalk do not work well together to allow multiple message types that have very similar structure to be routed to a single orchestration and then sent to end points for processing.
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;The ADT and ORM Messages have many trigger types, but need to be handled similarly. To process the messages the implementer must create many send ports for each message type, but they all go to the same physical send port. Every change to the Orchestration send port, typically requires the implementer to make as many as numerous port changes in a single orchestration. Also, the Send Orchestration ended up being extremely complex to handle all the various message triggers for the same message.
&lt;/li&gt;&lt;li&gt;The HL7 Send Ports cannot handle System.Xml documents. The message context contains the schema to use, but the Send port cannot handle the generic message type and cast it to the correct message type. This means that every send port in an orchestration must be strongly typed. 
&lt;/li&gt;&lt;li&gt;The MLLP Send Port does not allow dynamic send ports making it difficult to use a single send port to send to multiple end points programmatically.
&lt;/li&gt;&lt;li&gt;Because of the limitation on the System.Xml documents, it is not possible to use some of the more advanced features in BizTalk like dynamic mapping. Thus all messages must be strongly typed and constructed.
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;The System does not interact with some of the HL7.org tools and schemas well.
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;HL7.org provides a powerful tool that allows a Business Analyst to modify, design, diff and export to RIM HL7 Message definitions. Just looking at the feature set of Message Work Bench (http://www.hl7.org/), at a minimum this tool is a tremendous guide to what kind of features a Business Analyst would need.
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Diff two schemas
&lt;/li&gt;&lt;li&gt;Capture a message and generate a best guess at a schema
&lt;/li&gt;&lt;li&gt;Capture a message and verify conformance to a user defined schema
&lt;/li&gt;&lt;li&gt;Extensible Table editing for HL7 conformance values
&lt;/li&gt;&lt;li&gt;export of a BA Defined schema in xsd format that is not compatible with the BizTalk Schemas.
&lt;/li&gt;&lt;li&gt;HTML (XML with XSLT) generation of a readable message specification
&lt;/li&gt;&lt;li&gt;Innumerable reports about a message definition
&lt;/li&gt;&lt;li&gt;Capture a message and insert sample values from the message into a specification.
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Users define custom schemas that have both subtle and widely variant message definitions in comparison to the specification
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Make it easier to capture a running message stream and have a wizard that automatically picks a "best matching" schema and adjusts the schema automatically to the actual message data. So that during the design phase, a BizTalk solution could be running in learn mode and then as it runs reports what messages that have failed and make it easy for the implementer to update the schema to allow those messages.
&lt;/li&gt;&lt;li&gt;Define reporting tools and mechanisms that update the schema on the fly, suspending messages and then letting the Operations team report and then adjust the schema and resubmit the message automatically.
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span&gt;
		&lt;/span&gt; &lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=13789" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>Security Wizard - Understanding BizTalk Server 2006 Security – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/03/20/Security_Understanding_BizTalk_Server_2006.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/03/20/Security_Understanding_BizTalk_Server_2006.aspx</id><published>2007-03-20T20:21:00Z</published><updated>2007-03-20T20:21:00Z</updated><content type="html">Security in BizTalk Server 2004 and BizTalk Server 2006 is complicated to understand. This simplifies the security into one simple view....(&lt;a href="http://blogs.neudesic.comhttp://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/03/20/Security_Understanding_BizTalk_Server_2006.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=5144" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>Checking for the existence of a property in a BizTalk Server 2006 Message – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/03/04/BizTalk_Server_2006_Promoted_Property_checking.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/03/04/BizTalk_Server_2006_Promoted_Property_checking.aspx</id><published>2007-03-05T05:27:00Z</published><updated>2007-03-05T05:27:00Z</updated><content type="html">&lt;p&gt;NOTE: 
&lt;/p&gt;&lt;p&gt;The variable &lt;span&gt;&lt;strong&gt;PropExists&lt;/strong&gt;&lt;/span&gt; as &lt;span&gt;&lt;strong&gt;bool&lt;/strong&gt;&lt;/span&gt; has been already created 
&lt;/p&gt;&lt;p&gt;The Property of interest is &lt;span&gt;&lt;strong&gt;BTS.RetryCount&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;The Message is &lt;span&gt;&lt;strong&gt;Message_In &lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;   
 &lt;/p&gt;&lt;p&gt;The list from &lt;span&gt;&lt;strong&gt;Using Operators in Expressions&lt;/strong&gt;&lt;/span&gt; (&lt;a href="http://msdn2.microsoft.com/en-us/library/aa561847.aspx" target="_blank"&gt;http://msdn2.microsoft.com/en-us/library/aa561847.aspx&lt;/a&gt;) 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. 
&lt;/p&gt;&lt;p&gt;The most important of these (in my humble opinion) is the &lt;span&gt;&lt;strong&gt;exists&lt;/strong&gt;&lt;/span&gt; operator. 
&lt;/p&gt;&lt;p&gt;   
 &lt;/p&gt;&lt;p&gt;As you are all aware, to even check whether a property exists in an expression throws an exception… as in the following case: 
&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;PropExists = (Message_In(BTS.RetryCount) != null &amp;amp;&amp;amp; Message_In(BTS.RetryCount) != ""); &lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;If &lt;span&gt;&lt;strong&gt;BTS.RetryCount&lt;/strong&gt;&lt;/span&gt; does not exist in the message context, then the MissingPropertyException (Windows Event Log Event ID 10019) is thrown. 
&lt;/p&gt;&lt;p&gt;   
 &lt;/p&gt;&lt;p&gt;Without having to resort to a scope shape and exception handler, the &lt;span&gt;&lt;strong&gt;exists&lt;/strong&gt;&lt;/span&gt; operator allows you to check if a property &lt;span&gt;&lt;strong&gt;exists&lt;/strong&gt;&lt;/span&gt; in a message and is used in the following format: 
&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;PropExists = BTS.RetryCount exists Message_In;&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;OR 
&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;if (BTS.RetryCount exists Message_In)&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;     …;&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;   
 &lt;/p&gt;&lt;p&gt;Conclusion: 
&lt;/p&gt;&lt;p&gt;Using the XLANG/s &lt;span&gt;&lt;strong&gt;exists&lt;/strong&gt;&lt;/span&gt; operator in your orchestration allows you to test for the existence of a property in a message without having to resort to a scope shape and exception handler. 
&lt;/p&gt;&lt;p&gt;   
 &lt;/p&gt;&lt;p&gt;Below are a few of more XLANG/s functions that can provide some value in your Orchestrations: 
&lt;/p&gt;&lt;div&gt;&lt;table&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Operator &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Description &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;Example &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;p&gt;&lt;span&gt;checked()&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;raise error on arithmetic overflow&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;checked(x = y * 1000)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2"&gt;&lt;p&gt;&lt;span&gt;unchecked()&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;ignore arithmetic overflow&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;unchecked(x = y * 1000)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;succeeded()&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;test for successful completion of transactional scope or orchestration&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;succeeded(&amp;lt;transaction ID for child transaction of current scope or service&amp;gt;)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;exists&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;test for the existence of a message context property&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;BTS.RetryCount exists Message_In&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=4638" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>Handling Trailing Delimiters in HL7 Messages with BizTalk Server 2006 – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/25/Handling_HL7_Delimiters_in_BizTalk_Server_2006.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/25/Handling_HL7_Delimiters_in_BizTalk_Server_2006.aspx</id><published>2007-02-25T13:06:00Z</published><updated>2007-02-25T13:06:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;Applies to: BizTalk Server 2006 with the HL7 1.3 Accelerator &lt;/strong&gt;
	&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Outline of the problem 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Trailing Delimiters are empty values at the end of an object in a HL7 ER7 formatted message. 
&lt;/li&gt;&lt;li&gt;&lt;div&gt;Examples: 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Empty Field 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;NTE|P| 
&lt;/li&gt;&lt;li&gt;NTE|P|| 
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Empty component 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;ORC|1|725^ 
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Empty Subcomponent 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;ORC|1|||||27&amp;amp; 
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Empty repeat 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;OBR|1||||||||027~ 
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Trailing delimiters indicate the following object exists and is empty, which is quite different from null, null is an explicit value indicated by a pair of double quotes -&amp;gt; "". 
&lt;/li&gt;&lt;li&gt;The BizTalk HL7 Accelerator by default does not allow trailing delimiters. 
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;There are three methods to allow trailing delimiters. 
&lt;/div&gt;&lt;p&gt;NOTE: All Schemas always allow trailing delimiters in the MSH Segment 
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Using party identifiers 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;MSH3.1 – Receive/inbound processing, using this value as a party allows you to configure the system to allow inbound trailing delimiters. 
&lt;/li&gt;&lt;li&gt;MSH5.1 – Send/outbound processing, using this value as a party allows you to configure the system to allow outbound trailing delimiters. 
&lt;/li&gt;&lt;li&gt;Generally, if you allow inbound trailing delimiters, unless you are willing to programmatically remove all trailing delimiters, then you need to configure the send to allow trailing delimiters. 
&lt;/li&gt;&lt;li&gt;Add the appropriate parties to the BizTalk Parties list from these two fields in your message stream. 
&lt;/li&gt;&lt;li&gt;Open the BizTalk HL7 Configuration tool and for each party check the "Allow trailing delimiters (separators)" check box on the Validation tab. 
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Disadvantage – Each MSH3.1 and MSH5.1 value must be represented in the parties list and configured. 
&lt;/p&gt;&lt;p&gt;Advantage – granular control over system behavior for each inbound/outbound system. 
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Using instance properties of a pipeline used in a send port or receive location. 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Open the BizTalk Server Administration console 
&lt;/li&gt;&lt;li&gt;locate the send port or receive location that contains the BTAHL72XReceivePipeline or BTAHL72XSendPipeline pipeline. 
&lt;/li&gt;&lt;li&gt;Open the properties 
&lt;/li&gt;&lt;li&gt;To the right of the pipeline selected locate the […] ellipses button 
&lt;/li&gt;&lt;li&gt;In the property list, locate the "TrailingDelimiterAllowed" property and set it to True. 
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Advantage – All messages through a particular Send Port or Receive Location will allow trailing delimiters. 
&lt;/p&gt;&lt;p&gt;Disadvantage – Must configure each Send Port or Receive Location. No granular control over which remote parties will send or receive messages with trailing delimiters. 
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Using a custom pipeline that uses a pre-configured BTA HL7 Pipeline component. 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Use Visual Studio to construct a custom receive and send pipeline using the appropriate assembler or dissasembler. 
&lt;/li&gt;&lt;li&gt;Set the component property to "TrailingDelimitersAllowed" to True 
&lt;/li&gt;&lt;li&gt;Compile and deploy the custom pipeline 
&lt;/li&gt;&lt;li&gt;Use the custom pipeline instead of the standard pipeline for all HL7 message processing 
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Advantage – All messages using the custom pipeline will automatically allow trailing delimiters. 
&lt;/p&gt;&lt;p&gt;Disadvantage – Requires custom coding and development to create and deploy the custom pipeline. No granular control over which remote parties will send or receive messages with trailing delimiters. 
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;What does a Trailing Delimiter do to the XML Schema? 
&lt;/div&gt;&lt;p&gt;Allowing trailing delimiters does not have the impact often expected in the actual XML Schema.&lt;br /&gt;The Schema reproduces the message with no data loss.&lt;br /&gt;Thus, the message when represented in XML must contain the extra fields, in order to reproduce the outbound message.&lt;br /&gt;Thus, a trialing delimiter results in an empty XML field.&lt;br /&gt;Trailing Delmiters are not stripped from the inbound message. 
&lt;/p&gt;&lt;p&gt;Example:&lt;br /&gt;&amp;lt;PID_21&amp;gt;44172&amp;lt;/PID_21&amp;gt;&lt;br /&gt;&amp;lt;PID_21&amp;gt;9257&amp;lt;/PID_21&amp;gt; -&amp;gt; the original maximum number of repeats&lt;br /&gt;&amp;lt;PID_21&amp;gt;&amp;lt;/PID_21&amp;gt; -&amp;gt; The empty repeated field 
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Allowing trailing delimiters not remove the trailing delimiters from the message, it simply suppresses the check that will cause the message to fail parse with trailing delimiters. 
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;When can you not fix the problem by enabling trailing delimiters 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Each object in a message must have a location in the target BTAHL7 schema for its content to reside.&lt;br /&gt;If you have more objects in the message than are contained at that location, then enabling trailing delimiters will not resolve the problem. The schema must be extended to accommodate the empty message content.&lt;br /&gt;Examples: 
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;Extra Field 
&lt;/div&gt;&lt;p&gt;NTE|P||||&lt;br /&gt;Only 4 fields in NTE Segment, the 4&lt;sup&gt;th&lt;/sup&gt; field exists, but is empty. 
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Extra component 
&lt;/div&gt;&lt;p&gt;PID|1|1523|47^^^^^^^&lt;br /&gt;Only 5 components in a CX data type, the 5&lt;sup&gt;th&lt;/sup&gt; component exists, but is empty 
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Extra subcomponent 
&lt;/div&gt;&lt;p&gt;ORC|1|||||27&amp;amp;&amp;amp;&lt;br /&gt;Only 2 subcomponents in a CQ data type, the 3&lt;sup&gt;rd&lt;/sup&gt; subcomponent is empty, but exists. 
&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Extra Repeat 
&lt;/div&gt;&lt;p&gt;PID|1||||||||||||||||||||4419~5217~&lt;br /&gt;Only 2 repeats allowed for the field "Mother's identifier", the repeat is empty, but exists. 
&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;In each of these cases, you must locate the failing object and extend the type to allow an additional object of that type. 
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Field&lt;br /&gt;Add a field of ST to the end of the segment with a suitable name in the segments_nnn.xsd 
&lt;/li&gt;&lt;li&gt;Component 
&lt;/li&gt;&lt;li&gt;Create a new Custom CX data type (i.e. CX_XtraComp) in the datatypes_nnn.xsd and add a new component to the custom CX data type. Update the field in the segments_nnn.xsd file to use the custom data type instead of the standard datatype. 
&lt;/li&gt;&lt;li&gt;Subcomponent 
&lt;/li&gt;&lt;li&gt;Create a new Custom CQ data type that accepts an additional TS value at the end of the data type. Create a custom TQ data type that uses the new custom CQ data type as the first subcomponent. Modify the ORC segment to use the new CQ data type at ORC.7 instead of the standard CQ data type. 
&lt;/li&gt;&lt;li&gt;Repeat&lt;br /&gt;Modify the Field definition for PID.21 in the segments_nnn.xsd to allow more repeats in the field. 
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;  &lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=4264" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>File System permission for the BizTalk Server 2004 and BizTalk Server 2006 file adapter – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/22/4260.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/22/4260.aspx</id><published>2007-02-22T19:41:00Z</published><updated>2007-02-22T19:41:00Z</updated><content type="html">&lt;P&gt;I'm sure that over time you've run into the dreaded "File transport does not have read/write privileges for receive location "C:\ Flatfile\SAPTestIn\".". &lt;/P&gt;
&lt;P&gt;Usually you simply go to the folder and either give the BizTalk account full permission (bad) or Everyone full permission (really bad). &lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;So for a production environment, what is the absolute minimum permissions required? &lt;/P&gt;
&lt;P&gt;For the Receive File Adapter the explicit permission are: &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE&gt;




&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;NTFS Attribute&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;Property Name&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;DELETE&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Delete Files&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_READ_DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;List Folder / Read Data&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_WRITE_DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Create Files / Write Data&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_APPEND_DATA&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Create Folders / Append Data&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_READ_EA&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Read Extended Attributes&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_WRITE_EA&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Write Extended Attributes&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_DELETE_CHILD&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Delete Subfolders and Files&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_READ_ATTRIBUTES&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Read Permissions&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_WRITE_ATTRIBUTES&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Write Attributes&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;How does this translate into what to do in the System? &lt;/P&gt;
&lt;P&gt;Right clicking on the folder and in the security tab,&lt;BR&gt;setting "Modify" is not enough, though you would think so:&lt;BR&gt;&lt;IMG alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/022207_1941_FileSystemp1.png"&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Strangely enough the Delete Subfolders and Files attribute is not set when the Modify property is set, you need to add the&lt;BR&gt;FILE_DELETE_CHILD "Delete Subfolders and Files" Attribute:&lt;BR&gt;&lt;IMG alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/022207_1941_FileSystemp2.png"&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once you have added the Delete Subfolders and Files check box you will have the minimum permissions for the file receive adapter:&lt;BR&gt;&lt;IMG alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/022207_1941_FileSystemp3.png"&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;For the Send Adapter &lt;/P&gt;
&lt;P&gt;The permission for the File Send adapter depend on what properties you have set in the Adapter Advance properties:&lt;BR&gt;&lt;IMG alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/022207_1941_FileSystemp4.png"&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you have the "Use &lt;SPAN&gt;t&lt;/SPAN&gt;emporary file while writing" flag un-checked then all you need are: &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE&gt;




&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;NTFS Attribute&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;Property Name&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_WRITE_DATA&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Create Files / Write Data&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/022207_1941_FileSystemp5.png"&gt; &lt;/P&gt;
&lt;P&gt;If you have the "Use &lt;SPAN&gt;t&lt;/SPAN&gt;emporary file while writing" flag checked then the flags you need are: &lt;/P&gt;
&lt;DIV&gt;
&lt;TABLE&gt;




&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;NTFS Attribute&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;Property Name&lt;/STRONG&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;DELETE&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Delete Files&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_WRITE_DATA&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Create Files / Write Data&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_DELETE_CHILD&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Delete Subfolders and Files&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;FILE_READ_ATTRIBUTES&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;
&lt;TD&gt;
&lt;P&gt;&lt;SPAN&gt;Read Permissions&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;IMG alt="" src="http://www.neudesic.com/uploads/thomas_e_canter/022207_1941_FileSystemp6.png"&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=4260" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>Storing information for BizTalk Server 2004 and BizTalk Server 2006 – a new model is exposed – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/13/4244.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/13/4244.aspx</id><published>2007-02-13T23:02:00Z</published><updated>2007-02-13T23:02:00Z</updated><content type="html">&lt;p&gt;I've been reviewing and studying the CrossReferencing APIs because it looks like no one is using them, and I like to find new things to play with. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;I got a hint from &lt;a href="mailto:martywas@microsoft.com"&gt;Marty Wasznicky&lt;/a&gt; that they were written for a customer years ago "to provide a way to easily take an inbound value and cross it over to an outbound value." 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;As I thought about it, I realized that I do this all the time. For example, at a health care provider, I had inbound LabCorp Medical Testing values that had a one-to-one relationship with the electronic medical records (EMR) value. So, I could possibly use this to map values from one system to value to another system. 
&lt;/p&gt;&lt;p&gt;UC1 – Map inbound values to outbound values in a Map (pre-built functoids!) 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Then I was thinking about the fact that in my SAP System, the target system has values in the BAPI that are different between environments. For example, the OBJ_SYS value in the message changed. Instead of two maps with hard-coded values in them, I could use the xRef lookup to return the value that is appropriate for each system. 
&lt;/p&gt;&lt;p&gt;UC2 – Environmental Constants that change from system to system, but are shared across all servers in the same group used in Maps, Pipelines, or Orchestrations. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Then I got interested in using the APIs directly in the Orchestration. I realized that I could set a flag that turned on and off Debugging output that was specific for each component in the system Orchestration, Expression Shape, Exception, and so on. System.Diagnostics.Debug.WriteLineIf(Boolean, Debugstring, Category) 
&lt;/p&gt;&lt;p&gt;UC3 – Optional configuration values that could be used in Orchestrations to change behavior 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Then I finally realized that I could use these APIs to set variables in the Orchestration for use. For example, I wanted the Category in the Debug statement to be configurable. Once I figured that out, I realized that almost any variable in an Orchestration could be initialized and changed on the fly, constrained by some limits, that I've listed below. 
&lt;/p&gt;&lt;p&gt;UC4 – Variables that can be changed in the Orchestration or Pipelines (YES PIPELINES or Custom CODE!), as desired. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;The advantages of this approach are: 
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Variables are read at run time and require no restart of the Host Instance to apply the change. 
&lt;/li&gt;&lt;li&gt;The APIs and functoids are brutally easy to use. 
&lt;/li&gt;&lt;li&gt;The values take effect immediately. 
&lt;/li&gt;&lt;li&gt;This is the ONLY way I know of to change values in a map at run time because they provide built-in functoids for the APIs. 
&lt;/li&gt;&lt;li&gt;The security is controlled by the standard BizTalk Security model. No additional security management is required. 
&lt;/li&gt;&lt;li&gt;Unlike the BTSNTSvc.exe.config file, erroneous changes to the data will not cause the service to fail to start. 
&lt;/li&gt;&lt;li&gt;The config is shared simultaneously across all the servers automatically. 
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Disadvantages are: 
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;The fields are limited to 50 characters. 
&lt;/li&gt;&lt;li&gt;The Name (AppID) and Values (CommonID) must be each unique. You cannot have duplicate values in either column. 
&lt;/li&gt;&lt;li&gt;The method to feed values into the system leaves much to be desired. It's a complex set of XML config files, and the development of them is an arcane art -&amp;gt; I may be induced to build a creator tool that generates them. 
&lt;/li&gt;&lt;li&gt;Once a value is into the system, there is only one class of values that can be deleted. A lot of the remainder can't be deleted or even updated. I have concentrated my efforts on the ones that are updatable due to this reason. 
&lt;/li&gt;&lt;li&gt;The data is stored in the BizTalkMgmtDb, which is not normally optimized heavily because that it is a low usage database. So you have to be careful that there is sufficient room on the where that the database resides if you plan on putting many records into the system. 
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Here are the four APIs that I am concentrating on: 
&lt;/p&gt;&lt;p&gt;Basically two ways to Get, by Name (AppID) and Value (CommonID) 
&lt;/p&gt;&lt;p&gt;One way to delete by Name (AppID) which deletes the Pair 
&lt;/p&gt;&lt;p&gt;One way to Create by Name (AppID) which can generate a Base64 encoded GUID for the Value so that you can simply use it as a flag to indicate that you saw the value. 
&lt;/p&gt;&lt;p&gt;                PENDING-&amp;gt; How to use the CrossReferencing APIs to guarantee unique messages! 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Microsoft.BizTalk.CrossReferencing Namespace (some of the interesting APIs, and YES I expect someone to read about them) 
&lt;/p&gt;&lt;p&gt;&lt;span&gt;public static &lt;strong&gt;string&lt;/strong&gt; GetAppID ( &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;idXRef&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;appInstance&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;commonID&lt;/em&gt;
		&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;) &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;public static &lt;strong&gt;string&lt;/strong&gt; GetCommonID ( &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;idXRef&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;appInstance&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;appID&lt;/em&gt;
		&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;) &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;public static &lt;strong&gt;bool&lt;/strong&gt; RemoveAppID ( &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;idXRef&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;appInstance&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;appID&lt;/em&gt;
		&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;) &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;public static &lt;strong&gt;string&lt;/strong&gt; SetCommonID ( &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;idXRef&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;appInstance&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;appID&lt;/em&gt;, &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;       &lt;strong&gt;string&lt;/strong&gt;
			&lt;em&gt;commonID&lt;/em&gt;
		&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;) &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;How to use these APIs? 
&lt;/p&gt;&lt;p&gt;Below is a representation of the table structure: 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.neudesic.com/uploads/thomas_e_canter/021307_1502_Storinginfo1.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;Ok, so you have to have an AppType, it is required for the AppInstance and xRef datatable. 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ListOfAppType.xml 
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;appType&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;ApplicationOne&lt;/strong&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;appType&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;Then you create the App Instance that has one and only one AppInstance per AppType and is never used anywhere else. 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ListOfAppInstance.xml 
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;ApplicationOne_01&lt;/strong&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;ApplicationOne&lt;/strong&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Now we start on the right side of the tree that contains the "Group" values, idXRef 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ListOfValueXRef.xml 
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;valueXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;strong&gt;Credit Term&lt;/strong&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;valueXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Then we build the common table that relates idXRef (Group) to AppInstance (Application) 
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ListOfValueXRef_Data.xml 
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;valueXRef&lt;/span&gt;&lt;span&gt;
				&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;/span&gt;&lt;span&gt;Credit Term&lt;/span&gt;&lt;span&gt;"&lt;span&gt;&amp;gt; &amp;lt;- This is the Group &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;appType&lt;/span&gt;&lt;span&gt;
				&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;/span&gt;&lt;span&gt;&lt;strong&gt;ApplicationOne&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;"&lt;span&gt;&amp;gt; &amp;lt;- This is the Application &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;appValue&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;&lt;strong&gt;commonValue&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;Credit Term 1&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;001&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;appValue&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appValue&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonValue&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;Credit Term 2&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;002&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appValue&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appValue&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonValue&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;Credit Term 3&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;003&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appValue&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appValue&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonValue&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;Credit Term 4&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;004&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appValue&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;appType&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;valueXRef&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;The AppValue is the Name field and the CommonValue is the V alue field. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;In the application I wrote: 
&lt;/p&gt;&lt;p&gt;Group: Credit Term 
&lt;/p&gt;&lt;p&gt;Application: ApplicationOne_01 
&lt;/p&gt;&lt;p&gt;Name: 001 
&lt;/p&gt;&lt;p&gt;Value: Credit Term 2 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;To create or update a value in the table: 
&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;if&lt;/span&gt; (&lt;span&gt;CrossReferencing&lt;/span&gt;.GetCommonID(&lt;span&gt;"Credit Term"&lt;/span&gt;, &lt;span&gt;"ApplicationOne_01"&lt;/span&gt;, &lt;span&gt;"001"&lt;/span&gt;).Length &amp;gt; 0) &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;{ &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;CrossReferencing&lt;/span&gt;.RemoveAppID(&lt;span&gt;"Credit Term"&lt;/span&gt;, &lt;span&gt;"ApplicationOne_01"&lt;/span&gt;, &lt;span&gt;"001"&lt;/span&gt;); &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;} &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;TheReturnString&lt;/span&gt; = &lt;span&gt;CrossReferencing&lt;/span&gt;.SetCommonID(&lt;span&gt;"Credit Term"&lt;/span&gt;, &lt;span&gt;"ApplicationOne_01"&lt;/span&gt;, &lt;span&gt;"001"&lt;/span&gt;, "Credit Term 2"); &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;TheReturnString will equal "Credit Term 2" if successful. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;How do I use this in an Orchestration? 
&lt;/p&gt;&lt;p&gt;One way to use this is to drive your Debugging code at run time. 
&lt;/p&gt;&lt;p&gt;For instance, I created the following entries: 
&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;lt;&lt;strong&gt;Setupfile.xml&lt;/strong&gt;&amp;gt; &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;1.0&lt;/span&gt;"&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;UTF-8&lt;/span&gt;"&lt;span&gt;?&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Setup-Files&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;!--&lt;/span&gt;&lt;span&gt;btsxrefimport –file=setupfile.xml&lt;/span&gt;&lt;span&gt;--&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;App_Type_file&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;ListOfAppType.xml&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;App_Type_file&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;App_Instance_file&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;ListOfAppInstance.xml&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;App_Instance_file&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;IDXRef_file&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;ListOfIDXRef.xml&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;IDXRef_file&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;IDXRef_Data_file&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;ListOfIDXRefData.xml&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;IDXRef_Data_file&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;Setup-Files&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;strong&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;ListOfAppType.xml&amp;gt;&lt;span&gt;
				&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;1.0&lt;/span&gt;"&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;utf-8&lt;/span&gt;"&lt;span&gt;?&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;listOfAppType&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;appType&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Neudesic.Integration.BizTalk.GE.InvXRef&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;appType&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;listOfAppType&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;strong&gt;ListOfAppInstance.xml&lt;/strong&gt;&amp;gt;&lt;span&gt;&lt;strong&gt;
				&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;1.0&lt;/span&gt;"&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;UTF-8&lt;/span&gt;"&lt;span&gt;?&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;listOfAppInstance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Orchestration.Variables&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Neudesic.BizTalk.GE.Variables&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;listOfAppInstance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;lt;&lt;strong&gt;ListOfIDXRef.xml&lt;/strong&gt;&amp;gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;1.0&lt;/span&gt;"&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;utf-8&lt;/span&gt;"&lt;span&gt; ?&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;listOfIDXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;idXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;Acetta.Janus.Integration.BizTalk.GE.Invoicing&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;idXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;listOfIDXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;strong&gt;ListOfIDXRefData.xml&lt;/strong&gt;&amp;gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;1.0&lt;/span&gt;"&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;utf-8&lt;/span&gt;"&lt;span&gt; ?&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;listOfIDXRefData&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;idXRef&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;Neudesic.Integration.BizTalk.GE.Invoicing&lt;/span&gt;"&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;Orchestration.Variables&lt;/span&gt;"&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;true&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;Debug&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;ReceiveInvoiceFromSalesforceAndTransform&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;DebugCategory&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;idXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;listOfIDXRefData&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;Now in the expression shape access the Debug and Debug category Variables: 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.neudesic.com/uploads/thomas_e_canter/021307_1502_Storinginfo2.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Finally, let's use it to determine that Debugging is enabled and we should print out to the Debug Console: 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.neudesic.com/uploads/thomas_e_canter/021307_1502_Storinginfo3.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;How about Maps? 
&lt;/p&gt;&lt;p&gt;The CrossReference APIs were designed with Map usage in mind. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Here I set values that I need for BAPI calls to SAP: 
&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;1.0&lt;/span&gt;"&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;utf-8&lt;/span&gt;"&lt;span&gt; ?&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;listOfIDXRefData&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;&lt;/span&gt;&lt;span&gt;idXRef&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;Neudesic.Integration.BizTalk.GE.Invoicing&lt;/span&gt;"&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;X_InvoiceAPApprovedToBAPI_ACC_INVOICE_RECEIPT_POST&lt;/span&gt;"&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;2300000000&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;SAPDocFormatString&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;SFDOCNO000000000&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;REF_DOC_NO_FormatString&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;BKPFD&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;OBJ_TYPE&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;SAPDEP004&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;OBJ_SYS&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;42&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;COMP_CODE&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;            &amp;lt;&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;span&gt;commonID&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;"&lt;span&gt;T1&lt;/span&gt;"&lt;span&gt;&amp;gt;&lt;/span&gt;DOC_TYPE&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appID&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;        &amp;lt;/&lt;/span&gt;&lt;span&gt;appInstance&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;    &amp;lt;/&lt;/span&gt;&lt;span&gt;idXRef&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;listOfIDXRefData&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.neudesic.com/uploads/thomas_e_canter/021307_1502_Storinginfo4.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt;This returns the OBJ_SYS parameter that varies from Production and Development, this means I don't have to recompile the Map between production and development: 
&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.neudesic.com/uploads/thomas_e_canter/021307_1502_Storinginfo5.png" alt="" /&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;At the end of the day the CrossReferencing API's and using them effectively will reduce custom code and recompilation in your Maps, Orchestrations and pipelines.&lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=4244" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>Removing DTA (Tracking) Data permanently in BizTalk Server 2004 and BizTalk Server 2006 – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/11/Removing_Tracking_Data_permanently_in_BizTalk_Server_2004_and_2006.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/11/Removing_Tracking_Data_permanently_in_BizTalk_Server_2004_and_2006.aspx</id><published>2007-02-12T04:45:00Z</published><updated>2007-02-12T04:45:00Z</updated><content type="html">To remove data and keep the BizTalk Server 2004 and BizTalk Server 2006 healthy you have to enable the BizTalk Backup jobs. This process talks about why and what to do if you do not want to archive tracking data....(&lt;a href="http://blogs.neudesic.comhttp://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/02/11/Removing_Tracking_Data_permanently_in_BizTalk_Server_2004_and_2006.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=4241" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>Connecting SalesForce notifications WebServices to BizTalk Server 2006 – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/01/17/3451.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2007/01/17/3451.aspx</id><published>2007-01-17T15:12:00Z</published><updated>2007-01-17T15:12:00Z</updated><content type="html">&lt;p&gt;At a recent client, the Salesforce developer (Doug Auerbach of &lt;a href="http://www.avanade.com/"&gt;Avanade&lt;/a&gt;) pointed out that the newest release (&lt;a href="https://wiki.apexdevnet.com/index.php/What%27s_New_in_Apex_Web_Services_API_Winter_%2707"&gt;&lt;span&gt;What's New in Apex Web Services API Winter '07&lt;/span&gt;&lt;/a&gt;) has the capability for Salesforce to call external WebServices with Notification messages. You can wire up a large range of events using various rules and use them to generate custom WSDL that, when exposed by your application, Salesforce will call with the data object specified. Tim Dutcher, the Technical Director at &lt;a href="http://www.acetta.com/"&gt;&lt;span&gt;Acetta&lt;/span&gt;&lt;/a&gt;, agreed to pursue the possibility of using this new functionality.
&lt;/p&gt;&lt;p&gt;In BizTalk Server 2006, we approached the solution from the viewpoint of exposing a BizTalk Orchestration as a WebService that consumed the WSDL generated by the Salesforce wizard. The WebService is a two-way send-receive port. The initiating event is a notificationsRequest ,and then we respond with a notificationsResponse message. The notificationsRequest is a sample api (not a real world sample) that contains two objects:
&lt;/p&gt;&lt;p&gt;Id – the ID of the sent object&lt;br /&gt;sObject – a repeating xml:Any node that contains a node of the types specified in the Salesforce wizard as a generic sObject and a RecordTypeId that specifies the type of the incoming object.
&lt;/p&gt;&lt;p&gt;After the WSDL was in place, I created a simple Orchestration that received the Notification message and returned the response message consisting of a simple XML &lt;a href="http://www.w3.org/TR/xmlschema-2/"&gt;boolean&lt;/a&gt; flag (Ack) indicating success or failure.
&lt;/p&gt;&lt;p&gt;We pointed the Salesforce engine at the exposed WebService and immediately got an error response in the Salesforce outbound message queue:
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Server did not recognize the value of HTTP Header SOAPAction (URL).
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Inspection of the WebService that was provided by Salesforce indicated that the SOAPAction property was set to "", an empty string.&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;After some searching for the error message Tim Dutcher found a &lt;a href="http://blogs.mit.edu/CS/blogs/doval/archive/2006/08/04/60330.aspx"&gt;&lt;span&gt;web&lt;/span&gt;&lt;/a&gt; site (there are many) that told us to add the following attribute to the WebService Class:
&lt;/p&gt;&lt;p&gt;[SoapDocumentServiceAttribute(RoutingStyle=&lt;a href="http://msdn2.microsoft.com/en-gb/library/system.web.services.protocols.soapserviceroutingstyle.aspx"&gt;&lt;span&gt;SoapServiceRoutingStyle&lt;/span&gt;&lt;/a&gt;.RequestElement)]
&lt;/p&gt;&lt;p&gt;After appending this attribute to the existing attribute list, we were able to complete a round trip communication between BizTalk and Salesforce.&lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=3451" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>the new SysInternals site at Microsoft -&amp;amp;amp;gt; New tools! Useful for BizTalk Server 2006 and 2004- Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2006/12/27/1368.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2006/12/27/1368.aspx</id><published>2006-12-28T02:50:00Z</published><updated>2006-12-28T02:50:00Z</updated><content type="html">&lt;p&gt;Microsoft has already started incorporating the SysInternals product line into the MS line. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/technet/sysinternals/default.mspx"&gt;http://www.microsoft.com/technet/sysinternals/default.mspx&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;They have released an update of Procmon 
&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/technet/sysinternals/processesandthreads/processmonitor.mspx" target="_blank"&gt;&lt;span&gt;&lt;strong&gt;Announcing Process Monitor v1.0&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;strong&gt;
			&lt;/strong&gt;&lt;/span&gt;
	&lt;/p&gt;&lt;p&gt;&lt;span&gt;We're excited to announce the release of Process Monitor, a system monitoring tool that not only replaces Regmon and Filemon by including file system and registry monitoring, but adds process, thread, and DLL monitoring as well as advanced filtering, event information, and basic data mining capabilities. &lt;/span&gt;
	&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;I highly recommend it!&lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=1368" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>What Ports does BizTalk Server 2006 or BizTalk Server 2004 require to be open in the firewall? – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2006/12/27/1367.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2006/12/27/1367.aspx</id><published>2006-12-28T02:48:00Z</published><updated>2006-12-28T02:48:00Z</updated><content type="html">&lt;p&gt;&lt;span&gt;&lt;span&gt;Required Ports for BizTalk Server&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bts06coredocs/html/a11cec7a-de97-47f9-9153-0be82d694fab.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bts06coredocs/html/a11cec7a-de97-47f9-9153-0be82d694fab.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Also listing the:&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the Receive and Send Servers&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/19cafe74-6676-4779-8ced-de0841dba19f.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/19cafe74-6676-4779-8ced-de0841dba19f.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the Administration Server&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/dc0094b2-5ba2-4b8f-84aa-b6232be358ee.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/dc0094b2-5ba2-4b8f-84aa-b6232be358ee.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the Tracking Server&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/4b4913a4-7d8d-4fd0-a116-ba868c4ad7da.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/4b4913a4-7d8d-4fd0-a116-ba868c4ad7da.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the Processing Servers&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/0207b68f-8769-4674-aadc-b3a67b6f210b.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/0207b68f-8769-4674-aadc-b3a67b6f210b.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the Enterprise Single Sign-On Servers&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/30eb99f9-02cb-43c9-b038-d7bd898e3a7a.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/30eb99f9-02cb-43c9-b038-d7bd898e3a7a.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the Human Workflow Services Server&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/15c46422-adc0-4d0c-a66e-6cbc162b4b9c.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/15c46422-adc0-4d0c-a66e-6cbc162b4b9c.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the Business Activity Services and Administration Computer in the Corporate Domain&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/757b7b02-6ace-4db1-a403-2170f1205d2b.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/757b7b02-6ace-4db1-a403-2170f1205d2b.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Ports for the BAM Portal Server&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/bts06coredocs/html/df67c31c-a7a3-4bff-9374-0d8a0cf0ad21.asp"&gt;&lt;span&gt;http://msdn.microsoft.com/library/en-us/bts06coredocs/html/df67c31c-a7a3-4bff-9374-0d8a0cf0ad21.asp&lt;/span&gt;&lt;/a&gt;&lt;span&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;You probably already know of:&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span&gt;Service overview and network port requirements for the Windows Server system&lt;/span&gt;&lt;span&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;832017"&gt;&lt;span&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;832017&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=1367" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry><entry><title>The New VirtualStream in BizTalk Server 2006 – Blog Entry</title><link rel="alternate" type="text/html" href="http://blogs.neudesic.com/blogs/enterprise_integration/archive/2006/12/27/1366.aspx" /><id>http://blogs.neudesic.com/blogs/enterprise_integration/archive/2006/12/27/1366.aspx</id><published>2006-12-28T02:41:00Z</published><updated>2006-12-28T02:41:00Z</updated><content type="html">&lt;p&gt;I bet you are all drooling over the new VirtualStream support in BizTalk Server 2006. With this, you can access a forward-read only stream as if it was a fully implemented stream with backward and forward access to the data. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;The VIrtualStream is implemented in the undocumented API's but is also exposed in the SDK as VirtualStream.cs, so I feel pretty safe in using the deployed version. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;But, the use of the VirtualStream is not what this about, this is about the security implications of the VirtualStream. The VS supports a disk caching scheme to store large streams… 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;As such, this means that the stream size in the cache can be quite large and you _&lt;em&gt;generally&lt;/em&gt;_ don't have to worry about it, but in fact you do because this can fail in subtle an unexpected ways. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Two things can go wrong in this scenario. 
&lt;/p&gt;&lt;p&gt;Understand that the stream is cached to the BizTalk Server Host Instance account's %TEMP% folder, generally under: 
&lt;/p&gt;&lt;p&gt;C:\Documents and Settings\&amp;lt;BTSHostInstanceName&amp;gt;\Local Settings\Temp 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;The first problem I see here is that the C: Drive is NOT a good place to put large files that grow unexpectedly. The IO performance is poor and in addition, you could exhaust the drive space unexpectedly. So I recommend setting the BizTalk Host Instance's TEMP folder manually to a separate drive, preferably a non-backed up high speed disk. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;Ok, so now you have the TEMP folder set to a separate drive, the second problem that could occur is that the BizTalk Host Instance account may not have Read-Write access to that folder. When the account is logged on the first time, the OS builds the account's local folder structure and gives it the correct access, but you need to manually set this when you manually set the TEMP folder location. 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;So: 
&lt;/p&gt;&lt;p&gt;1)&lt;span&gt;      &lt;/span&gt;Try to move the TEMP folder of the BizTalk Host Instance account to a large and non-OS used drive 
&lt;/p&gt;&lt;p&gt;2)&lt;span&gt;      &lt;/span&gt;Make sure that BizTalk Host Instance account has full control of the folder 
&lt;/p&gt;&lt;p&gt; 
 &lt;/p&gt;&lt;p&gt;That's it, then you won't get surprising failures in your pipeline when processing large files.&lt;/p&gt;&lt;img src="http://blogs.neudesic.com/aggbug.aspx?PostID=1366" width="1" height="1"&gt;</content><author><name>Thomas E. Canter</name><uri>http://blogs.neudesic.com/members/Thomas+E.+Canter.aspx</uri></author></entry></feed>