<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Florian's weblog</title><link>http://blogs.msdn.com/b/floditt/</link><description>My first experience with Microsoft Dynamics AX, BC.Net and the Enterprise Portal at Microsoft.</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Limitations of the Dynamics Ax service references</title><link>http://blogs.msdn.com/b/floditt/archive/2010/07/01/limitations-of-the-dynamics-ax-service-references.aspx</link><pubDate>Thu, 01 Jul 2010 09:39:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10033335</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=10033335</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/07/01/limitations-of-the-dynamics-ax-service-references.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://floditt.blogspot.com/2010/07/limitations-of-dynamics-ax-service.html"&gt;article about service-references limitations&lt;/a&gt; is available on my new blog.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10033335" width="1" height="1"&gt;</description></item><item><title>Cross domain access to AIF Web Services (Dynamics Ax 2009)</title><link>http://blogs.msdn.com/b/floditt/archive/2010/06/30/cross-domain-access-to-aif-web-services-dynamics-ax-2009.aspx</link><pubDate>Wed, 30 Jun 2010 21:29:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10033141</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=10033141</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/06/30/cross-domain-access-to-aif-web-services-dynamics-ax-2009.aspx#comments</comments><description>&lt;p&gt;I published the &lt;a href="http://floditt.blogspot.com/2010/06/cross-domain-access-to-aif-webservices.html"&gt;new article&lt;/a&gt; on &lt;a href="http://floditt.blogspot.com/"&gt;my new blog&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10033141" width="1" height="1"&gt;</description></item><item><title>.net programming for Dynamics AX developers slides</title><link>http://blogs.msdn.com/b/floditt/archive/2010/06/30/net-programming-for-dynamics-ax-developers-slides.aspx</link><pubDate>Wed, 30 Jun 2010 21:27:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10033140</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=10033140</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/06/30/net-programming-for-dynamics-ax-developers-slides.aspx#comments</comments><description>&lt;p&gt;I published &lt;a href="http://www.dittgen.net/florian/webcast1.pdf"&gt;the slides&lt;/a&gt; from my &lt;a href="http://blogs.msdn.com/b/floditt/archive/2009/03/19/webcast-net-for-x-programmers.aspx"&gt;last years presentation&lt;/a&gt; on &lt;a href="http://floditt.blogspot.com/"&gt;my new blog&lt;/a&gt;. This is has been the working draft, but it contains much more slides as the final version, so I’m publishing this one.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10033140" width="1" height="1"&gt;</description></item><item><title>Installing the COM Business Connector</title><link>http://blogs.msdn.com/b/floditt/archive/2010/06/23/installing-the-com-business-connector.aspx</link><pubDate>Wed, 23 Jun 2010 16:11:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10029074</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=10029074</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/06/23/installing-the-com-business-connector.aspx#comments</comments><description>&lt;p&gt;I published the&lt;a href="http://floditt.blogspot.com/2010/06/installing-com-business-connector.html"&gt; new article&lt;/a&gt; on &lt;a href="http://floditt.blogspot.com/"&gt;my new blog&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10029074" width="1" height="1"&gt;</description></item><item><title>My blog is Moving</title><link>http://blogs.msdn.com/b/floditt/archive/2010/02/05/my-blog-is-moving.aspx</link><pubDate>Fri, 05 Feb 2010 09:40:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9958699</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=9958699</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/02/05/my-blog-is-moving.aspx#comments</comments><description>&lt;p&gt;I’m moving to &lt;a href="https://www.blogger.com"&gt;Blogger&lt;/a&gt; since I’m writing these articles for personal purposes and I want to have as much control as possible on my postings. So Please be aware that I will will publish my next articles &lt;a href="http://floditt.blogspot.com/"&gt;on the new blog&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9958699" width="1" height="1"&gt;</description></item><item><title>Enterprise Portal license required for workflows with dynamics Ax 2009</title><link>http://blogs.msdn.com/b/floditt/archive/2010/01/25/enterprise-portal-license-required-for-workflows-with-dynamics-ax-2009.aspx</link><pubDate>Mon, 25 Jan 2010 16:58:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9953051</guid><dc:creator>flo2005</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=9953051</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/01/25/enterprise-portal-license-required-for-workflows-with-dynamics-ax-2009.aspx#comments</comments><description>&lt;p&gt;Dynamics Ax workflow does require the Enterprise Portal (EP) license. License changes since Dynamics Ax 4 can be found &lt;a href="https://partner.microsoft.com/UK/productssolutions/dynamics/40070431"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Please double-check that the EP license is well configured when the BC.Net throws the following exception (can be found in the Windows application-EventLogs):&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Session log on for Microsoft Dynamics failed.     &lt;br /&gt;Dynamics Adapter LogonAs failed.      &lt;br /&gt;Microsoft.Dynamics.Framework.BusinessConnector.Session.Exceptions.FatalSessionExcept      &lt;br /&gt;ion      &lt;br /&gt;at       &lt;br /&gt;Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsSession.HandleExcepti      &lt;br /&gt;on(String message, Exception exception, HandleExceptionCallback callback)      &lt;br /&gt;at       &lt;br /&gt;Microsoft.Dynamics.Framework.BusinessConnector.Session.DynamicsAdapter.LogonAs(Strin      &lt;br /&gt;g user, String domain, NetworkCredential bcProxyCredentials, String company, String       &lt;br /&gt;language, String objectServer, String configuration)&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9953051" width="1" height="1"&gt;</description></item><item><title>Delete TEMP files when sending mails with attached files</title><link>http://blogs.msdn.com/b/floditt/archive/2010/01/25/delete-temp-files-when-sending-mails-with-attached-files.aspx</link><pubDate>Mon, 25 Jan 2010 15:53:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9953014</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=9953014</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/01/25/delete-temp-files-when-sending-mails-with-attached-files.aspx#comments</comments><description>&lt;p&gt;Attaching Documents is a frequently used functionality in Ax (PDF is just an example, but it is true for any attached file):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/DeleteTEMPfileswhensendingmailswithattac_ED92/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/DeleteTEMPfileswhensendingmailswithattac_ED92/image_thumb_3.png" width="598" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;That is why tmp-files, that are generated each time you are using this, might consume quickly an important part of your hard disk, since they are not deleted at the end of the process. The temp-files are copies of the generated text, pdf or RTF files from the tmp-directory. This directory is defined as an user environment variable:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/DeleteTEMPfileswhensendingmailswithattac_ED92/image37.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/DeleteTEMPfileswhensendingmailswithattac_ED92/image37_thumb.png" width="258" height="284" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/DeleteTEMPfileswhensendingmailswithattac_ED92/image_22.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/DeleteTEMPfileswhensendingmailswithattac_ED92/image_thumb_10.png" width="297" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The easiest way is to schedule a batch which is cleaning the temp directly each time you are starting or shutting down your system. But even this is sometimes not enough. The it is necessary to change the X++ code.&lt;/p&gt;  &lt;p&gt;When sending a report as an attachment, the kernel calls the method &lt;a href="http://msdn.microsoft.com/en-us/library/aa873275.aspx"&gt;reportSendMail&lt;/a&gt; of the &lt;a href="http://msdn.microsoft.com/en-us/library/aa592681.aspx"&gt;Info&lt;/a&gt;-class and passes all necessary information about the attachment in a variable of type &lt;a href="http://msdn.microsoft.com/en-us/library/aa634996.aspx"&gt;PrintJobSettings&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The email is sent in the last line of this method:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;m.sendMailAttach(p1.mailTo(),p1.mailCc(), p1.mailSubject(),&lt;span class="str"&gt;'axapta report'&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, p1.fileName(), fileName);&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;“m” is a variable of type &lt;a href="http://msdn.microsoft.com/en-us/library/aa854620.aspx"&gt;SysINetMail&lt;/a&gt;. The path and file-name of the temp-file is passed as argument with p1.fileName(). Because the tmp-file is only used to attach the file to mail by using the &lt;a href="http://msdn.microsoft.com/en-us/library/aa585769.aspx"&gt;Mapi&lt;/a&gt;, the is no risk to delete the file at the end of this process. The best place to delete this file is after the &lt;a href="http://msdn.microsoft.com/en-us/library/aa612545.aspx"&gt;logoff&lt;/a&gt; of the Mapi session in the method sendMailAttach:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.logoff();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!isRunningOnServer())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt;(WinAPI::fileExists(_attachPath))&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                WinAPI::deleteFile(_attachPath);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Line 2 to 8 is the new code. Line 2 checks if the code is called from the AOS, which is always false, but to be sure that any other custom-code will work, it is better to check this nevertheless. It would be better to encapsulate the delete-call in a try-catch-block, because deleting files is always a risk and must be treated, but this is just an example of course.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9953014" width="1" height="1"&gt;</description></item><item><title>Working with Images (BLOBS) between Dynamics Ax and external applications (UPDATED: 06/01/2010)</title><link>http://blogs.msdn.com/b/floditt/archive/2010/01/04/working-with-images-blobs-between-ax-and-external-applications.aspx</link><pubDate>Mon, 04 Jan 2010 15:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9943390</guid><dc:creator>flo2005</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=9943390</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2010/01/04/working-with-images-blobs-between-ax-and-external-applications.aspx#comments</comments><description>&lt;p&gt;&lt;u&gt;&lt;i&gt;(updated the 05/01/2010 and 06/01/2010)&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;  &lt;h1&gt;The idea&lt;/h1&gt;  &lt;p&gt;Whenever you need to transfer data in a platform specific format (like Images), the easiest way of doing this is to create an envelope (in Xml) and put the data in an encoded format in this envelope. &lt;/p&gt;  &lt;p&gt;Here’s a schema that shows such a scenario:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/Dessin1_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/Dessin1_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Dessin1" border="0" alt="Dessin1" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/Dessin1_thumb.jpg" width="423" height="414" mce_src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/Dessin1_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;The Ax layer&lt;/h1&gt;  &lt;p&gt;On the Ax layer (the 2nd row) the image is transformed in a &lt;a href="http://en.wikipedia.org/wiki/Base64" mce_href="http://en.wikipedia.org/wiki/Base64"&gt;base64&lt;/a&gt; string (the text file in the schema) and then put into an Xml-document (the envelope in the schema).&lt;/p&gt;  &lt;p&gt;Just have a look at the table CompanyImage, that is used to persist the picture of an employee:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_5.png" width="413" height="348" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The type of the column in which the image is saved is “&lt;a href="http://msdn.microsoft.com/en-us/library/aa874816.aspx"&gt;Container&lt;/a&gt;”. There is no explicit type for Images, but you will notice that the table in the SQL-Server database uses the type “&lt;a href="http://msdn.microsoft.com/en-us/library/ms189574.aspx"&gt;Image&lt;/a&gt;” to persist the container information. The image-type of the SQL-Server 2008 &lt;a href="http://msdn.microsoft.com/en-us/library/ms187993.aspx"&gt;is defined as&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Variable-length binary data from 0 through 2^31-1 (2,147,483,647) bytes.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In contrast to its name (“image”) this type is used to persist any binary data from Ax (container). Working in X++ with the binary data in the container requires the conversion to the type &lt;a href="http://msdn.microsoft.com/en-us/library/aa550840.aspx"&gt;BinData&lt;/a&gt; which provides all necessary information to load, save, encode or decode binary data. This is what I will do in the following example.&lt;/p&gt;  &lt;p&gt;Here’s a simple code that reads out the image (&lt;a href="http://msdn.microsoft.com/en-us/library/aa642726.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa642726.aspx"&gt;CompanyImage&lt;/a&gt;) and puts this in a &lt;a href="http://msdn.microsoft.com/en-us/library/aa611587.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa611587.aspx"&gt;XmlDocument&lt;/a&gt;:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; XmlDocument  getImageXml(dataAreaId refDataAreaId, tableId refTableId, recId refRecId)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    XmlDocument xmlEnvelope;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    XmlElement childNode;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    str content;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    CompanyImage ci;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    BinData bin = &lt;span class="kwrd"&gt;new&lt;/span&gt; BinData();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="rem"&gt;//getting image from CompanyImage&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;ci = CompanyImage::find(refDataAreaId, refTableId, refRecId);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&lt;span class="rem"&gt;//creating BinData object from Container in the CompanyImage object&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;bin.setData(ci.Image);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&lt;span class="rem"&gt;//encoding the image to base64&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;content = bin.base64Encode();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&lt;span class="rem"&gt;//creating the envelope and inserting a XmlElement that contains the image&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&lt;span class="rem"&gt;//in a base64 string&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;xmlEnvelope = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;childNode =  xmlEnvelope.CreateElement(&lt;span class="str"&gt;&amp;quot;image&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;childNode.innerXml(content);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;xmlEnvelope.AppendChild(childNode);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; xmlEnvelope;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Here’s the code for testing this function&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Job11(Args _args)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    str xmlContent;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    XmlDocument xmlEnvelope;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    recId refRecId;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    tableId refTableId;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    dataAreaId refDataAreaId;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; i;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="rem"&gt;//Sample Data...&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;refDataAreaId = &lt;span class="str"&gt;&amp;quot;ceu&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;refTableId = 103;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;refRecId = 5637144576;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;xmlEnvelope = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&lt;span class="rem"&gt;//getting image from CompanyImage&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;xmlEnvelope = A1::getImageXml(refDataAreaId, refTableId, refRecId);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;xmlContent = xmlEnvelope.xml();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;





