<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-21774696</id><updated>2009-11-13T16:37:09.771-08:00</updated><title type='text'>Steve's Tech Notes</title><subtitle type='html'>A place for me to store and share some technical notes about BizTalk or whatever else I'm working with at the moment.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-21774696.post-5614032609041469798</id><published>2009-04-27T18:03:00.001-07:00</published><updated>2009-04-27T18:14:04.636-07:00</updated><title type='text'></title><content type='html'>Today I was working with a pipeline component which encrypted fields in an XML message, for sensitive information. I realized that I needed to use it with a Flat File disassembler, which means that the original message was not XML, so I had to put my component after the Flat File disassembler. For various reasons, I wanted to use my component no later than the Dissasembler stage for this scenario.&lt;br /&gt;&lt;br /&gt;So first, I added IDisassemblerComponent to the list of interfaces being implemented in my pipeline component class.&lt;br /&gt;&lt;br /&gt;Then, I added the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        private bool beginMessage = false;&lt;br /&gt;        private IPipelineContext pContext;&lt;br /&gt;        private IBaseMessage pInMsg;&lt;br /&gt;&lt;br /&gt;        void IDisassemblerComponent.Disassemble(IPipelineContext pContext, IBaseMessage pInMsg)&lt;br /&gt;        {&lt;br /&gt;            beginMessage = true;&lt;br /&gt;            this.pContext = pContext;&lt;br /&gt;            this.pInMsg = pInMsg;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        IBaseMessage IDisassemblerComponent.GetNext(IPipelineContext pContext)&lt;br /&gt;        {&lt;br /&gt;            beginMessage = false;&lt;br /&gt;            if (beginMessage)&lt;br /&gt;            {&lt;br /&gt;                return Execute(pContext, pInMsg);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                return null;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will only work if the previous disassembler is supposed to produce one message.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-5614032609041469798?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/5614032609041469798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=5614032609041469798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/5614032609041469798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/5614032609041469798'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2009/04/today-i-was-working-with-pipeline.html' title=''/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-3524532468869536054</id><published>2008-10-29T16:11:00.000-07:00</published><updated>2008-10-29T16:14:58.074-07:00</updated><title type='text'>Find a Specific Value Anywhere in a SQL Server Database</title><content type='html'>I can't tell you how often in the past I could have used this script from David Yardy's blog:&lt;br /&gt;&lt;a href="http://blog.davidyardy.com/archive/2008/08/16/sql-server-ndash-find-field-value-in-database.aspx"&gt;http://blog.davidyardy.com/archive/2008/08/16/sql-server-ndash-find-field-value-in-database.aspx&lt;br /&gt;&lt;/a&gt;I can find a string value anywhere it exists in a field in my database. As he says, it can easily be modified to search for values that are not strings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-3524532468869536054?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/3524532468869536054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=3524532468869536054' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/3524532468869536054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/3524532468869536054'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2008/10/find-specific-value-anywhere-in-sql.html' title='Find a Specific Value Anywhere in a SQL Server Database'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-2273397303057734870</id><published>2008-10-09T15:05:00.000-07:00</published><updated>2008-10-09T17:39:37.182-07:00</updated><title type='text'></title><content type='html'>Today I was attempting to use the Session object to exchange information between two ASP .Net pages. I received the following exception when I tried to assign something to it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;System.Web.HttpException was unhandled by user code&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Message="Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive. Please also make sure that System.Web.SessionStateModule or a custom session state module is included in the &lt;configuration&gt;\\&lt;system.web&gt;\\&lt;httpmodules&gt; section in the application configuration."&lt;/httpmodules&gt;&lt;/system.web&gt;&lt;/configuration&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Source="System.Web"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ErrorCode=-2147467259&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  StackTrace:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at System.Web.UI.Page.get_Session()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at AddToCart.SaveCustomFields() in c:\Inetpub\wwwroot\StarterSite\AddToCart.aspx.cs:line 485&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at AddToCart.AddItemToCart() in c:\Inetpub\wwwroot\StarterSite\AddToCart.aspx.cs:line 490&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at AddToCart.btnAddToCart_Click(Object sender, EventArgs e) in c:\Inetpub\wwwroot\StarterSite\AddToCart.aspx.cs:line 300&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Based on information I found on the web, I first tried to set&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt; EnableSessionState="True"&lt;/span&gt;&lt;/span&gt; on every page that needed to use the session, and that didn't cure the issue.&lt;br /&gt;&lt;br /&gt;Next, I tried setting &lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;pages enableSessionState="true"&amp;gt;&lt;/span&gt; in the Web.config file under configuration/system.web. That didn't fix it either.&lt;br /&gt;&lt;br /&gt;Finally, what worked was to put this into the Web.config:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;sessionState mode="InProc"&amp;gt;&amp;lt;/sessionState&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;(also under configuration/system.web).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-2273397303057734870?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/2273397303057734870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=2273397303057734870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/2273397303057734870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/2273397303057734870'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2008/10/today-i-was-attempting-to-use-session.html' title=''/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-3950583877756060709</id><published>2008-09-04T17:17:00.000-07:00</published><updated>2008-09-04T17:37:27.506-07:00</updated><title type='text'>SQL Server 2000 - Finding a Field in a Database</title><content type='html'>Today I was looking for a field in a SQL Server 2000 database which had lots of tables. I knew the name of the field, but I didn't know the table name. So I modified the code contained in &lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-family:courier new;"&gt;master.dbo.sp_columns&lt;/span&gt;&lt;/span&gt; to find it. It turns out that in my case, I was looking for a field that didn't exist. Hopefully you'll have better luck.&lt;br /&gt;&lt;br /&gt;To use this, replace the words &lt;span style="font-weight: bold;"&gt;your field here&lt;/span&gt; in the next-to-last line.&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;      &lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;        SELECT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            TABLE_QUALIFIER = convert(sysname,DB_NAME()),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            TABLE_OWNER = convert(sysname,USER_NAME(o.uid)),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            TABLE_NAME = convert(sysname,o.name),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            COLUMN_NAME = convert(sysname,c.name),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            d.DATA_TYPE,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            convert (sysname,case&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                when t.xusertype &gt; 255 then t.name&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                else d.TYPE_NAME collate database_default&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            end) TYPE_NAME,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            convert(int,case&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                when d.DATA_TYPE in (6,7) then d.data_precision         /* FLOAT/REAL */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                else OdbcPrec(c.xtype,c.length,c.xprec)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            end) "PRECISION",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            convert(int,case&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                when type_name(d.ss_dtype) IN ('numeric','decimal') then    /* decimal/numeric types */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    OdbcPrec(c.xtype,c.length,c.xprec)+2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    isnull(d.length, c.length)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            end) LENGTH,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            SCALE = convert(smallint, OdbcScale(c.xtype,c.xscale)),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            d.RADIX,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            NULLABLE = convert(smallint, ColumnProperty (c.id, c.name, 'AllowsNull')),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            REMARKS = convert(varchar(254),null),    /* Remarks are NULL */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            COLUMN_DEF = text,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            d.SQL_DATA_TYPE,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            d.SQL_DATETIME_SUB,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            CHAR_OCTET_LENGTH = isnull(d.length, c.length)+d.charbin,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            ORDINAL_POSITION = convert(int,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                       (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                        select count(*)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                        from syscolumns sc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                        where sc.id     =  c.id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                          AND sc.number =  c.number&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                          AND sc.colid  &lt;= c.colid&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                        )),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            IS_NULLABLE = convert(varchar(254),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                substring('NO YES',(ColumnProperty (c.id, c.name, 'AllowsNull')*3)+1,3)),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            SS_DATA_TYPE = c.type&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        FROM&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            sysobjects o,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            master.dbo.spt_datatype_info d,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            systypes t,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            syscolumns c&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            LEFT OUTER JOIN syscomments m on c.cdefault = m.id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                AND m.colid = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        WHERE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;--            o.id = @table_id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            c.id = o.id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            AND t.xtype = d.ss_dtype&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            AND c.length = isnull(d.fixlen, c.length)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            AND (o.type not in ('P', 'FN', 'TF', 'IF') OR (o.type in ('TF', 'IF') and c.number = 0))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            AND isnull(d.AUTO_INCREMENT,0) = isnull(ColumnProperty (c.id, c.name, 'IsIdentity'),0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            AND c.xusertype = t.xusertype&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            AND c.name like '%your field here%'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-3950583877756060709?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/3950583877756060709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=3950583877756060709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/3950583877756060709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/3950583877756060709'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2008/09/sql-server-2000-finding-field-in.html' title='SQL Server 2000 - Finding a Field in a Database'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-2472218243412919590</id><published>2008-02-13T09:14:00.000-08:00</published><updated>2008-02-13T09:27:28.202-08:00</updated><title type='text'>Deploy Problem From Within Visual Studio</title><content type='html'>Yesterday I was trying to deploy a BizTalk solution from within Visual Studio and I saw all kinds of strange errors. I started trimming down the app, deleting schemas, pipelines, and I still saw errors. Then I deleted the entire application in the BizTalk Console, and when I tried to deploy I saw this error in Visual Studio:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;Error 25 Failed to add resource(s). Change requests failed for some  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;resources. BizTalkAssemblyResourceManager failed to complete end type change  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;request. Failed to update binding information. Party 'PartyName' enlisted  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;under role  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'ResaleReportReceiver(MyCompany.B2B.ResaleReport.Process.SendResaleReportRoleLink_Type)'  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;has not bound all the operations of role link port types.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The last thing I tried was to go through each project and to set Redeploy= false, and then delete the project. That worked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-2472218243412919590?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/2472218243412919590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=2472218243412919590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/2472218243412919590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/2472218243412919590'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2008/02/deploy-problem-from-within-visual.html' title='Deploy Problem From Within Visual Studio'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-7429989197866533472</id><published>2008-02-06T11:07:00.000-08:00</published><updated>2008-07-28T16:08:20.825-07:00</updated><title type='text'></title><content type='html'>I was trying to get a send port working in a BizTalk app the other day, but it kept failing with the following message:&lt;br /&gt;&lt;br /&gt;                      &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:9;"  &gt;Event Type:  Error&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Event Source: BizTalk Server 2006&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Event Category:     BizTalk Server 2006 &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Event ID:    5754&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Date:        2/5/2008&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Time:        6:06:56 PM&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;User:        N/A&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Computer:    ACME31&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Description:&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;A message sent to adapter "FILE" on send port "ACME.B2B.ResaleReport.Port.Snd.Http.OneWay.Test.eBI.Steve" with URI "C:\Dev\ACME.B2B.ResaleReport\OneWayPorts\DB2\%MessageID%.xml" is suspended. &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;Error details: The system cannot find the file specified. (Exception from HRESULT: 0x80070002) &lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;MessageId:  {4E99E4FF-5E09-441E-8AB2-2A83FB49B3A6}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;InstanceID: {0BFBB93E-3352-4354-A1C7-A153FE90A42C}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;span style=";font-family:&amp;quot;;font-size:9;"  &gt;For more information, see Help and Support Center at &lt;a href="http://go.microsoft.com/fwlink/events.asp"&gt;http://go.microsoft.com/fwlink/events.asp&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When I removed the map from the send port, I was able to get a message out with no errors.&lt;br /&gt;&lt;br /&gt;I was stumped until I tried to run the map inside of Visual Studio, and then I saw this message:&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:9;"  &gt;Invoking component...&lt;br /&gt;C:\Dev\ACME.B2B.ResaleReport\ACME.B2B.ResaleReport.Transforms.Premier\ResaleReport_To_EDI867.btm: error btm1067: The external assembly with the fully qualified name "ACME.B2B.ResaleReport.Utilities, Version=1.1.0.0, Culture=neutral, PublicKeyToken=ffee3e80c6a877dd" cannot be invoked. Make sure this assembly is in GAC.&lt;br /&gt;Test Map used the following file: &lt;file: xml=""&gt; as input to the map.&lt;br /&gt;Test Map success for map file C:\Dev\ACME.B2B.ResaleReport\ACME.B2B.ResaleReport.Transforms.Premier\ResaleReport_To_EDI867.btm. The output is stored in the following file: &lt;file: xml=""&gt;&lt;br /&gt;Component invocation succeeded.&lt;/file:&gt;&lt;/file:&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:9;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From this, it was easy to see that there were some custom functoids in the map that were not deployed to the GAC. I deployed the DLL containing the functoids, and the error was fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-7429989197866533472?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/7429989197866533472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=7429989197866533472' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/7429989197866533472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/7429989197866533472'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2008/02/i-was-trying-to-get-send-port-working.html' title=''/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-1250615072529611883</id><published>2007-09-17T13:02:00.000-07:00</published><updated>2007-10-30T11:04:04.998-07:00</updated><title type='text'></title><content type='html'>I was helping a client upgrade their BizTalk Server 2004 machine from an evaluation version of the SAP Adapter to the paid version. We got an interesting error warning in the Application Event Log right after the upgrade:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Event Type:    Warning&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Event Source:  SQLSERVERAGENT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Event Category:        Job Engine &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Event ID:      208&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Date:          9/17/2007&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Time:          2:09:03 PM&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;User:          N/A&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Computer: XXXXXX&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SQL Server Scheduled Job 'MessageBox_Message_ManageRefCountLog_BizTalkMsgBoxDb' (0xD3864F44666B084B85AE11128905F6AE) - Status: Failed - Invoked on: 2007-09-17 14:09:03 - Message: The job failed.  The Job was invoked by Schedule 19 (Schedule).  The last step to run was step 1 (Purge).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This warning repeated every minute.&lt;br /&gt;&lt;br /&gt;The problem was that when we installed the adapter, the job mentioned above had it's owner changed from the local BizTalk administrator to the "regular" BizTalk user. We changed the user to match all of the other BizTalk jobs in SQL, and no more warning messages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-1250615072529611883?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/1250615072529611883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=1250615072529611883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/1250615072529611883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/1250615072529611883'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2007/09/i-was-helping-client-upgrade-their.html' title=''/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-8184798308019528343</id><published>2007-03-01T13:09:00.000-08:00</published><updated>2007-03-01T13:25:19.686-08:00</updated><title type='text'>EDI R2 Issue (Not a Bug)</title><content type='html'>I recently implemented two outbound EDI transactions for a client, an 852 and an 867 to a single customer. I found that I was only able to send a single value for the GS01 element to a particular partner, even though I had entered a line for each transaction in the EDI setup for that partner.&lt;br /&gt;&lt;br /&gt;In the EDI setup parameters for a partner (X12 Properties/Party as Interchange Receiver/X12 Interchange Envelope Definition/GS and ST Segment Definition), you can enter multiple lines to set up GS segments for different transactions for that partner. Normally, for an 867 the GS01 element should have the value “PT”, and the 852 should have the value “PD”. What actually happened is that if a particular line was set to be the “default”, the values on that line were being used for all transactions. And there is no way to avoid setting one of the lines as default.&lt;br /&gt;&lt;br /&gt;The problem in this case went back to the EDI R2 tutorial. I blindly copied the parameters for my transactions from the outbound parameters that they had set up for the partner named "THEM". The target namespace was set to &lt;pre&gt;http://schemas.microsoft.com/Edi/X12&lt;/pre&gt;, whereas for my configuration it needed to be set to &lt;pre&gt;http://schemas.microsoft.com/Edi/X12/2006&lt;/pre&gt;. The ST1 value, version, and namespace are all used to identify the line that applies to the particular outbound transaction, and the rest of the parameters on that line are then used to build the GS segment. This is clearly specified later on in the documentation, on a page called "Configuring X12 Interchange Envelope Generation" under:&lt;br /&gt;&lt;em&gt;Development &gt; Developing BizTalk Server EDI Solutions &gt; Configuring a Party for an EDI Solution &gt; Configuring X12-Specific Party Properties&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-8184798308019528343?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/8184798308019528343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=8184798308019528343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/8184798308019528343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/8184798308019528343'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2007/03/edi-r2-issue-not-bug.html' title='EDI R2 Issue (Not a Bug)'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-8945135025104404907</id><published>2007-02-21T17:03:00.000-08:00</published><updated>2007-03-01T13:09:00.729-08:00</updated><title type='text'>BizTalk Orchestration Error Message</title><content type='html'>Sometimes when I'm editing an &lt;b&gt;Expression&lt;/b&gt; shape in an orchestration, I see a little red exclamation point, which shows the following when moused over: "The expression that you have entered is not valid. Click to edit in the Expression Editor". Usually, when I click on the shape, it's easy to see what the trouble is.&lt;br /&gt;&lt;br /&gt;However, there are times when clicking on the shape doesn't show anything that looks incorrect. If that wasn't strange enough, there are times when the orchestration will compile even though it shows the error in the orchestration designer. And stranger still is something that I just noticed -- when I took out a send shape immediately following the Expression shape, the orchestration would no longer compile.&lt;br /&gt;&lt;br /&gt;I have found 3 possible causes. This isn't intended to be an exhaustive list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This seems to occur most often when I try to wrap a string onto more than one line by using the "+" operator.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the orchestration view, one of the items will show an error. This should be pretty easy to fix from the orchestration view.&lt;/li&gt;&lt;li&gt;Variables with identical names are declared in more than one scope. I'm not sure why this is a problem, but it does seem to be sometimes.&lt;/li&gt;&lt;/ul&gt;Another similar (vague) error that shows up sometimes during compilation is "errors exist for one or more children". One of the causes of this error is this code that is used to obtain the GUID of the currently running orchestration:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;orchName = Microsoft.XLANGs.Core.Service.RootService.ServiceId&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Thanks to Scott Colestock for pointing this out. He suggests using the following code instead:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;YourOrchName(Microsoft.XLANGs.BaseTypes.InstanceId) &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-8945135025104404907?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/8945135025104404907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=8945135025104404907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/8945135025104404907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/8945135025104404907'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2007/02/biztalk-orchestration-error-message.html' title='BizTalk Orchestration Error Message'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-7958308107397320181</id><published>2007-02-01T18:00:00.000-08:00</published><updated>2007-02-01T18:09:54.929-08:00</updated><title type='text'>Where Are Those Darned R2 EDI Schemas</title><content type='html'>For some reason, I keep forgetting this...BizTalk R2 EDI schemas are kept in an executable ZIP file (EXE extension) at C:\Program Files\Microsoft BizTalk Server 2006\XSD_Schema\EDIMicrosoftEdiXSDTemplates.exe.&lt;br /&gt;&lt;br /&gt;By the way, the new BizTalk EDI support in R2 is way better than in previous versions. They have schemas for every X12 EDI document I could want, plus lots more. There's also support for EDIFACT, which I haven't had the privilege of using yet...&lt;br /&gt;&lt;br /&gt;Setting up the EDI transactions is also much easier. Actually, there are some transactions that I never was able to set up using the old EDI system. &lt;br /&gt;&lt;br /&gt;To compare the old EDI system to the new, it took me less than 1/2 the time to set up a real life outbound 810 transaction. Not bad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-7958308107397320181?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/7958308107397320181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=7958308107397320181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/7958308107397320181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/7958308107397320181'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2007/02/where-are-those-darned-r2-edi-schemas.html' title='Where Are Those Darned R2 EDI Schemas'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-117020245422049240</id><published>2007-01-30T16:07:00.000-08:00</published><updated>2007-01-30T17:12:33.323-08:00</updated><title type='text'>Note About BizTalk xpath Function</title><content type='html'>I just wanted to archive some sample code here...I've used the xpath function in BizTalk orchestrations fairly often, but it always takes me a couple of tries to get it right.&lt;br /&gt;&lt;br /&gt;Here's a snippet that I have used successfully to assign a value to a field in an EDI 810 document:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;n104Path = "/*[local-name()='X12_00401_810']" +&lt;br /&gt;    "/*[local-name()='N1Loop1'][3]" +&lt;br /&gt;    "/*[local-name()='N1']/*[local-name()='N104']";&lt;br /&gt;xpath(Edi810, n104Path) = Response.myField;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here's another that I have used to extract the value from the same field in an EDI 810 document (there's a difference in the xpath expression, here I'm using the XPath string() function):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// check n104 element (under "ship to")&lt;br /&gt;n104Path = "string(/*[local-name()='X12_00401_810']" +&lt;br /&gt;    "/*[local-name()='N1Loop1'][3]" +&lt;br /&gt;    "/*[local-name()='N1']/*[local-name()='N104'])";&lt;br /&gt;n104String = (System.String)xpath(Edi810,n104Path);&lt;br /&gt;n104String = n104String.Trim();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I have seen examples that look like the following, but when I try them the string value is just null:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;n104Path = "/*[local-name()='X12_00401_810']" +&lt;br /&gt;    "/*[local-name()='N1Loop1'][3]" +&lt;br /&gt;    "/*[local-name()='N1']/*[local-name()='N104']/text()";&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-117020245422049240?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/117020245422049240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=117020245422049240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/117020245422049240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/117020245422049240'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2007/01/note-about-biztalk-xpath-function.html' title='Note About BizTalk xpath Function'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-115783629192430813</id><published>2006-09-09T13:51:00.000-07:00</published><updated>2006-09-09T14:11:31.933-07:00</updated><title type='text'></title><content type='html'>I found 2 links that I want to keep here, for my future reference. If someone else uses them, I ask that they deposit $10,000 in my swiss bank account...(doesn't hurt to ask, right)?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/dhtoran/archive/2005/07/07/436395.aspx"&gt;The first one&lt;/a&gt;, from David Hurtado's blog, shows how to promote context properties within an orchestration. It also has a link to Jon Flander's blog to show how to do this in a pipeline component (which I believe you could now use inside an orchestration with BizTalk 2006).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.eliasen.dk/PermaLink,guid,e6a6448a-b15e-4697-8d33-5b28f1d0a47e.aspx"&gt;The second link&lt;/a&gt; is to Jan Eliasen's blog. I've been tearing my hair out because for most of DTD's that I get from customers, when I import them into Visual Studio and use the schema editor, all of the nodes show up at the top level. Jan showed me how to get the schema to show up in VS in a clean, heirarchical way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-115783629192430813?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/115783629192430813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=115783629192430813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/115783629192430813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/115783629192430813'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2006/09/i-found-2-links-that-i-want-to-keep.html' title=''/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-114140964725753949</id><published>2006-03-03T09:58:00.000-08:00</published><updated>2006-03-03T13:56:52.270-08:00</updated><title type='text'>BizTalk Pipelines Factoid</title><content type='html'>I'm sitting in the BizTalk 2006 Deep Dive training in Redmond right now, and the instructor told me some stuff that I don't remember seeing elsewhere. So I'm going to document this for myself and others.&lt;br /&gt;&lt;br /&gt;The provided XMLTransmit pipeline will ensure that an incoming document is well formed XML, but it won't validate the document against a schema. In order to validate against a schema, you need to create a pipeline and do one of two things:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Drop an &lt;strong&gt;XML disassembler&lt;/strong&gt; component into the pipeline, set the "Validate document structure" property to false, and then drop an &lt;strong&gt;XML validator&lt;/strong&gt; component as well. This will validate the XML document against any schema that is deployed to your host.&lt;/li&gt;&lt;li&gt;Drop only an &lt;strong&gt;XML disassembler&lt;/strong&gt; into the pipeline, set the "Validate document structure" property to true, and then add one or more schemas to the "Document schemas" property.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Note that if you use the XML validator component as desribed above, you don't have to specify a schema. However, if you do specify a schema (or schemas) in this component, the pipeline will then validate only against that specific schema (or schemas).&lt;br /&gt;&lt;br /&gt;If you do choose to use a port to validate according to a schema, BizTalk 2006 will make it easier. In BTS 2006, pipelines support parameters, and you can override the schema(s) that are used.&lt;br /&gt;&lt;br /&gt;BTW, I'm using the word "factoid" in the title because I figure if &lt;strong&gt;functoid&lt;/strong&gt; is a word, than factoid must also be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-114140964725753949?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/114140964725753949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=114140964725753949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/114140964725753949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/114140964725753949'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2006/03/biztalk-pipelines-factoid.html' title='BizTalk Pipelines Factoid'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-113970571975623018</id><published>2006-02-11T16:40:00.000-08:00</published><updated>2006-02-11T17:16:21.030-08:00</updated><title type='text'>BizTalk Mapper - Looping Tricks</title><content type='html'>This post is intended to demonstrate 2 ways of using the looping functoid. One is pretty obvious, and the other shows a use for the looping functoid that requires a bit of help from a logical functoid.&lt;br /&gt;&lt;br /&gt;Along the way I'll also show how a value mapping functoid works.&lt;br /&gt;&lt;br /&gt;I have created 2 schemas intended to represent the status of a previously sent purchase order. POS.xsd is the output from a Line of Business (LOB) application, and PO_Status is intended to be sent to the customer. The LineItem node in POS.xsd and the Product node in POStatus.xsd both repeat 1 to unbounded times. Here's how the map looks:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6659/2205/1600/loopingMap1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/6659/2205/400/loopingMap1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The red functoid is a String Concatenate functoid, which has 3 inputs - ShipperName, a constant " - ", and ServiceLevel. The DateShipped element is mapped straight across, or "as is".&lt;br /&gt;&lt;br /&gt;The turquoise functoids are Greater Than (GT) functoids. The first input you can see on the screen for the upper GT functoid is the QuantityOrdered element, and the second input is "0". This functoid will return true if the value in QuantityOrdered is more than 0. The output of this functoid is mapped into 2 Value Mapping (VM) functoids. A value mapping functoid will return it's second input only if the value of the first input is 0. So the uppermost VM functoid will return its second input (the string "Ordered", which you can't see) if the value in QuantityOrdered is &amp;gt; 0, and that is mapped into GlobalQuantityTypeCode. The second VM functoid will return its second input (QuantityOrdered) if QuantityOrdered is &amp;gt; 0, and that value is mapped into ProductQuantity.&lt;br /&gt;&lt;br /&gt;And Here's a sample of the input XML:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;ns0:PurchaseOrderStatus xmlns:ns0="http://Test.POS"&amp;gt;&lt;br /&gt; &amp;lt;ShipperName&amp;gt;UPS&amp;lt;/ShipperName&amp;gt;&lt;br /&gt; &amp;lt;ServiceLevel&amp;gt;2nd Day&amp;lt;/ServiceLevel&amp;gt;&lt;br /&gt; &amp;lt;DateShipped&amp;gt;05/17/2005&amp;lt;/DateShipped&amp;gt;&lt;br /&gt; &amp;lt;LineItem&amp;gt;&lt;br /&gt;   &amp;lt;ItemNumber&amp;gt;X-12&amp;lt;/ItemNumber&amp;gt;&lt;br /&gt;   &amp;lt;QuantityOrdered&amp;gt;10&amp;lt;/QuantityOrdered&amp;gt;&lt;br /&gt;   &amp;lt;QuantityShipped&amp;gt;5&amp;lt;/QuantityShipped&amp;gt;&lt;br /&gt;   &amp;lt;QuantityBackordered&amp;gt;5&amp;lt;/QuantityBackordered&amp;gt;&lt;br /&gt;   &amp;lt;QuantityCancelled&amp;gt;0&amp;lt;/QuantityCancelled&amp;gt;&lt;br /&gt; &amp;lt;/LineItem&amp;gt;&lt;br /&gt; &amp;lt;LineItem&amp;gt;&lt;br /&gt;   &amp;lt;ItemNumber&amp;gt;A-24-P&amp;lt;/ItemNumber&amp;gt;&lt;br /&gt;   &amp;lt;QuantityOrdered&amp;gt;200&amp;lt;/QuantityOrdered&amp;gt;&lt;br /&gt;   &amp;lt;QuantityShipped&amp;gt;200&amp;lt;/QuantityShipped&amp;gt;&lt;br /&gt;   &amp;lt;QuantityBackordered&amp;gt;0&amp;lt;/QuantityBackordered&amp;gt;&lt;br /&gt;   &amp;lt;QuantityCancelled&amp;gt;0&amp;lt;/QuantityCancelled&amp;gt;&lt;br /&gt; &amp;lt;/LineItem&amp;gt;&lt;br /&gt; &amp;lt;LineItem&amp;gt;&lt;br /&gt;   &amp;lt;ItemNumber&amp;gt;T-707F&amp;lt;/ItemNumber&amp;gt;&lt;br /&gt;   &amp;lt;QuantityOrdered&amp;gt;12&amp;lt;/QuantityOrdered&amp;gt;&lt;br /&gt;   &amp;lt;QuantityShipped&amp;gt;0&amp;lt;/QuantityShipped&amp;gt;&lt;br /&gt;   &amp;lt;QuantityBackordered&amp;gt;6&amp;lt;/QuantityBackordered&amp;gt;&lt;br /&gt;   &amp;lt;QuantityCancelled&amp;gt;6&amp;lt;/QuantityCancelled&amp;gt;&lt;br /&gt; &amp;lt;/LineItem&amp;gt;&lt;br /&gt;&amp;lt;/ns0:PurchaseOrderStatus&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Notice in the Visual Studio output window above that there is an error. This occurred when I tried to test the map you see above. The warning immediately below the error reads in full: "The destination node "GlobalOrderQuantityTypeCode" has multiple inputs but none of its ancestors is connected to a looping functoid." &lt;br /&gt;&lt;br /&gt;This error can be easily remedied by adding a looping functoid, which can be found in the Toolbox under Advanced Functoids:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6659/2205/1600/loopingMap2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6659/2205/400/loopingMap2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;In the image above, you can see that I have added a purple functoid (the Looping functoid) that connects the LineItem node in the source schema with the Product node in the destination schema. But there's still an error. What I've done in effect is to tell BizTalk, for every LineItem in node in a source document, create a Product node in the output document. But I'm going to have to also account for the fact that within 1 Product node in the output, there are possibly multiple OrderStatusQuantity nodes.&lt;br /&gt;&lt;br /&gt;Here's another attempt:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6659/2205/1600/loopingMap3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6659/2205/400/loopingMap3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I have put another Looping functoid on the map, and connected the QuantityOrdered and QuantityShipped node outputs to it. What does this do? Essentially, it says that whenever you have an input node, create another OrderStatusQuantity node. Well if I'm so clever, why am I still getting an error? Because other functoids that I've explained above say to only create the nodes under OrderStatusQuantity node if the source value is greater than 0. QuantityShipped in the 3rd LineItem in the sample XML is 0, so I'm essentially telling BizTalk to create an OrderStatusQuantity node, but don't create its children. Since the children are required in the schema, I get an error.&lt;br /&gt;&lt;br /&gt;Let's try one more time:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6659/2205/1600/loopingMap4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6659/2205/400/loopingMap4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Finally! If you look closely at the map, you can see that I've drawn lines from the GT functoids to the OrderStatusQuantity node. This shows a very useful property of logical functoids. If you map the output of  a logical functoid to a node, it will act to suppress the production of that node when the output of the logical functoid is false. So the OrderStatusQuantity node will be created if and only if the QuantityOrdered or the QuantityShipped field contains a value greater than 0.&lt;br /&gt;&lt;br /&gt;Here's the XML output. Note that in the last Product node, there is only one OrderStatusQuantity:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;ns0:PO_Status xmlns:ns0="http://Test.POStatusOut"&amp;gt;&lt;br /&gt;   &amp;lt;ShipDate&amp;gt;05/17/2005&amp;lt;/ShipDate&amp;gt;&lt;br /&gt;   &amp;lt;ShippedVia&amp;gt;UPS - 2nd Day&amp;lt;/ShippedVia&amp;gt;&lt;br /&gt;   &amp;lt;Product&amp;gt;&lt;br /&gt;      &amp;lt;ProductIdentifier&amp;gt;X-12&amp;lt;/ProductIdentifier&amp;gt;&lt;br /&gt;      &amp;lt;OrderStatusQuantity&amp;gt;&lt;br /&gt;         &amp;lt;GlobalOrderQuantityTypeCode&amp;gt;Ordered&amp;lt;/GlobalOrderQuantityTypeCode&amp;gt;&lt;br /&gt;         &amp;lt;ProductQuantity&amp;gt;10&amp;lt;/ProductQuantity&amp;gt;&lt;br /&gt;      &amp;lt;/OrderStatusQuantity&amp;gt;&lt;br /&gt;      &amp;lt;OrderStatusQuantity&amp;gt;&lt;br /&gt;         &amp;lt;GlobalOrderQuantityTypeCode&amp;gt;Shipped&amp;lt;/GlobalOrderQuantityTypeCode&amp;gt;&lt;br /&gt;         &amp;lt;ProductQuantity&amp;gt;5&amp;lt;/ProductQuantity&amp;gt;&lt;br /&gt;      &amp;lt;/OrderStatusQuantity&amp;gt;&lt;br /&gt;   &amp;lt;/Product&amp;gt;&lt;br /&gt;   &amp;lt;Product&amp;gt;&lt;br /&gt;      &amp;lt;ProductIdentifier&amp;gt;A-24-P&amp;lt;/ProductIdentifier&amp;gt;&lt;br /&gt;      &amp;lt;OrderStatusQuantity&amp;gt;&lt;br /&gt;         &amp;lt;GlobalOrderQuantityTypeCode&amp;gt;Ordered&amp;lt;/GlobalOrderQuantityTypeCode&amp;gt;&lt;br /&gt;         &amp;lt;ProductQuantity&amp;gt;200&amp;lt;/ProductQuantity&amp;gt;&lt;br /&gt;      &amp;lt;/OrderStatusQuantity&amp;gt;&lt;br /&gt;      &amp;lt;OrderStatusQuantity&amp;gt;&lt;br /&gt;         &amp;lt;GlobalOrderQuantityTypeCode&amp;gt;Shipped&amp;lt;/GlobalOrderQuantityTypeCode&amp;gt;&lt;br /&gt;         &amp;lt;ProductQuantity&amp;gt;200&amp;lt;/ProductQuantity&amp;gt;&lt;br /&gt;      &amp;lt;/OrderStatusQuantity&amp;gt;&lt;br /&gt;   &amp;lt;/Product&amp;gt;&lt;br /&gt;   &amp;lt;Product&amp;gt;&lt;br /&gt;      &amp;lt;ProductIdentifier&amp;gt;T-707F&amp;lt;/ProductIdentifier&amp;gt;&lt;br /&gt;      &amp;lt;OrderStatusQuantity&amp;gt;&lt;br /&gt;         &amp;lt;GlobalOrderQuantityTypeCode&amp;gt;Ordered&amp;lt;/GlobalOrderQuantityTypeCode&amp;gt;&lt;br /&gt;         &amp;lt;ProductQuantity&amp;gt;12&amp;lt;/ProductQuantity&amp;gt;&lt;br /&gt;      &amp;lt;/OrderStatusQuantity&amp;gt;&lt;br /&gt;   &amp;lt;/Product&amp;gt;&lt;br /&gt;&amp;lt;/nso:PO_Status&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-113970571975623018?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/113970571975623018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=113970571975623018' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113970571975623018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113970571975623018'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2006/02/biztalk-mapper-looping-tricks.html' title='BizTalk Mapper - Looping Tricks'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-113906833774756853</id><published>2006-02-04T07:38:00.000-08:00</published><updated>2006-02-04T07:52:17.760-08:00</updated><title type='text'>What's My Blog?</title><content type='html'>I've been reflecting on "what my blog is about". I used to reflect on my life in the same way, but never came to a definite conclusion. So I'm narrowing the focus of my question to just the blog.&lt;br /&gt;:-)&lt;br /&gt;&lt;br /&gt;My intention is to write about some technical items that should be easy, but weren't necessarily (at least to me). A lot of what I write might look like it's for beginners, but if it took more than a little research to find it, I think it's worth writing down.&lt;br /&gt;&lt;br /&gt;Hopefully you'll either agree, or read someone else's blog.&lt;br /&gt;;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-113906833774756853?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/113906833774756853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=113906833774756853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113906833774756853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113906833774756853'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2006/02/whats-my-blog.html' title='What&apos;s My Blog?'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-113893561760736491</id><published>2006-02-02T18:50:00.000-08:00</published><updated>2006-02-03T00:20:16.490-08:00</updated><title type='text'>BizTalk 2006 SMTP Adapter</title><content type='html'>I found a couple of great articles on using the SMTP adapter on Richard Seroter's blog &lt;a href="http://blogs.msdn.com/richardbpi/archive/2005/08/15/451760.aspx"&gt;here&lt;/a&gt;, and Tomas Restrepo's blog &lt;a href="http://www.winterdom.com/weblog/archives/000532.html"&gt;here&lt;/a&gt;. What follows are a couple of things that I had to find elsewhere.&lt;br /&gt;For the following examples, I assume you've already created 2 multipart messages EmailIn and EmailOut, each with a body part and an attachment part called Remainder. EmailIn has been used to receive an email using the POP3 adapter (see my previous post), and EmailOut is for sending an email out via SMTP. I also assume that you've at least partly built the EmailOut message, see the 2 links above if you don't know how.&lt;br /&gt;&lt;br /&gt;To set the filename for the attachment:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;EmailOut.Remainder(MIME.FileName) = "MySpecialTitle.XML";&lt;/span&gt;&lt;br /&gt;To set the subject of the outgoing email from the incoming email:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;EmailOut(SMTP.Subject) = EmailIn(POP3.Subject);&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;By the way, these need to be done in a constructor for EmailOut.&lt;br /&gt;&lt;br /&gt;To send your email to an address that is to be configured at run-time, assuming that you've managed to get the correct address into the variable &lt;span style="font-family:courier new;"&gt;emailAddress&lt;/span&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Creating a dyamic port&lt;/li&gt;&lt;li&gt;Create an expression shape&lt;/li&gt;&lt;li&gt;Enter code that looks like this in the expression shape:&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;DynamicPort(Microsoft.XLANGs.BaseTypes.Address) = "mailto:" + emailAddress;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;It took me a while to figure out how this could work, my guess is that the "&lt;span style="font-family:courier new;"&gt;mailto:&lt;/span&gt;" prefix somehow indicates to BizTalk that it should use SMTP for that port, just as http tells your browser to use port 80.&lt;br /&gt;&lt;br /&gt;Hopefully you can extrapolate other things that you might need from the links and these examples.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-113893561760736491?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/113893561760736491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=113893561760736491' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113893561760736491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113893561760736491'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2006/02/biztalk-2006-smtp-adapter.html' title='BizTalk 2006 SMTP Adapter'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21774696.post-113876306555963364</id><published>2006-01-31T18:31:00.000-08:00</published><updated>2006-02-09T18:02:30.186-08:00</updated><title type='text'>BizTalk 2006 POP3 Adapter</title><content type='html'>There are a few things that I've learned recently while using the latest BizTalk 2006 beta. I'll start by listing a few things that might help someone who is using the new POP3 Adapter. This information was gathered from other web pages, news groups, and my own experience.&lt;br /&gt;&lt;br /&gt;Using the POP3 adapter to receive a message where the XML attachment is all that you care about is about as easy as using any other adapter. I've seen information about this in other places, so I won't copy it here.&lt;br /&gt;&lt;br /&gt;To use the POP3 adapter to receive an email with attachments in an orchestration (where the number of attachments is fixed and known) and you intend to have access to &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; parts of the email:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a multipart type in the orchestration, one part for the email body and one for each attachment.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make each part of the multipart type an XmlDocument, even if the body of the message is not XML. I've seen articles that make me think it might be important for the body part of the multipart type to be created first, although I haven't tested it any other way.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Since Visual Studio will sort the parts of the multipart type by name (although the actual order of the parts in the ODX file is unaffected), I recommend naming the parts something that will maintain the same order, for example "BodyPart" and "Remainder1", "Remainder2", etc.&lt;/li&gt;&lt;li&gt;In the orchestration, to use any of the incoming parts that are XML, you can simply assign that body part to your message (it took me a while to discover that [for my purposes, anyway] XmlDocument is assignment compatible with any message that is of an XML schema type).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;When I first tried receiving a POP3 message in an orchestration, I received the following error message:&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="color: rgb(102, 0, 204);"&gt;Multi-part message 'EmailIn' has body part '{AE9F5DD0-CE12-49C3-B9B3-577D3B134EBB}', expected body part '{3FB96D26-27B3-44A1-9606-CFBEA88A668D}.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;When I created the receive port, I had left the body part index set to 0 in the receive location. My thinking was that since I wasn't going to select just a part of the message, I could leave it at the default. Well, my thinking was wrong -- the error went away when I changed the body part index to 1, and I was able to receive the email in the orchestration.&lt;br /&gt;&lt;br /&gt;2/9/2006 - There's more on the POP3 adapter from Richard Seroter &lt;a href="http://blogs.msdn.com/richardbpi/archive/2006/02/03/524484.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21774696-113876306555963364?l=stevestechnotes.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevestechnotes.blogspot.com/feeds/113876306555963364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=21774696&amp;postID=113876306555963364' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113876306555963364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21774696/posts/default/113876306555963364'/><link rel='alternate' type='text/html' href='http://stevestechnotes.blogspot.com/2006/01/biztalk-2006-pop3-adapter.html' title='BizTalk 2006 POP3 Adapter'/><author><name>Steve Harclerode</name><uri>http://www.blogger.com/profile/01048793793830514398</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='15943316287488856077'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>