.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Just an useful hint: If you need to encode large images, you might run into an issue with the &lt;a href="http://msdn.microsoft.com/en-us/library/aa878526.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa878526.aspx"&gt;base64Encode&lt;/a&gt; method. Unfortunately this is not documented on msdn, but this is related to a limitation of the buffer size. This can be fixed as described by &lt;a href="http://www.blogger.com/profile/10380093517542701179" mce_href="http://www.blogger.com/profile/10380093517542701179"&gt;Paul Steynberg&lt;/a&gt; &lt;a href="http://paulsteynberg.blogspot.com/2008/09/setting-maxbuffersize-for-dynamics-ax.html" mce_href="http://paulsteynberg.blogspot.com/2008/09/setting-maxbuffersize-for-dynamics-ax.html"&gt;on his blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Whenever you communicate with an external application that can’t convert the Ax type XmlDocument, you need to wrap the method getImageXml with a method that returns a string:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; str  getImage(dataAreaId refDataAreaId, tableId refTableId, recId refRecId)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; A1::getImageXml(refDataAreaId, refTableId, refRecId).xml();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h1&gt;The client (using BC.Net)&lt;/h1&gt;

&lt;p&gt;Now that we have a method that return a string instead of a XmlDocument, we can directly use CLR objects instead of using wrapper classes. In .Net we can handle the XmlDocument-content from the Ax 2009 in a &lt;a href="http://msdn.microsoft.com/en-us/library/system.string.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.string.aspx"&gt;string&lt;/a&gt;. But, since Xml is much more flexible than a simple encoded string, a method that does the conversion to a &lt;a title="XmlDocument Class" href="http://msdn2.microsoft.com/6kza7w4k.aspx" mce_href="http://msdn2.microsoft.com/6kza7w4k.aspx"&gt;System.Xml.XmlDocument&lt;/a&gt; is recommended:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="rem"&gt;/// Getting the Xml-envelope with the image&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;refDataAreaId&amp;quot;&amp;gt;ceu&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;refTableId&amp;quot;&amp;gt;103&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;param name=&amp;quot;refRecId&amp;quot;&amp;gt;5637144576&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The Xml-envelope with the image as content&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; XmlDocument GetXmlDocument(&lt;span class="kwrd"&gt;string&lt;/span&gt; refDataAreaId, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; refTableId, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;long&lt;/span&gt; refRecId)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            XmlDocument xml = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (Axapta ax = &lt;span class="kwrd"&gt;new&lt;/span&gt; Axapta())&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                ax.Logon(refDataAreaId, &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty, &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty, &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; xmlImageValue = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)ax.CallStaticClassMethod(&lt;span class="str"&gt;&amp;quot;A1&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;getImage&amp;quot;&lt;/span&gt;, refDataAreaId, 103, 5637144576);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                xml = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Xml.XmlDocument();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                xml.InnerXml = xmlImageValue;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                ax.Logoff();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; xml;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;Please be aware that this is just an example and that in a real world application you must implement an exception handling which I do not implement here to have code that is easier to read. &lt;/p&gt;

&lt;p&gt;Now that we do have the xmlEnvelope with the encoded image as content, we need a method that does read out the content and returns the image:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Image UnwrapImage(XmlDocument xmlEnvelope)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            XmlElement imageContent = (XmlElement) xmlEnvelope.FirstChild;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; base64Image = imageContent.InnerXml;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] imageBytes = Convert.FromBase64String(base64Image);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            MemoryStream stream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream(imageBytes);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            Image content = Image.FromStream(stream);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; content;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;All that we need is an event that dos call this method and that assigns the image-content for example to a visual control like a picture-box:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button6_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; refDataAreaId = &lt;span class="str"&gt;&amp;quot;ceu&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; refTableId = 103;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;long&lt;/span&gt; refRecId = 5637144576;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            XmlDocument xmlEnvelope =&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                GetXmlDocument(refDataAreaId,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                    refTableId,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                    refRecId);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            Image content = UnwrapImage(xmlEnvelope);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            pictureBox1.Image = content;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h1&gt;The Ax layer (using the AIF)&lt;/h1&gt;

&lt;p&gt;The first schema was based on the communication with Xml data. I was not explicitly showing the possibility to use the BC.Net because the real advantage of the xmlEnvelope data is given when all the communication is based on Xml. This is the case with &lt;a href="http://en.wikipedia.org/wiki/Web_service" mce_href="http://en.wikipedia.org/wiki/Web_service"&gt;WebServices&lt;/a&gt;. Creating an &lt;a href="http://msdn.microsoft.com/en-us/library/bb496535.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb496535.aspx"&gt;AIF-service&lt;/a&gt; that exposes a method returning the XmlEnvelope is quite easy. First you need a class that is derived from the AifDocumentService and that implements the following methods: &lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;class&lt;/span&gt; AifSampleImageService extends AifDocumentService&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; str  getImage(dataAreaId refDataAreaId, tableId refTableId, recId refRecId)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; A1::getImageXml(refDataAreaId, refTableId, refRecId).xml();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt;()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    ;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    super();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; AifSampleImageService construct()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; AifSampleImageService();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;After that a new Service and the operator needs to be configured in the AOT:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb.png" width="453" height="185" mce_src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Be careful that the security key is configured. Otherwise this will result in an authorization error.&lt;/p&gt;

&lt;p&gt;Once the Service is configured this new service is available in the AIF-configuration by refreshing the available AIF-services and enabling the new AIF-service the AIF-services in the AIF-administration:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_1.png" width="638" height="161" mce_src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_1.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Then the services need to be regenerated (“Generate button). The new service is now available and accessible with the Internet Explorer:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_2.png" width="648" height="353" mce_src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_2.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Xml-schema (Xsd) that represents the AIF-operator is the following:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt; &lt;span class="attr"&gt;elementFormDefault&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;qualified&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;targetNamespace&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://tempuri.org&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:tns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://tempuri.org&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AifSampleImageServiceGetImageRequest&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;refDataAreaId&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;nillable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xs:string&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;refRecId&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xs:long&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;refTableId&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xs:int&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AifSampleImageServiceGetImageResponse&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;response&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;nillable&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xs:string&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;As you can see in line 15, the return type of the operator “GetImage” has the type “string”. This is certainly not the best solution in a &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture" mce_href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA&lt;/a&gt;-context, since you loose the type information of your Xml-document. In a real world application it would be much better to define a special type within Ax that describes the format.&amp;#160; It seems to be clear, that the following schema explains perfectly, that image-element contains a encoded base64 value:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt; &lt;span class="attr"&gt;attributeFormDefault&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;unqualified&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;elementFormDefault&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;qualified&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;image&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xs:base64Binary&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The type “&lt;a href="http://www.w3.org/TR/xmlschema-2/#base64Binary" mce_href="http://www.w3.org/TR/xmlschema-2/#base64Binary"&gt;base64Binary&lt;/a&gt;” is part of the Xml-schema specification of the W3C and defined as:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;b&gt;base64Binary&lt;/b&gt; represents Base64-encoded arbitrary binary data. The &lt;a href="http://www.w3.org/TR/xmlschema-2/#dt-value-space" mce_href="http://www.w3.org/TR/xmlschema-2/#dt-value-space"&gt;·value space·&lt;/a&gt; of &lt;b&gt;base64Binary&lt;/b&gt; is the set of finite-length sequences of binary octets. For &lt;b&gt;base64Binary&lt;/b&gt; data the entire binary stream is encoded using the Base64 Alphabet in &lt;a href="http://www.w3.org/TR/xmlschema-2/#RFC2045" mce_href="http://www.w3.org/TR/xmlschema-2/#RFC2045"&gt;[RFC 2045]&lt;/a&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is exactly what the XmlDocument contains:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;?xml version=&lt;span class="str"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; encoding=&lt;span class="str"&gt;&amp;quot;UTF-8&amp;quot;&lt;/span&gt;?&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;lt;envelope&amp;gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;lt;image&amp;gt; [the image encoded in a base64 value] &amp;lt;/image&amp;gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;lt;/envelope&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;How to create data types is explained on the &lt;a href="http://blogs.msdn.com/aif/" mce_href="http://blogs.msdn.com/aif/"&gt;Aif blog&lt;/a&gt; in a good article about &lt;a href="http://blogs.msdn.com/aif/archive/2008/12/16/creating-custom-dynamics-ax-services.aspx" mce_href="http://blogs.msdn.com/aif/archive/2008/12/16/creating-custom-dynamics-ax-services.aspx"&gt;creating custom Ax services&lt;/a&gt;. There you could implement the method “&lt;a href="http://msdn.microsoft.com/en-us/library/cc619873.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc619873.aspx"&gt;getSchema&lt;/a&gt;” of the interface “&lt;a href="http://msdn.microsoft.com/en-us/library/cc617109.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc617109.aspx"&gt;AifXmlSerializable&lt;/a&gt;”. The article explains you in detail how to do this and this would go too far for this article. Just keep in mind that communicating Xml-documents in a string is a ‘no do’ in a SOA environment and that there are better ways with Dynamics Ax.&lt;/p&gt;

&lt;h1&gt;The .Net client (Consuming the AIF-service)&lt;/h1&gt;

&lt;p&gt;The Wsdl, that is exposed by this new service, can now be referenced in a Visual Studio 2008 project as a Service Reference:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_3.png" width="506" height="414" mce_src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_3.png" /&gt;&lt;/a&gt; &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;a href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_4.png" width="445" height="436" mce_src="http://blogs.msdn.com/blogfiles/floditt/WindowsLiveWriter/WorkingwithImagesBLOBSbetweenAxandextern_E065/image_thumb_4.png" /&gt;&lt;/a&gt; &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;The GetXmlDocument method from the first example (using the BC.Net) is changed to consume a WebService:&lt;/pre&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;The Xml-envelope with the image as content&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; XmlDocument GetXmlDocumentFromAif(&lt;span class="kwrd"&gt;string&lt;/span&gt; refDataAreaId,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; refTableId,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;long&lt;/span&gt; refRecId)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            XmlDocument xml = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            AifSampleImageServiceClient client = &lt;span class="kwrd"&gt;new&lt;/span&gt; AifSampleImageServiceClient();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; xmlImageValue = client.getImage(refDataAreaId, refRecId, refTableId);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            xml = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Xml.XmlDocument();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            xml.InnerXml = xmlImageValue;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; xml;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Now the an event lets us consume get and unwrap the image and display in a PictureBox as in the first example. The method UnwrapImage is taken from the first example.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; button8_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; refDataAreaId = &lt;span class="str"&gt;&amp;quot;ceu&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; refTableId = 103;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="kwrd"&gt;long&lt;/span&gt; refRecId = 5637144576;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            XmlDocument xmlEnvelope =&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                GetXmlDocument(refDataAreaId,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                    refTableId,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                    refRecId);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            Image content = UnwrapImage(xmlEnvelope);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            pictureBox1.Image = content;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9943390" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/floditt/archive/tags/C_2300_/">C#</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/X_2B002B00_/">X++</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/BC-Net/">BC.Net</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/AIF+/">AIF </category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/Ax2009/">Ax2009</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/The+CLR+for+X_2B002B00_+programmers+/">The CLR for X++ programmers </category></item><item><title>Memory leaks and profiling with .Net</title><link>http://blogs.msdn.com/b/floditt/archive/2009/11/04/memory-leaks-and-profiling-with-net.aspx</link><pubDate>Wed, 04 Nov 2009 21:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9917568</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=9917568</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2009/11/04/memory-leaks-and-profiling-with-net.aspx#comments</comments><description>&lt;P&gt;I wrote some moths ago &lt;A href="http://blogs.msdn.com/floditt/archive/2008/12/15/1-the-garbage-collector-in-x-and-the-clr.aspx" mce_href="http://blogs.msdn.com/floditt/archive/2008/12/15/1-the-garbage-collector-in-x-and-the-clr.aspx"&gt;an article about the GC&lt;/A&gt; and highlighted some particularities (unsafe and unmanaged code, disposing and finalizing, etc). &lt;/P&gt;
&lt;P&gt;When you are developing with .Net you will be sometimes faced to memory or resource&amp;nbsp;leaks. Especially if you are using the BC.Net, since the BC.Net is using unsafe and unmanaged code. But even&amp;nbsp;with X++ you&amp;nbsp;will be&amp;nbsp;more and more faced to such problems.&amp;nbsp;So it is very useful to know as much as possible about causes, identification and resolving. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://weblogs.asp.net/fmarguerie/" mce_href="http://weblogs.asp.net/fmarguerie/"&gt;Fabrice Marguerie&lt;/A&gt; (co-author of &lt;A href="http://linqinaction.net/" mce_href="http://linqinaction.net/"&gt;LINQ in Action&lt;/A&gt;) wrote a &lt;A href="http://msdn.microsoft.com/en-us/library/ee658248.aspx" mce_href="http://msdn.microsoft.com/en-us/library/ee658248.aspx"&gt;great article&lt;/A&gt; on MSDN (&lt;A href="http://weblogs.asp.net/fmarguerie/archive/2009/11/03/article-detect-avoid-memory-leaks.aspx" mce_href="http://weblogs.asp.net/fmarguerie/archive/2009/11/03/article-detect-avoid-memory-leaks.aspx"&gt;his blog entry&lt;/A&gt; for the trackback) about this subject. Enjoy this article!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9917568" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/floditt/archive/tags/C_2300_/">C#</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/BC-Net/">BC.Net</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/Troubleshooting/">Troubleshooting</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/Programming/">Programming</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/Thoughts/">Thoughts</category><category domain="http://blogs.msdn.com/b/floditt/archive/tags/The+CLR+for+X_2B002B00_+programmers+/">The CLR for X++ programmers </category></item><item><title>IDynamicsAXExpressionBuilder returned error code 0x80131509 - reloaded</title><link>http://blogs.msdn.com/b/floditt/archive/2009/08/20/idynamicsaxexpressionbuilder-returned-error-code-0x80131509-reloaded.aspx</link><pubDate>Thu, 20 Aug 2009 12:21:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9876665</guid><dc:creator>flo2005</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/floditt/rsscomments.aspx?WeblogPostID=9876665</wfw:commentRss><comments>http://blogs.msdn.com/b/floditt/archive/2009/08/20/idynamicsaxexpressionbuilder-returned-error-code-0x80131509-reloaded.aspx#comments</comments><description>&lt;p&gt;As I already wrote it in the update of that blog entry in &lt;a href="http://blogs.msdn.com/floditt/archive/2009/05/05/idynamicsaxexpressionbuilder-returned-error-code-0x80131509.aspx"&gt;my first posing&lt;/a&gt; about this issue:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The origin of this issue can be found in the method '&lt;a href="http://msdn.microsoft.com/en-us/library/cc615095.aspx"&gt;buildEnumerationXml&lt;/a&gt;' of the class '&lt;a href="http://msdn.microsoft.com/en-us/library/cc642449.aspx"&gt;SysExpression&lt;/a&gt;':&lt;/p&gt;    &lt;p&gt;Currently, a loop iterates until the last element: &lt;/p&gt;    &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (i = sysDictEnum.firstValue(); i &amp;lt;= sysDictEnum.lastValue(); i = sysDictEnum.nextValue(i)) &lt;/pre&gt;
  &lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

  &lt;p&gt;I you replace this (sysDictEnum.lastValue(); ) by the number of elements (sysDictEnum.values();) the issue is solved. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;[UPDATE 03/09/2009]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The hotfix for this bug has been published: KB974925 (Build: 5.0.1500.1255).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9876665" width="1" height="1"&gt;</description></item></channel></rss>