<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-542394186887018212</id><updated>2012-02-02T07:46:56.112+01:00</updated><category term='Best Practice'/><category term='Lean'/><category term='Visual Studio'/><category term='EP'/><category term='SharedView'/><category term='AX 2012'/><category term='Virtual PC'/><category term='2009'/><category term='Reports'/><category term='BOF'/><category term='AX 2009'/><category term='Unit test'/><category term='AIF'/><category term='Hyper-V VirtualBox 2012'/><category term='SQL Server'/><category term='Labels'/><category term='Books'/><category term='Excel'/><title type='text'>Palle Agermark on #MSDYNAX</title><subtitle type='html'>A blog about any interesting Microsoft Dynamics® AX and related stuff I come across.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default?start-index=101&amp;max-results=100'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>140</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8643611554208007587</id><published>2012-02-02T07:46:00.001+01:00</published><updated>2012-02-02T07:46:56.122+01:00</updated><title type='text'>"Find as you type" in the AX 2012 X++ editor</title><content type='html'>As you may know the new X++ editor in AX 2012, is actually the Visual Studio editor.&lt;br /&gt;&lt;br /&gt;One of the sweet things that gives us, is the ability to do "Find as you type" searches in the code.&lt;br /&gt;&lt;br /&gt;Press CTRL + I once, and set of binoculars pops up. Now start typing, and you can see how the editor starts to find matching values in your code. If you want to stop the typing, and just find the next instance of the same text, just press CTRL + I again.&lt;br /&gt;&lt;br /&gt;To search upwards in the code, press CTRL + Shift + I.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8643611554208007587?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8643611554208007587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8643611554208007587&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8643611554208007587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8643611554208007587'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2012/02/find-as-you-type-in-ax-2012-x-editor.html' title='&quot;Find as you type&quot; in the AX 2012 X++ editor'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6964004696255095850</id><published>2012-01-24T14:15:00.002+01:00</published><updated>2012-01-24T14:19:40.665+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Company Visualizer is updated</title><content type='html'>I have updated the company visualizer, fixing the issue I had about database lookup.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://palleagermark.blogspot.com/2011/12/color-code-forms-in-ax-2012-depending.html" target="_blank"&gt;Orginal post.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="120px" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embed?cid=F09DC19B12BAF713&amp;amp;resid=F09DC19B12BAF713%21907&amp;amp;authkey=AAmadqnO41-XoIk" style="background-color: #fcfcfc; padding: 0;" title="Preview" width="98px"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6964004696255095850?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6964004696255095850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6964004696255095850&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6964004696255095850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6964004696255095850'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2012/01/company-visualizer-is-updated.html' title='Company Visualizer is updated'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-891088669678375817</id><published>2012-01-17T10:22:00.000+01:00</published><updated>2012-01-17T10:22:18.117+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Test target in unit tests</title><content type='html'>When you set the SysTestTargetAttribute in a unit test case class, you should take care in assuring the validity of the attribute. There are no warnings or errors if your point to an element that does not exist.&lt;br /&gt;&lt;br /&gt;If you run unit tests with code coverage, your test will be unresponsive for longer than expected. This is&amp;nbsp;because&amp;nbsp;the code coverage is&amp;nbsp;calculated&amp;nbsp;against the entire AOT if the element from SysTestTargetAttribute doesn't exist.&lt;br /&gt;&lt;br /&gt;Click &lt;a href="http://msdn.microsoft.com/en-us/library/aa874515.aspx" target="_blank"&gt;here&lt;/a&gt;, for the MSDN section on AX 2012 unit tests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-891088669678375817?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/891088669678375817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=891088669678375817&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/891088669678375817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/891088669678375817'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2012/01/test-target-in-unit-tests.html' title='Test target in unit tests'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3847762220053095818</id><published>2012-01-11T13:10:00.000+01:00</published><updated>2012-01-11T13:12:24.731+01:00</updated><title type='text'>FTP with C#</title><content type='html'>A couple of links with information on how to work with a FTP server from C#:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms229718.aspx"&gt;MSDN&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://sharpertutorials.com/ultimate-guide-ftp/" target="_blank"&gt;Ultimate Guide to FTP using C#&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have used this information to write a specific FTP client class in a Visual Studio assembly in AX.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3847762220053095818?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3847762220053095818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3847762220053095818&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3847762220053095818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3847762220053095818'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2012/01/ftp-with-c.html' title='FTP with C#'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5841038837805449016</id><published>2012-01-11T12:51:00.000+01:00</published><updated>2012-01-11T12:51:57.131+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIF'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>AIF: Execute messages on demand</title><content type='html'>Sometimes when you try to debug problems with an AIF message, you'd like to just execute it rather than wait for the batch server to pick it up.&lt;br /&gt;&lt;br /&gt;This job can do just that. It requires the GUID of the message and a call to&amp;nbsp;\Classes\AifInboundProcessingService\processAsUser:&lt;br /&gt;&lt;pre&gt;static void debugAIF(Args _args)&lt;br /&gt;{&lt;br /&gt;    AifMessageId    messageId = str2guid("8D2D6B9C-B0A9-48FA-B58E-0CAAD415E65B");&lt;br /&gt;&lt;br /&gt;    AifInboundProcessingService::processAsUser([messageID]);&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/542394186887018212-5841038837805449016?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5841038837805449016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5841038837805449016&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5841038837805449016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5841038837805449016'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2012/01/aif-execute-messages-on-demand.html' title='AIF: Execute messages on demand'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-9075529778372644276</id><published>2012-01-11T08:24:00.000+01:00</published><updated>2012-01-11T08:24:16.422+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Spelling issue with the LogisticsAddresssCity table</title><content type='html'>If you need to use the LogisticsAddress&lt;span style="color: red;"&gt;s&lt;/span&gt;City table, the editor's intellisense feature will quickly enough offer you the LogisticsAddressCity option.&lt;br /&gt;&lt;br /&gt;But beware; this is the extended data type LogisticsAddressCity, which the icon and the tooltip correctly enough indicates.&lt;br /&gt;&lt;br /&gt;The table though has the addressing part of its name spelled with &lt;b&gt;three&lt;/b&gt; s'es: LogisticsAddre&lt;span style="color: red;"&gt;&lt;b&gt;sss&lt;/b&gt;&lt;/span&gt;City. So you'll find that quite a long way further down in the intellisense dropdown.&lt;br /&gt;&lt;br /&gt;That nearly made me insane yesterday, until my eyes crossed the third s of the table name.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-9075529778372644276?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/9075529778372644276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=9075529778372644276&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/9075529778372644276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/9075529778372644276'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2012/01/spelling-issue-with-logisticsaddresssci.html' title='Spelling issue with the LogisticsAddresssCity table'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8978241104221709219</id><published>2012-01-11T08:15:00.000+01:00</published><updated>2012-01-11T08:15:29.343+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Sample file import with StreamReader</title><content type='html'>Here is one example of how you can import files with .NET's StreamReader:&lt;br /&gt;&lt;pre&gt;static void ImportWithStreamReader(Args _args)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; Filename &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filename = @'C:\Temp\importme.txt'; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; System.IO.StreamReader &amp;nbsp;reader;&lt;br /&gt;&amp;nbsp; &amp;nbsp; System.String &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; line;&lt;br /&gt;&amp;nbsp; &amp;nbsp; InteropPermission &amp;nbsp; &amp;nbsp; &amp;nbsp; interopPermission;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; interopPermission = new InteropPermission(InteropKind::ClrInterop);&lt;br /&gt;&amp;nbsp; &amp;nbsp; interopPermission.assert();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; reader = new System.IO.StreamReader(filename,&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;                                       System.Text.Encoding::get_UTF8());&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; line = reader.ReadLine();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; while (!System.String::IsNullOrEmpty(line))&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Do something with line&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; line = reader.ReadLine();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; reader.Close();&lt;br /&gt;&amp;nbsp; &amp;nbsp; reader.Dispose();&lt;br /&gt;}&lt;/pre&gt;If you can work with the file as on big chunk of text you can get away with just reading once, using the ReadToEnd method.&lt;br /&gt;&lt;br /&gt;Read more about StreamReader on &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx"&gt;MSDN&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8978241104221709219?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8978241104221709219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8978241104221709219&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8978241104221709219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8978241104221709219'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2012/01/sample-file-import-with-streamreader.html' title='Sample file import with StreamReader'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-933740574587493245</id><published>2011-12-26T12:16:00.002+01:00</published><updated>2011-12-26T12:16:23.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BOF'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Cool project on CodePlex</title><content type='html'>Here's a really cool project, creating an adapter for CSV files to BOF (Business Operation Framework) services.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dynamicsax2012csv.codeplex.com/"&gt;http://dynamicsax2012csv.codeplex.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-933740574587493245?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/933740574587493245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=933740574587493245&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/933740574587493245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/933740574587493245'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/12/cool-project-on-codeplex.html' title='Cool project on CodePlex'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8595219578530422301</id><published>2011-12-20T11:40:00.002+01:00</published><updated>2011-12-20T11:40:29.024+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Odd CIL compilation issue</title><content type='html'>I'd really like some input on this article, if anyone has experienced something similar.&lt;br /&gt;&lt;br /&gt;I had a couple of CIL compilation errors today in an imported model. The errors all pertained to a new field that was added to a couple of tables. After setting a random LegacyId for the field, I was able to do a&amp;nbsp;successful&amp;nbsp;CIL compilation, and I was also able to compile successfully after removing the LegacyId again.&lt;br /&gt;&lt;br /&gt;I don't know if it was the LegacyId change that did the trick, or just the fact that I made a change to the tables.&lt;br /&gt;&lt;br /&gt;Please let me know if you have had similar issues and what ideas you may have to fix them.&lt;br /&gt;&lt;br /&gt;(And of course we did, without luck, try all the usual stuff, restarting AOS'es, recompiling X++ etc)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8595219578530422301?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8595219578530422301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8595219578530422301&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8595219578530422301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8595219578530422301'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/12/odd-cil-compilation-issue.html' title='Odd CIL compilation issue'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6452815706441063120</id><published>2011-12-16T12:31:00.000+01:00</published><updated>2011-12-20T11:40:43.676+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Import CSV files using AIF</title><content type='html'>I was really happy back in January when I learned that you can now can import CSV, and other flat files, into AX using AIF with .NET transformations. Many&amp;nbsp;proprietary&amp;nbsp;file imports, and exports, can now be handled by AIF allowing you to focus on the business logic rather than the nitty-gritty file handling stuff.&lt;br /&gt;&lt;br /&gt;But since then I have missed proper documentation on how you actually go about it. The article "&lt;a href="http://msdn.microsoft.com/en-us/library/gg863930.aspx"&gt;Walkthrough: Creating a .NET Assembly Transform&lt;/a&gt;" on MSDN, doesn't quite get you to the finish line, where you have a file the AIF can actually read.&lt;br /&gt;&lt;br /&gt;Today however I found a three part blog series where part 3 ends up in having a file that AIF will consume.&lt;br /&gt;&lt;br /&gt;I recommend that you read all three parts you want to play with these transformations. Here's the link to part 1:&lt;br /&gt;&lt;a href="http://shashidotnet.wordpress.com/2011/04/11/dynamics-ax-2012-aif-import-csv-file-part-1-consume-web-service/"&gt;http://shashidotnet.wordpress.com/2011/04/11/dynamics-ax-2012-aif-import-csv-file-part-1-consume-web-service/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6452815706441063120?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6452815706441063120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6452815706441063120&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6452815706441063120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6452815706441063120'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/12/import-csv-files-using-aif.html' title='Import CSV files using AIF'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6140931299057056921</id><published>2011-12-12T09:16:00.001+01:00</published><updated>2011-12-12T10:01:00.444+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Color code forms in AX 2012, depending on environment/company</title><content type='html'>&lt;br /&gt;One thing that you might miss in the AX client is as a higher visibility of which company and environment that you’re working in. I have seen plenty of solutions where the entire background of forms is colored according to the current company, making each form look like something the cat has coughed up.&lt;br /&gt;&lt;br /&gt;The least intrusive solution and the only one I have taken time to modify a bit and implemented at a customer is the one made by &lt;a href="http://daxguy.blogspot.com/2010/04/ax-environment-information-on-ui-simple.html"&gt;Arijit Basu&lt;/a&gt;. I have modified it, allowing you to choose your own color and a customer text per AOS. Since not all forms are designed entirely correct, the solution unfortunately doesn’t work as expected on all forms.&lt;br /&gt;&lt;br /&gt;In AX 2012 the game has changed, because there is no background left on the forms to color. But the good folks at Microsoft has anticipated that we want to do some coloring still, and there’s a new method on FormRun which allows you to color the background of the statusbar; setStatusBarBackgroundColor.&lt;br /&gt;&lt;br /&gt;I have made a solution using this method. The solution allows you to select a color per database server, database and company. If you don’t specify a company, the color works for all companies on the selected server and database.&lt;br /&gt;&lt;br /&gt;I have included database server and name to support the scenario where you copy your production database to a test database. This way you can setup the indication for working in the test environment from your production system and you don’t need to add any information after having copied production data to test.&lt;br /&gt;&lt;br /&gt;The solution is absolutely version 1, but I expect to add more features for the visualization in the time to come. One thing I’d like to add as soon as possible is some kind of identification in the infolog.&lt;br /&gt;I have one known issue with the solution, which is that the lookups on database server and database don’t quite show all the servers and databases that I expected. I’ll look into that at some point, but any hints are welcome.&lt;br /&gt;&lt;br /&gt;Example of form:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-wypU8Tf2jNM/TuW4rs-7SnI/AAAAAAAABKE/EmT6mKwCudM/s1600/ColorCodedForm.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="220" src="http://2.bp.blogspot.com/-wypU8Tf2jNM/TuW4rs-7SnI/AAAAAAAABKE/EmT6mKwCudM/s320/ColorCodedForm.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can download the solution as an XPO or a model file from my SkyDrive.&lt;br /&gt;&lt;iframe frameborder="0" height="120px" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embed?cid=F09DC19B12BAF713&amp;amp;resid=F09DC19B12BAF713%21737&amp;amp;authkey=AASZAf9Gzk3xmkM" style="background-color: #fcfcfc; padding: 0;" title="Preview" width="98px"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6140931299057056921?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6140931299057056921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6140931299057056921&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6140931299057056921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6140931299057056921'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/12/color-code-forms-in-ax-2012-depending.html' title='Color code forms in AX 2012, depending on environment/company'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-wypU8Tf2jNM/TuW4rs-7SnI/AAAAAAAABKE/EmT6mKwCudM/s72-c/ColorCodedForm.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4104974855787484677</id><published>2011-11-30T14:12:00.001+01:00</published><updated>2011-12-01T09:40:01.222+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BOF'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Hiding a data member attribute from dialogs</title><content type='html'>When you use data contracts with for example the new Business Oprations Framework (BOF), it is smart that AX will generate the dialog for you. But what if you have a field in the data contract that you don't want exposed in the dialog?&lt;br /&gt;&lt;br /&gt;Well, use the SysOperationControlVisibilityAttribute:&lt;br /&gt;&lt;pre&gt;[DataMemberAttribute, SysOperationControlVisibilityAttribute(false)]&lt;br /&gt;public int parmIntProperty(int _parmIntProperty = parmIntProperty)&lt;br /&gt;{&lt;br /&gt;    parmIntProperty = _parmIntProperty;&lt;br /&gt;&lt;br /&gt;    return parmIntProperty;&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/542394186887018212-4104974855787484677?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4104974855787484677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4104974855787484677&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4104974855787484677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4104974855787484677'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/11/hiding-data-member-attribute-from.html' title='Hiding a data member attribute from dialogs'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>1</thr:total><georss:featurename>2635 Ishøj Municipality, Denmark</georss:featurename><georss:point>55.613972 12.34637</georss:point><georss:box>55.578101499999995 12.267406000000001 55.6498425 12.425334</georss:box></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1523871068559342256</id><published>2011-11-28T10:29:00.001+01:00</published><updated>2011-11-28T10:33:52.003+01:00</updated><title type='text'>Create ZIP files from AX</title><content type='html'>I&amp;nbsp;recently&amp;nbsp;had to write a solution to create ZIP files from within AX 2012.&amp;nbsp;Apparently&amp;nbsp;such&amp;nbsp;functionality&amp;nbsp;is not very well implemented in standard .NET.&lt;br /&gt;&lt;br /&gt;But the free DotNetZip .NET library works like a charm. Here's a link to the library on CodePlex:&amp;nbsp;&lt;a href="http://dotnetzip.codeplex.com/"&gt;http://dotnetzip.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1523871068559342256?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1523871068559342256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1523871068559342256&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1523871068559342256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1523871068559342256'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/11/create-zip-files-from-ax.html' title='Create ZIP files from AX'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3628893829298896474</id><published>2011-11-04T13:28:00.000+01:00</published><updated>2011-11-04T13:28:54.277+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BOF'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Call a BOF service with a caller record</title><content type='html'>If you need to call a Business Operations Framework (BOF) service with a caller record, like you'd often do for a RunBase job, you must create a custom &lt;a href="http://msdn.microsoft.com/en-us/library/sysoperationservicecontroller.aspx"&gt;SysOperationServiceController&lt;/a&gt; to get the record argument passes from the service controller to an applicable data contract.&lt;br /&gt;&lt;br /&gt;A good example from standard AX can found in the &lt;span id="goog_1620524230"&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/gg925004.aspx"&gt;PurchFinalizeServiceController&lt;/a&gt; &lt;span id="goog_1620524231"&gt;&lt;/span&gt;class.&lt;br /&gt;&lt;br /&gt;Another example can be found here: &lt;a href="http://www.artofcreation.be/2011/08/23/ax2012-sysoperation-part-2-sysoperationservicecontroller/"&gt;http://www.artofcreation.be/2011/08/23/ax2012-sysoperation-part-2-sysoperationservicecontroller/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3628893829298896474?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3628893829298896474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3628893829298896474&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3628893829298896474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3628893829298896474'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/11/call-bof-service-with-caller-record.html' title='Call a BOF service with a caller record'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6767719700799249358</id><published>2011-11-04T10:15:00.000+01:00</published><updated>2011-11-04T10:16:02.615+01:00</updated><title type='text'>Print images directly from AX without user interaction</title><content type='html'>I have written &lt;a href="http://palleagermark.blogspot.com/2009/08/print-images-directly-to-printer-with.html"&gt;one other post&lt;/a&gt; on doing this by calling WinApi::ShellExecute directly, but here is a more elaborate sample using .NET.&lt;br /&gt;&lt;br /&gt;The sample prints an image (in this case a TIFF image) to your default printer without prompting first. You need to add a reference to System.Printing in AX to use the sample.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;static void PrintImage(Args _args)&lt;br /&gt;{&lt;br /&gt;    System.Printing.PrintServer         localPrintServer    = new System.Printing.LocalPrintServer();&lt;br /&gt;    System.Printing.PrintQueue          printQueue          = System.Printing.LocalPrintServer::GetDefaultPrintQueue();&lt;br /&gt;    System.Diagnostics.Process          printProcess        = new System.Diagnostics.Process();&lt;br /&gt;    System.Diagnostics.ProcessStartInfo processStartInfo;&lt;br /&gt;    str                                 arguments;&lt;br /&gt;    Filename                            fileName            = @'C:\TESTFILE.TIF';&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    processStartInfo = printProcess.get_StartInfo();&lt;br /&gt;&lt;br /&gt;    processStartInfo.set_Verb("Print");&lt;br /&gt;    processStartInfo.set_FileName(@"C:\WINDOWS\System32\rundll32.exe");&lt;br /&gt;&lt;br /&gt;    arguments  = @'C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt ';&lt;br /&gt;    arguments += @'"';&lt;br /&gt;    arguments += filename;&lt;br /&gt;    arguments += @'" ';&lt;br /&gt;    arguments += @'"';&lt;br /&gt;    arguments += ClrInterop::getAnyTypeForObject(localPrintServer.get_Name()) + @'\' + ClrInterop::getAnyTypeForObject(printQueue.get_Name());&lt;br /&gt;    arguments += @'" ';&lt;br /&gt;    arguments += @'"%3" "%4"';&lt;br /&gt;&lt;br /&gt;    processStartInfo.set_Arguments(arguments);&lt;br /&gt;&lt;br /&gt;    processStartInfo.set_UseShellExecute(false);&lt;br /&gt;&lt;br /&gt;    printProcess.Start();&lt;br /&gt;    printProcess.Close();&lt;br /&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/542394186887018212-6767719700799249358?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6767719700799249358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6767719700799249358&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6767719700799249358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6767719700799249358'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/11/print-images-directly-from-ax-without.html' title='Print images directly from AX without user interaction'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8990335469844782674</id><published>2011-10-24T11:58:00.001+02:00</published><updated>2011-10-24T11:58:44.438+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>AX 2012 editor extensions</title><content type='html'>I try to keep focus on original content in this&amp;nbsp;blog, but yesterday I read a post that was so interessting that I'd like to point it out.&lt;br /&gt;&lt;br /&gt;The post is about the new possibilities you have for creating editor extensions to the X++ editor, as it is now&amp;nbsp;hosted by Visual Studio.&lt;br /&gt;&lt;br /&gt;Here's the link: &amp;nbsp;&lt;a href="http://dev.goshoom.net/en/2011/10/ax2012-editor-extensions/"&gt;http://dev.goshoom.net/en/2011/10/ax2012-editor-extensions/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8990335469844782674?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8990335469844782674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8990335469844782674&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8990335469844782674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8990335469844782674'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/10/ax-2012-editor-extensions.html' title='AX 2012 editor extensions'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8500835399463073438</id><published>2011-10-10T14:45:00.003+02:00</published><updated>2011-10-10T14:51:15.240+02:00</updated><title type='text'>Export and import labels for translation</title><content type='html'>If you develop solutions that need to be executed in several different languages you might need some external party to translate your label files, unless of course you are a linguistic genius.&lt;br /&gt;&lt;br /&gt;I have written a small solution with a job that exports labels to a spreadsheet that you can send to an external party. When you get the spreadsheet back, you run a second job which based on the spreadsheet creates an XPO file. Now you can use the standard XPO import tool to analyze the changes and&amp;nbsp;import the labels you want.&lt;br /&gt;&lt;br /&gt;The jobs work on AX 2009. I have not tested them with other versions of AX.&lt;br /&gt;&lt;br /&gt;You can find both jobs here: &lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embedicon.aspx/AX%20Blog%20Files/LabelsExportImport?cid=f09dc19b12baf713&amp;amp;sc=documents" style="background-color: #fcfcfc; height: 115px; padding: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8500835399463073438?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8500835399463073438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8500835399463073438&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8500835399463073438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8500835399463073438'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/10/export-and-import-labels-for.html' title='Export and import labels for translation'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3216060452157400156</id><published>2011-10-04T12:50:00.000+02:00</published><updated>2011-10-04T13:03:22.284+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='AIF'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Send invoices electronically</title><content type='html'>This is just a quick tip, as it seems to me that many are unaware of how easy it is to have Microsoft Dynamics AX 2009 and 2012 automatically send electronic customer invoices through AIF.&lt;br /&gt;&lt;br /&gt;All you have to do is to setup AIF with a valid endpoint for the customer and the document. And you must select a print destination other than “Screen”. I’ll suggest you use “Print archive” as print destination if you don’t actually need the printed document. This will just add the documents to an internal queue that you delete later.&lt;br /&gt;&lt;br /&gt;The \Classes\CustPrintOutInvoice\sendAsXML method will then take care of business, submitting the invoice to the AIF queue.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3216060452157400156?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3216060452157400156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3216060452157400156&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3216060452157400156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3216060452157400156'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/10/send-invoices-electronically.html' title='Send invoices electronically'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6875156497935686615</id><published>2011-09-19T16:11:00.000+02:00</published><updated>2011-09-19T16:11:21.583+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Bug in the training material for AX 2012 Development II</title><content type='html'>In chapter 1, Introduction to X++, under Jobs you can find the following statement:&lt;br /&gt;"... Jobs are used primarily for testing code during development and running batch processes within Microsoft Dynamics AX that affect large amounts of data".&lt;br /&gt;&lt;br /&gt;Jobs are not in any way related to the batch capabilities of AX, and due to that fact that they are executed on the client, you'd never use a job to work with large amount of data.&lt;br /&gt;&lt;br /&gt;I think the author somehow confuses the RunBase(Batch) framework with the Jobs node in the AOT.&lt;br /&gt;&lt;br /&gt;You can find the same error in the course material for AX 2009. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6875156497935686615?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6875156497935686615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6875156497935686615&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6875156497935686615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6875156497935686615'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/09/bug-in-training-material-for-ax-2012.html' title='Bug in the training material for AX 2012 Development II'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8837841368237334284</id><published>2011-09-13T19:55:00.000+02:00</published><updated>2011-10-05T22:54:17.301+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Querying printer queues from X++</title><content type='html'>For a client we need to print a page of an&amp;nbsp;X++ report and then some attached files, like PDF or Word documents.&lt;br /&gt;&lt;br /&gt;We need all the connected documents to be printed in one batch and we&amp;nbsp;must not&amp;nbsp;print the next X++ page before the attached documents are printed. &lt;br /&gt;&lt;br /&gt;So we need to figure out if the shell and the printer are finished printing the attached documents before sending the next document from AX.&lt;br /&gt;&lt;br /&gt;Luckily we can use the .NET library System.Printing to query the queue&amp;nbsp; and in particular we can call the NumberOfJobs to figure out if the attached documents have been printed.&lt;br /&gt;&lt;br /&gt;Here's a few bits of code for querying the printer queues:&lt;br /&gt;&lt;pre class="code"&gt;    System.Printing.PrintServer           printServer = new System.Printing.LocalPrintServer();&lt;br /&gt;    System.Printing.PrintQueueCollection  printQueueCollection = printServer.GetPrintQueues();&lt;br /&gt;    System.Printing.PrintQueue            printQueue;&lt;br /&gt;    System.Collections.IEnumerator        enumerator;&lt;br /&gt;    ;&lt;br /&gt;    &lt;br /&gt;    // Print the local server name&lt;br /&gt;    print printServer.get_Name();&lt;br /&gt;        &lt;br /&gt;    // Enumerate and print names of all the queues on the server&lt;br /&gt;    enumerator = printQueueCollection.GetEnumerator();&lt;br /&gt;    &lt;br /&gt;    while (enumerator.MoveNext())&lt;br /&gt;    {&lt;br /&gt;        printQueue = enumerator.get_Current();&lt;br /&gt;        print printQueue.get_FullName();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // Get information for a particular print queue&lt;br /&gt;    printQueue = new System.Printing.PrintQueue(printServer, "HP Color LaserJet 5550 PS");&lt;br /&gt;    &lt;br /&gt;    print printQueue.get_Description();&lt;br /&gt;    print printQueue.get_NumberOfJobs();&lt;br /&gt;    print ClrInterop::getAnyTypeForObject(printQueue.get_IsBusy());&lt;br /&gt;    print ClrInterop::getAnyTypeForObject(printQueue.get_IsPrinting());&lt;br /&gt;&lt;br /&gt;    pause;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In AX 2012 I would probably have placed the supporting code in a Visual Studio project rather than calling these&amp;nbsp;CLR objects from X++. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8837841368237334284?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8837841368237334284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8837841368237334284&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8837841368237334284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8837841368237334284'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/09/querying-printer-queues-from-x.html' title='Querying printer queues from X++'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3959195233233088289</id><published>2011-09-08T12:30:00.002+02:00</published><updated>2011-09-08T12:30:57.273+02:00</updated><title type='text'>Changing AOS service name</title><content type='html'>Sometimes in a development environment you may have an AOS serving a specific purpose or project and maybe the role of the AOS changes over time.&lt;br /&gt;&lt;br /&gt;When the role changes it would be nice that the service name was changed, to correctly&amp;nbsp;indicate&amp;nbsp;what it serves. Here is the command line for changing the display name of the service:&lt;br /&gt;&lt;br /&gt;&lt;pre classe="code"&gt;sc config AOS50$01 DisplayName= "Dynamics AX Object Server 5.0$01_MyNewPurpose"&lt;/pre&gt;&lt;br /&gt;This of course&amp;nbsp;doesn't&amp;nbsp;change things like the name of the folder holding the binaries (which you probably shouldn't change if you want to be able to uninstall the service).&amp;nbsp;To change everything you'd need to install a AOS service and possibly uninstall the old service.&lt;br /&gt;&lt;br /&gt;Changing the service name is just a quick way to indicate the changed purpose of the service.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3959195233233088289?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3959195233233088289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3959195233233088289&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3959195233233088289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3959195233233088289'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/09/changing-aos-service-name.html' title='Changing AOS service name'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3452643019023551570</id><published>2011-09-05T10:31:00.001+02:00</published><updated>2011-09-05T10:31:45.955+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BOF'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Fun observation about BOF dialogs</title><content type='html'>After reading the &lt;a href="http://msdn.microsoft.com/en-us/library/gg886585.aspx"&gt;Client User Experience Guidelines&lt;/a&gt; for dialog boxes, I noticed that the automatically generated dialogs from the Business Operation Framework (BOF)&amp;nbsp;doesn't quite meet the guidelines.&lt;br /&gt;&lt;br /&gt;According to the guidelines you need to display a "Main instruction":&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-gXsqJTx7fuo/TmSC1agOs9I/AAAAAAAABIk/OrYUl003sXE/s1600/IC491128.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://1.bp.blogspot.com/-gXsqJTx7fuo/TmSC1agOs9I/AAAAAAAABIk/OrYUl003sXE/s320/IC491128.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;But if you take a look at the dialog generated by BOF, theres is no "Main instruction" section, and I haven't really figured out how I can add it myself:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-T4q1xDpfXb8/TmSFE1o-1MI/AAAAAAAABIo/JnrxXEIGRIo/s1600/BOF.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="http://1.bp.blogspot.com/-T4q1xDpfXb8/TmSFE1o-1MI/AAAAAAAABIo/JnrxXEIGRIo/s320/BOF.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Dialog form which is the base for all RunBase dialogs has a &lt;a href="http://msdn.microsoft.com/en-us/library/aa601664.aspx"&gt;StaticText control&lt;/a&gt; for this main instruction, but the SysOperationTemplateForm, which is the base for BOF dialogs, dosn't have a control for displaying the main instruction.&lt;br /&gt;&lt;br /&gt;Not a big deal, but still a bit fun...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3452643019023551570?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3452643019023551570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3452643019023551570&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3452643019023551570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3452643019023551570'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/09/fun-observation-about-bof-dialogs.html' title='Fun observation about BOF dialogs'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-gXsqJTx7fuo/TmSC1agOs9I/AAAAAAAABIk/OrYUl003sXE/s72-c/IC491128.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6301319719618499613</id><published>2011-08-30T10:05:00.000+02:00</published><updated>2011-09-03T10:19:49.451+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BOF'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Validate dialog input in the Business Operation Framework</title><content type='html'>A number of good community articles have been written on the new Business Operation Framework (BOF) in Microsoft Dynamics AX 2012, for example these series:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://daxmusings.blogspot.com/2011/08/from-runbase-to-sysoperation-business.html"&gt;From RunBase to SysOperation: Business Operation Framework&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://daxmusings.blogspot.com/2011/08/from-runbase-to-sysoperation-business_18.html"&gt;From RunBase to SysOperation: Business Operation Framework (Cont'd)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.artofcreation.be/2011/08/21/ax2012-sysoperation-introduction/"&gt;AX 2012: SysOperation introduction&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;And then there is of course &lt;a href="http://msdn.microsoft.com/en-us/library/gg862488.aspx"&gt;MSDN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However the documentation from Microsoft in this area currently is not&amp;nbsp;yet comprehensive, so here is my first article on a&amp;nbsp;small area of the framework.&lt;br /&gt;&lt;br /&gt;If you need to validate the input of the dialog for a data contract,&amp;nbsp;you need to add code to the data contract.&amp;nbsp;Your&amp;nbsp;data contract must implement the SysOperationValidatable interface:&lt;br /&gt;&lt;pre class="code"&gt;[DataContractAttribute]&lt;br /&gt;public class BOFDataContractA &lt;strong&gt;implements SysOperationValidatable&lt;/strong&gt;&lt;br /&gt;{&lt;br /&gt;    int     parmIntProperty;&lt;br /&gt;    str     parmStrProperty;&lt;br /&gt;}&lt;/pre&gt;And you need to add&amp;nbsp;the validate method of the interface:&lt;br /&gt;&lt;pre class="code"&gt;public boolean validate()&lt;br /&gt;{&lt;br /&gt;    if (this.parmIntProperty() &amp;lt;= 25)&lt;br /&gt;    {&lt;br /&gt;        return checkFailed("The number must be higher than 25");&lt;br /&gt;    }&lt;br /&gt;    return true;&lt;br /&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/542394186887018212-6301319719618499613?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6301319719618499613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6301319719618499613&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6301319719618499613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6301319719618499613'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/08/validate-dialog-input-in-business.html' title='Validate dialog input in the Business Operation Framework'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7581197137936259826</id><published>2011-08-22T10:50:00.000+02:00</published><updated>2011-08-22T10:50:25.979+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Working with files that are supplied by or generated for clients</title><content type='html'>  &lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;span style="font-family: Calibri;"&gt;When you have jobs that require clients to upload a file to AX, or you have a job requiring AX to create a file for client, you earlier had to place the file in a folder with an&amp;nbsp;UNC path available to both the client and the server. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;span style="font-family: Calibri;"&gt;In AX 2012 you can use the class SysFileStoreManager to move the file between server and client, so the client doesn’t need to know about or deal with UNC paths.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;span lang="EN-US" style="mso-ansi-language: EN-US;"&gt;&lt;span style="font-family: Calibri;"&gt;More information is available on MSDN: &lt;a href="http://msdn.microsoft.com/en-us/library/sysfilestoremanager.aspx"&gt;http://msdn.microsoft.com/en-us/library/sysfilestoremanager.aspx&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7581197137936259826?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7581197137936259826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7581197137936259826&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7581197137936259826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7581197137936259826'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/08/working-with-files-that-are-supplied-by.html' title='Working with files that are supplied by or generated for clients'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5531110647957553078</id><published>2011-07-07T14:53:00.001+02:00</published><updated>2011-07-19T10:50:14.004+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIF'/><title type='text'>Upper- / lowercase oddity in AIF</title><content type='html'>Have you ever wondered why the name of batch id tag must start with a capital letter, i.e. &lt;inventbatchid&gt;, when using the InventDim table in an AIF service? The field in the table starts with a lowercase i.&lt;br /&gt;&lt;br /&gt;Well, the reason is that AIF uses the names of the methods in the AX class (AxInventDim in this case) for the naming in the schema and of other artifacts it generates. On the AX class the method for this field is named “parmInventDimId”. So here the name starts with a capital letter.&lt;br /&gt;&lt;br /&gt;Okay, that’s not really very odd and you could probably have figured this out just by making a qualified guess.&lt;br /&gt;&lt;br /&gt;But then, why must the tag for the Serial Id start with a lower case s? The field name in the table starts with a lowercase s, and the method name is “parmInventSerialId”. So according to the logic above, the Serial Id tag should also start with an uppercase character.&lt;br /&gt;&lt;br /&gt;This is where it gets interesting. In the \Classes\AxInternalBase\parmMethods method AX generates a list of fieldnames based on the parm methods of the AX class. The underlying class handing out the names is DictClass.&lt;br /&gt;DictClass actually returns a wrong name, or at least not what you see in the AOT, for the parmInventSerialId method. It returns the name as parminventSerialId, which matches the casing of the table field and, voila, the tag can be named exactly as the table field.&lt;br /&gt;&lt;br /&gt;Here is a job showing the names handed out by (Sys)DictClass:&lt;br /&gt;&lt;pre class="code"&gt;static void AIF(Args _args)&lt;br /&gt;{&lt;br /&gt;    SysDictClass            dc = new SysDictClass(5790);&lt;br /&gt;    Map                     methods;&lt;br /&gt;    MapEnumerator           me;&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    methods = dc.objectMethods2ClassId(true);&lt;br /&gt;    me      = methods.getEnumerator();&lt;br /&gt;&lt;br /&gt;    while (me.moveNext())&lt;br /&gt;    {&lt;br /&gt;        if (substr(me.currentKey(),1,strlen('parm')) == 'parm')&lt;br /&gt;        {&lt;br /&gt;            info (me.currentKey());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&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/542394186887018212-5531110647957553078?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5531110647957553078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5531110647957553078&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5531110647957553078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5531110647957553078'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/07/upper-lowercase-oddity-in-aif.html' title='Upper- / lowercase oddity in AIF'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-629439234904092284</id><published>2011-07-03T12:05:00.001+02:00</published><updated>2011-12-09T13:37:37.066+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2012'/><title type='text'>Find your SID</title><content type='html'>If you restore the demodatabase for&amp;nbsp;an AX 2012 image, you might need to know you SID in order to change your login in the AX database.&lt;br /&gt;&lt;br /&gt;This vbs script displays your SID and copies it to your clipboard:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;strComputer = "."&lt;br /&gt;Set objWMIService = GetObject("winmgmts:\\" &amp;amp; strComputer &amp;amp; "\root\cimv2")&lt;br /&gt;&lt;br /&gt;Set objAccount = objWMIService.Get _&lt;br /&gt;("Win32_UserAccount.Name='Administrator',Domain='corp'")&lt;br /&gt;Wscript.Echo objAccount.SID&lt;br /&gt;&lt;br /&gt;Set WshShell = WScript.CreateObject("WScript.Shell")&lt;br /&gt;WshShell.Run "cmd.exe /c echo " + objAccount.SID + " | clip", 0, TRUE&lt;br /&gt;&lt;br /&gt;Wscript.Echo "Your SID is copied to the  clipboard"&lt;/pre&gt;You may need to change the values for the user account name and the domain.&lt;br /&gt;&lt;br /&gt;And this is the script you can use in the database:&lt;br /&gt;&lt;pre class="code"&gt;update userinfo&lt;br /&gt;set&lt;br /&gt;networkdomain = 'YourDomain',&lt;br /&gt;networkalias = 'YourAlias',&lt;br /&gt;SID = 'YourSID'&lt;br /&gt;where ID = 'Admin'&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-629439234904092284?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/629439234904092284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=629439234904092284&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/629439234904092284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/629439234904092284'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/07/find-you-sid.html' title='Find your SID'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6798141553196122491</id><published>2011-06-29T15:04:00.002+02:00</published><updated>2011-09-09T07:05:55.870+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Unable to create project with project filtering, for example, for a
certain layer in AX 2009 RU-7?</title><content type='html'>&lt;div class="ExternalClassF37E4608946B46C3851A46573E92A118"&gt;&lt;div&gt;This hotfix from PartnerSource should fix the issue:&lt;/div&gt;&lt;div&gt;&lt;a href="https://mbs2.microsoft.com/Knowledgebase/kbdisplay.aspx?wtntzsmnwukntmmyoyzuvnyunluztwzsysvrkoorsyvyoqqm"&gt;https://mbs2.microsoft.com/Knowledgebase/kbdisplay.aspx?wtntzsmnwukntmmyoyzuvnyunluztwzsysvrkoorsyvyoqqm&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;You can find a bit more information on the partner support forum:&lt;/div&gt;&lt;div&gt;&lt;a href="http://social.microsoft.com/Forums/en-US/partnerdynamicsax/thread/23deeb62-197e-4305-ae94-157d18da12b5"&gt;&lt;span style="color: #3966bf;"&gt;http://social.microsoft.com/Forums/en-US/partnerdynamicsax/thread/23deeb62-197e-4305-ae94-157d18da12b5&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Please note that the hotfix description does not mention this issue  directly. The description for the hotfix is about access to LedgerTrans...&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6798141553196122491?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6798141553196122491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6798141553196122491'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/06/unable-to-create-project-with-project.html' title='Unable to create project with project filtering, for example, for a&#xA;certain layer in AX 2009 RU-7?'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><georss:featurename>2635 Ishøj, Danmark</georss:featurename><georss:point>55.613972 12.346369999999979</georss:point><georss:box>55.592451 12.258316499999978 55.635493 12.43442349999998</georss:box></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8504129425575271292</id><published>2011-06-07T13:45:00.000+02:00</published><updated>2011-06-07T13:45:53.551+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Not enough rights to use table 'Common' (Common) error i Purchase Totals (PurchTotals)</title><content type='html'>You can get this error from Purchase Totals if the user does not have Edit permissions to Administration / Tables. Here's is how you can fix it by changing you&amp;nbsp;security setup: &lt;br /&gt;&lt;a href="http://dynamics-ax-live.blogspot.com/2009/07/dynamics-ax-and-security-setup.html"&gt;http://dynamics-ax-live.blogspot.com/2009/07/dynamics-ax-and-security-setup.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can also fix the issue by&amp;nbsp;modifying the form. All you need to do is to change the "AllowCheck" property of the Common data source&amp;nbsp;of the PurchTotals form. Change the value from "Yes" to "No".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8504129425575271292?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8504129425575271292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8504129425575271292'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/06/not-enough-rights-to-use-table-common.html' title='Not enough rights to use table &apos;Common&apos; (Common) error i Purchase Totals (PurchTotals)'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5552822819313041380</id><published>2011-05-23T17:14:00.000+02:00</published><updated>2011-05-23T17:14:09.444+02:00</updated><title type='text'>Book review: Microsoft Dynamics Sure Step 2010</title><content type='html'>&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;This book is really helpful if you work with Dynamics and need to use Microsoft Dynamics Sure Step for your implementations. It’s a beautiful match for the material you can pick up online from Microsoft, adding background information, going into depth in relation to the online material and adding practical information to get going.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;The first chapters of the book provides excellent background information if you are not too familiar with project management and ERP or CRM implementations using a model like Sure Step.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;The middle of the book goes into depth with each of the Sure Step project phases and goes into depth with the Sure Step optimization offerings as well as areas around upgrade projects and project change management.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;Finally the books gives you a practical guide to adopt Sure Step in your organization.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;One of the authors have experience from with Microsoft, working with different aspect of developing the model. So the stuff in this book comes straight from the horse’s mouth.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;If you’re quick the book is on sale from the publisher, Packt Publishing, for the rest of the month. Their other excellent Dynamics book are also on sale just now. Click this &lt;a href="http://www.packtpub.com/article/exclusive-offer-microsoft-dynamics-books"&gt;link&lt;/a&gt; to get to the campaign.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5552822819313041380?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5552822819313041380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5552822819313041380'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/05/book-review-microsoft-dynamics-sure.html' title='Book review: Microsoft Dynamics Sure Step 2010'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1776372256994786828</id><published>2011-04-11T13:16:00.001+02:00</published><updated>2011-04-11T13:18:35.991+02:00</updated><title type='text'>Microsoft Dynamics AX 2012 White Papers: Code Upgrade</title><content type='html'>A whole bunch of white papers related to Microsoft Dynamics AX 2012 upgrade has been released in Microsoft Download Center. Download them &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=f31032ee-04a9-401b-abdb-d2d86b61085d&amp;amp;utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+MicrosoftDownloadCenter+(Microsoft+Download+Center)"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Click &lt;a href="http://www.microsoft.com/downloads/en/results.aspx?freetext=ax+2012&amp;amp;displaylang=en&amp;amp;stype=s_basic"&gt;here&lt;/a&gt; to search for other Micosoft Dynamics AX 2012 stuff available in Microsoft Download Center.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1776372256994786828?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1776372256994786828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1776372256994786828'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/04/microsoft-dynamics-ax-2012-white-papers.html' title='Microsoft Dynamics AX 2012 White Papers: Code Upgrade'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5362196812980679855</id><published>2011-04-07T08:21:00.003+02:00</published><updated>2011-04-08T07:56:52.832+02:00</updated><title type='text'>Create your own shortcuts in AX forms</title><content type='html'>In AX it is virtually impossible to control the shortcuts of buttons. Even though button properties like KeyTip indicate that you should be able to have some control, nothing really works.&lt;br /&gt;Here is a tip on how you can catch special keyboard combinations yourself, and thus create your own shortcuts.&lt;br /&gt;&lt;br /&gt;First you need to call a method from USER32.DLL to figure out if a certain key is pressed. You could for example implement this on the WinAPI class:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;static boolean getKeyPressed(int _keyCode)&lt;br /&gt;{&lt;br /&gt;    DLL winApiDLL = new DLL('USER32');&lt;br /&gt;    DLLFunction getKeyState = new DLLFunction(winApiDLL, 'GetAsyncKeyState');&lt;br /&gt;    int result;&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    getKeyState.returns(ExtTypes::WORD);&lt;br /&gt;    getKeyState.arg(ExtTypes::DWORD);&lt;br /&gt;&lt;br /&gt;    result = getKeyState.call(_keyCode);&lt;br /&gt;&lt;br /&gt;    if ((result &amp;amp; 0x8000) == 0x8000)&lt;br /&gt;        return true;&lt;br /&gt;    else&lt;br /&gt;        return false;&lt;br /&gt;}&lt;/pre&gt;The method is called with what’s called a virtual key code, which is the code of the key you want to know is pressed or not. You can find a list of these keyboard codes on MSDN: &lt;a href="http://msdn.microsoft.com/en-us/library/dd375731(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/dd375731(VS.85).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On your form you need to implement a method that is executed again and again while the form is idle. The method needs to check if your special key combination is pressed, do the action associated with the key and set the method up for next iteration.&lt;br /&gt;It could look like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;void myKeyboardCheck()&lt;br /&gt;{&lt;br /&gt;    #define.ALT(0x12)&lt;br /&gt;    #define.O(0x4F)&lt;br /&gt;    #define.timeOut(10)&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    // Check if this form is the foreground window of Windows&lt;br /&gt;    if (winApi::getForegroundWindow() == this.hWnd())&lt;br /&gt;    {&lt;br /&gt;        // Check if ALT + O is pressed&lt;br /&gt;        if (WinApi::getKeyPressed(#ALT) &amp;amp;&amp;amp; WinApi::getKeyPressed(#O))&lt;br /&gt;        {&lt;br /&gt;            // Check if the button is enable&lt;br /&gt;d            if (MyVerySpecialButton.enabled())&lt;br /&gt;            {&lt;br /&gt;                MyVerySpecialButton.clicked();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    // Reset timer&lt;br /&gt;    this.setTimeOut('myKeyboardCheck', #timeOut, true);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;In the run method of the form, I set the above method up for the first iteration, and I change the label of the button to reflect the desired shortcut:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;MyVerySpecialButton.text(MyVerySpecialButton.labelText() +' (o)');&lt;br /&gt;this.myKeyboardCheck();&lt;/pre&gt;&lt;br /&gt;If you need to implemt this in more forms, you might want to build a small supporting framework in order to avoid repeating much of the same code over and over.&amp;nbsp;The class DocuFileWatchDog could be a good pattern to look at.&lt;br /&gt;&lt;br /&gt;If you need to catch keyboard combinations at a global level, you should hook into the Info.OnEventGoingIdle() method.&amp;nbsp;Global reserved keys are defined under \Application Documentation\Global\Shortcutkeys.&lt;br /&gt;&lt;br /&gt;I want to give a big thank you to Microsoft support for pointing me in the right direction.&amp;nbsp;I can only wonder why Microsoft&amp;nbsp;haven't gotten this&amp;nbsp;stuff correctly wired up in the first place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5362196812980679855?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5362196812980679855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5362196812980679855'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/04/create-your-own-shortcuts-in-ax-forms.html' title='Create your own shortcuts in AX forms'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-2873557489264208110</id><published>2011-03-29T11:31:00.005+02:00</published><updated>2011-08-03T11:25:04.744+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hyper-V VirtualBox 2012'/><title type='text'>Run the Microsoft Dynamics®  AX 2012 Hyper-V pre-release image without a Hyper-V server</title><content type='html'>With the latest version of &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; from Oracle, you can run Hyper-V images from a PC without Windows Server 2008 R2 Hyper-V - for example a box with Windows 7.&lt;br /&gt;&lt;br /&gt;There&amp;nbsp;are&amp;nbsp;a few special things you must do in order to make the Dynamics 2012 image work with VirtualBox:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Setup the disks as IDE disks. It won't work as SATA disks.&lt;/li&gt;&lt;li&gt;Setup two network cards:&lt;/li&gt;&lt;li&gt;- Adapter 1 should be configured for "NAT"&lt;/li&gt;&lt;li&gt;- Adapter 2 should be configured for "Internal Network"&lt;/li&gt;&lt;/ul&gt;When the virtual server is started you need to change the TCP/IPv4 network setting for the first adapter:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Select "Use the following IP address"&lt;/li&gt;&lt;li&gt;IP address: 192.168.0.1&lt;/li&gt;&lt;li&gt;Subnet mask: 255.255.255.0&lt;/li&gt;&lt;li&gt;Select "Use the following DNS server addresses"&lt;/li&gt;&lt;li&gt;Preferred DNS server: 192.168.0.1&lt;/li&gt;&lt;/ul&gt;(UPDATE April 12th: It seems like you don't need to do these tcp/ip network changes in the new Beta image)&lt;br /&gt;&lt;br /&gt;I'm not too sure about the network card settings, as to why they have to be configured like this, but this configuration works and resemble the Hyper-V settings as closely as I could figure it out. If anyone has some actual knowledge&amp;nbsp;about this, I'd love to hear about it.&lt;br /&gt;&lt;br /&gt;You can safely diable all the Hyper-V related services on the machine if you want to save the extra overhead. VirtualBox is not using them.&lt;br /&gt;&lt;br /&gt;I have tried the image with only 2 GB of&amp;nbsp;RAM for the virtual server. It runs (except for Enterprise Portal), albeit very slow. 4 GB or more&amp;nbsp;gives you a more&amp;nbsp;acceptable performance.&lt;br /&gt;&lt;br /&gt;Check the license requirements&amp;nbsp;for VirtualBox. In most cases it is free. But if you, for example, roll it out as part of your business operations&amp;nbsp;you might have to buy a license.&lt;br /&gt;&lt;br /&gt;Please share your experiences running the image this way.&lt;br /&gt;&lt;br /&gt;Oh - and the Dynamics AX 2012 image itself!? Well, if you don't have it already&amp;nbsp;- you're unfortunately not eligible to get it yet and you'll have to wait for coming releases.&lt;br /&gt;Try the links mentioned here though: &lt;a href="http://kashperuk.blogspot.com/2011/04/microsoft-dynamics-ax-2012-beta-now.html"&gt;http://kashperuk.blogspot.com/2011/04/microsoft-dynamics-ax-2012-beta-now.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPDATE: Also check out this step-by-step guide, including a great tip to make SharePoint work as expected: &lt;a href="http://dynamicsnavax.blogspot.com/2011/04/how-to-run-ax2012-hyperv-on-virtualbox.html"&gt;http://dynamicsnavax.blogspot.com/2011/04/how-to-run-ax2012-hyperv-on-virtualbox.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-2873557489264208110?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2873557489264208110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2873557489264208110'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/03/run-microsoft-dynamics-ax-2012-hyper-v.html' title='Run the Microsoft Dynamics®  AX 2012 Hyper-V pre-release image without a Hyper-V server'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6126163550809230735</id><published>2011-03-13T13:10:00.000+01:00</published><updated>2011-03-13T13:10:00.401+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Book review: Microsoft Dynamics AX 2009 Administration</title><content type='html'>&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;This book is written for anyone engaged in planning, deploying, configuring and maintaining a Microsoft Dynamics AX 2009 installation.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;It takes you through topics like system planning, installation, configuration of Enterprise Portal and Role Centers, configuration of Workflow, configuration of Application Integration Framework (AIF), data migration, Security and User Administration, Setup of Kerberos Authentication, setup and maintenance of alerts and general maintenance and backup.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;Every topic is described in a way so the reader gets a good overview and lots of details for each task covered by the topic. A lot of screen clippings accompanies the tasks described in each chapter, making it easy to follow the necessary steps.&amp;nbsp; The publisher could however have done a better job implementing the screen clippings. The quality varies a lot, and some of the clippings are barely readable.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;The only chapter where I find a bit weak information, is the System Planning and Hardware Sizing chapter. The sizing part has some generic information about what you need to consider for your sizing, but not much in actual numbers to work with. I’ll give the author that Microsoft is equally reluctant to disclose actual numbers in their sizing guides. &amp;nbsp; &amp;nbsp; So just don’t expect this chapter to be a “next-next-finish” guide to get your right sizing.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;Other chapters have excellent tips, some can save you money directly on licenses, others can save you money in shorter implementation cycles. A good hint is the description on what you need to do if you want to deploy Enterprise Portal and don’t have the AX language license for “EN-US”. This tip alone more than pays for the book. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;It pleases me to see a few pages about automated batch jobs. Given the very technical design of this feature it often ends up in a gray area between developers and application consultants. Application consultants would surely benefit from reading this chapter.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;I’m also very happy to see the pages about Consistency Check. Not what you’d consider as a very sexy topic, but a lot of issues with data not being correctly migrated to Microsoft Dynamics AX could be caught in an early stage, just by running the consistency checks.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;Given the book title, I would have expected more information about regular Application Life Cycle management, for example something about how to deploy new versions of modifications. I feel the book, for most parts, stops when the initial system is installed and configured.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;Also it would have been great to see more Troubleshooting information for each topic, especially for Workflow and Enterprise Portal. And it would have been nice with a few pages about the Intelligent Data Management Framework (IDMF), even though it’s not yet part of the standard Microsoft Dynamics AX package.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px; min-height: 14.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;So should you buy this book?&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;Yes - This book is ensured a prominent place in my bookshelf and it’ll be an important tool in my toolbox. It gives you much value for your money.&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12.0px Helvetica; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="letter-spacing: 0.0px;"&gt;More information about the book here:&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://link.packtpub.com/4ITVfl" style="color: #3778cd; text-decoration: underline;"&gt;Microsoft Dynamics AX 2009 Administration&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6126163550809230735?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://www.packtpub.com/microsoft-dynamics-ax-2009-administration/book?utm_source=palleagermark.blogspot.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_006838' title='Book review: Microsoft Dynamics AX 2009 Administration'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6126163550809230735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6126163550809230735'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/03/book-review-microsoft-dynamics-ax-2009.html' title='Book review: Microsoft Dynamics AX 2009 Administration'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3720692518904083734</id><published>2011-02-10T21:51:00.000+01:00</published><updated>2011-02-10T21:51:48.139+01:00</updated><title type='text'>New book out about AX 2009 Administration</title><content type='html'>Check the book out here: &lt;a href="http://link.packtpub.com/4ITVfl"&gt;Microsoft Dynamics AX 2009 Administration&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll post a review shortly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3720692518904083734?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://link.packtpub.com/4ITVfl' title='New book out about AX 2009 Administration'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3720692518904083734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3720692518904083734'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2011/02/new-book-out-about-ax-2009.html' title='New book out about AX 2009 Administration'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-44561624736889220</id><published>2010-12-30T08:50:00.000+01:00</published><updated>2010-12-30T08:50:35.056+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>EP pop-up windows with checkboxes</title><content type='html'>When building pop-up windows with checkboxes it seems like you can't make the pop-up fields with a checkbox as target. When later reading the value of the pop-up field it always returns “on”.&lt;br /&gt;&lt;br /&gt;So with checkboxes you must write the value yourself when closing the pop-up window.&lt;br /&gt;&lt;br /&gt;Here is&amp;nbsp;an example. First some code from my pop-up parent:&lt;br /&gt;&lt;pre class="code"&gt;protected void AddChangeInvoiceBlockScript(SetMenuItemPropertiesEventArgs e, DataSetViewRow row)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AxUrlMenuItem menuItem = new AxUrlMenuItem(BLOCK_DIALOG);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (row != null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AxTableContext context = AxTableContext.Create(row.GetTableDataKey(row.DataSetView.Metadata.RootDataSource, null));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; menuItem.MenuItemContext = context;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; menuItem.RemoveNavigation = true;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.MenuItem.ClientOnClickScript = this.PopupChangeBlocked.GetOpenPopupEventReference(menuItem);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;And next initialization code and ButtonOK code from my pop-up:&lt;br /&gt;&lt;pre class="code"&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    if (!IsPostBack)&lt;br /&gt;    {&lt;br /&gt;        CheckBoxBlock.Focus();&lt;br /&gt;&lt;br /&gt;        IAxaptaRecordAdapter    ledgerJournalTransRecord;&lt;br /&gt;        AxBaseWebPart           webpart = AxBaseWebPart.GetWebpart(this);&lt;br /&gt;&lt;br /&gt;        if (webpart.ExternalContext != null)&lt;br /&gt;        {&lt;br /&gt;            ledgerJournalTransRecord = webpart.ExternalContext.DataKey.GetRecord(this.AxSession);&lt;br /&gt;            if (ledgerJournalTransRecord != null)&lt;br /&gt;                if ((int)ledgerJournalTransRecord.GetField(LEDGERJOURNALTRANS_WMAPRBLOC) == 1)&lt;br /&gt;                    CheckBoxBlock.Checked = true;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected void OkButton_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        string fieldValueBlock = CheckBoxBlock.Checked ? BLOCK_YES : BLOCK_NO;&lt;br /&gt;         &lt;br /&gt;        // Set the value based on the state of the checkbox&lt;br /&gt;        popupChild.SetFieldValue("hiddenBlockField", fieldValueBlock);&lt;br /&gt;&lt;br /&gt;        // Calling the script for closing the dialog box&lt;br /&gt;        this.popupChild.ClosePopup(true, true);&lt;br /&gt;    }&lt;br /&gt;    catch (Exception ex)&lt;br /&gt;    {&lt;br /&gt;        AxExceptionCategory exceptionCategory;&lt;br /&gt;        // This returns true if the exception can be handled here&lt;br /&gt;        if (!AxControlExceptionHandler.TryHandleException(this, ex, out exceptionCategory))&lt;br /&gt;        { &lt;br /&gt;            // The exception was fatal - in this case re-throw the error&lt;br /&gt;            throw;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;And finally closing code from my pop-up parent:&lt;br /&gt;&lt;pre class="code"&gt;void PopupChangeBlocked_PopupClosed(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    // Get the value of the Blocked check box&lt;br /&gt;    bool block = this.PopupChangeBlocked.GetFieldValue("hiddenBlockField") == "1" ? true : false;&lt;br /&gt;&lt;br /&gt;    // Send the value to the dataset, which will handle the update &lt;br /&gt;    this.dsWMAprApprovalList.GetDataSet().DataSetRun.AxaptaObjectAdapter.Call("setWMAprBlock", block);&lt;br /&gt;&lt;br /&gt;    // Clear popup values&lt;br /&gt;    this.PopupChangeBlocked.ClearFieldValues();&lt;br /&gt;&lt;br /&gt;    // Refresh the grid&lt;br /&gt;    this.gridWMAprApprovalList.DataBind();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;You can see another example on how to use checkboxes with pop-ups in the &lt;br /&gt;TSTimesheetDeleteYesNo User Control.&lt;br /&gt;&lt;br /&gt;Other resources:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc592938.aspx"&gt;Pop-up Windows on MSDN&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc550765.aspx"&gt;AxPopupParentcontrol on MSDN&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc642792.aspx"&gt;AxPopupChildControl on MSDN&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/epblog/archive/2010/01/05/ax-2009-ep-development-cookbook.aspx"&gt;Solution Monkey "Devlopers Cookbook"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-44561624736889220?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/44561624736889220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/44561624736889220'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/12/ep-pop-up-windows-with-checkboxes.html' title='EP pop-up windows with checkboxes'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5687577353835166257</id><published>2010-10-28T10:01:00.000+02:00</published><updated>2010-10-28T10:01:49.726+02:00</updated><title type='text'>Parsing a custom parameter from a user control to a data set used on another user control</title><content type='html'>The scenario is that one user control redirects to a page with another user control, and you need to pass a custom parameter for consumption by the dataset of the user control you redirect to.&lt;br /&gt;&lt;br /&gt;See the following Word document for at proposed solution:&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://cid-f09dc19b12baf713.office.live.com/embedicon.aspx/AX%20Blog%20Files/Parsing%20a%20custom%20parameter%20from%20a%20user%20control%20to%20a%20data%20set%20used%20on%20another%20user%20control.docx" style="background-color: #fcfcfc; height: 115px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5687577353835166257?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5687577353835166257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5687577353835166257'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/10/parsing-custom-parameter-from-user.html' title='Parsing a custom parameter from a user control to a data set used on another user control'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3040471067393650297</id><published>2010-10-28T09:56:00.000+02:00</published><updated>2010-10-28T09:56:18.608+02:00</updated><title type='text'>Using X++ to figure out which user the AOS runs under</title><content type='html'>This code will give you the AOS accounts domain and username:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;public static void main(Args args)&lt;br /&gt;{&lt;br /&gt;    InteropPermission   permission;&lt;br /&gt;    str                 userName;&lt;br /&gt;    str                 userDomain;&lt;br /&gt;    ;&lt;br /&gt;    permission = new InteropPermission(InteropKind::ClrInterop);&lt;br /&gt;    permission.assert();&lt;br /&gt;    userDomain  = System.Environment::get_UserDomainName();&lt;br /&gt;    userName    = System.Environment::get_UserName();&lt;br /&gt;    info(strFmt(@"%1\%2", userDomain, userName));&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The code must be executed from the server tier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3040471067393650297?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3040471067393650297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3040471067393650297'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/10/using-x-to-figure-out-which-user-aos.html' title='Using X++ to figure out which user the AOS runs under'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7918674819978556544</id><published>2010-07-22T07:59:00.000+02:00</published><updated>2010-07-22T07:59:15.269+02:00</updated><title type='text'>CSS Reference Chart for SharePoint 2007</title><content type='html'>Heather Solomon has an extensive guide to all the major CSS element used on MOSS and WSS v3 sites.&lt;br /&gt;&lt;br /&gt;Really usefull if you need to change some of the styles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.heathersolomon.com/content/sp07cssreference.htm"&gt;http://www.heathersolomon.com/content/sp07cssreference.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7918674819978556544?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.heathersolomon.com/content/sp07cssreference.htm' title='CSS Reference Chart for SharePoint 2007'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7918674819978556544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7918674819978556544'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/07/css-reference-chart-for-sharepoint-2007.html' title='CSS Reference Chart for SharePoint 2007'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-2439535086047128228</id><published>2010-06-29T11:17:00.001+02:00</published><updated>2010-08-08T11:47:10.345+02:00</updated><title type='text'>When sysMailer.quickSend isn't sending any mails</title><content type='html'>After rather many hours of debugging and hairpulling, I have figured out that you in order to send mails with sysMailer.quickSend, must have View rights to the security key Adminstration / Daily. You don't need to have access to any of the subnodes however.&lt;br /&gt;&lt;br /&gt;The cause is that sysMailer.quickSend in order to find the password to the SMTP server, calls SysEmailSMTPPassword::currentAOSInstance, which again makes a select statement to the SysServerSessions table.&lt;br /&gt;&lt;br /&gt;The SysServerSessions table must somehow be linked to the above mentioned security key, because without access to this, AX simply exits the metod on that select statement, just as if it had hit a Return statement - and no errors or other hints about the mail not being sent are displayed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-2439535086047128228?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/2439535086047128228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=2439535086047128228&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2439535086047128228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2439535086047128228'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/06/when-sysmailerquicksend-isnt-sending.html' title='When sysMailer.quickSend isn&apos;t sending any mails'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8134178909575023577</id><published>2010-06-28T15:32:00.000+02:00</published><updated>2010-06-28T15:32:54.762+02:00</updated><title type='text'>Coloring individual lines in an Enterprise Portal grid</title><content type='html'>Here's the code you need in order to color individual lines in an Enterprise Portal grid. The example is carried out in the CustomerListGrid user control.&lt;br /&gt;&lt;br /&gt;First add an event handler for data binding of the grid:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;if (this.AxGridView1!= null)&lt;br /&gt;{&lt;br /&gt;    this.AxGridView1.RowDataBound += new GridViewRowEventHandler(AxGridView1_RowDataBound);&lt;br /&gt;}&lt;/pre&gt;Next add the code controlling the logic of the coloring. In this case lines are colored "beige", if the currency of the customer is "USD":&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;pre class="code"&gt;void AxGridView1_RowDataBound(object sender, GridViewRowEventArgs e)&lt;br /&gt;{&lt;br /&gt;    Microsoft.Dynamics.Framework.Data.Ax.DataSetViewRow dataRow = null;&lt;br /&gt;    string currencyCode;&lt;br /&gt;&lt;br /&gt;    if (e.Row != null &amp;amp;&amp;amp; e.Row.RowType == DataControlRowType.DataRow)&lt;br /&gt;    {&lt;br /&gt;        dataRow = (Microsoft.Dynamics.Framework.Data.Ax.DataSetViewRow)e.Row.DataItem;&lt;br /&gt;        currencyCode = (string)dataRow.GetFieldValue("Currency");&lt;br /&gt;            &lt;br /&gt;        if (currencyCode == "USD")&lt;br /&gt;        {&lt;br /&gt;            e.Row.BackColor = System.Drawing.Color.Beige;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;I my personal opinion colored rows are disturbing to the eye, and I would prefer to add an icon to the lines which should have special attention. You can see how to do that on the ActivityListGrid user control.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8134178909575023577?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8134178909575023577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8134178909575023577&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8134178909575023577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8134178909575023577'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/06/coloring-individual-lines-in-enterprise.html' title='Coloring individual lines in an Enterprise Portal grid'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8177777711822015510</id><published>2010-05-27T13:36:00.003+02:00</published><updated>2010-06-28T15:38:26.752+02:00</updated><title type='text'>Video showing the new AX 6.0 X++ editor in action</title><content type='html'>Link to the video:&lt;br /&gt;&lt;a href="http://www.dynamicsaxbr.com/wp-content/uploads/2010/05/editorDemo2.wmv"&gt;http://www.dynamicsaxbr.com/wp-content/uploads/2010/05/editorDemo2.wmv&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Link to a blogpost about the video: &lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/vnicolas/archive/2010/05/25/dynamics-ax6-the-new-x-editor-in-action.aspx"&gt;http://blogs.msdn.com/b/vnicolas/archive/2010/05/25/dynamics-ax6-the-new-x-editor-in-action.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8177777711822015510?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/b/vnicolas/archive/2010/05/25/dynamics-ax6-the-new-x-editor-in-action.aspx' title='Video showing the new AX 6.0 X++ editor in action'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8177777711822015510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8177777711822015510&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8177777711822015510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8177777711822015510'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/05/video-showing-new-ax-60-x-editor-in.html' title='Video showing the new AX 6.0 X++ editor in action'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7649930439895909832</id><published>2010-05-27T13:34:00.000+02:00</published><updated>2010-05-27T13:34:45.231+02:00</updated><title type='text'>AX 2009 Security Profiler Tool</title><content type='html'>EMEA Dynamics AX Support have released a new tool allowing you to track what security keys are being used when a user navigates through the application.&lt;br /&gt;&lt;br /&gt;Read more here: &lt;a href="http://blogs.msdn.com/b/emeadaxsupport/archive/2010/05/25/ax-2009-securityprofiler-tool.aspx"&gt;http://blogs.msdn.com/b/emeadaxsupport/archive/2010/05/25/ax-2009-securityprofiler-tool.aspx&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The tool should not be loaded into a production environment.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7649930439895909832?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/b/emeadaxsupport/archive/2010/05/25/ax-2009-securityprofiler-tool.aspx' title='AX 2009 Security Profiler Tool'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7649930439895909832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7649930439895909832&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7649930439895909832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7649930439895909832'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/05/ax-2009-security-profiler-tool.html' title='AX 2009 Security Profiler Tool'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4898451209659835863</id><published>2010-05-13T09:23:00.000+02:00</published><updated>2010-05-13T09:23:45.593+02:00</updated><title type='text'>Dynamics AX Trace Parser update</title><content type='html'>The Dynamics AX Trace Parser has been updated.&lt;br /&gt;&lt;br /&gt;Read more here:&amp;nbsp;&lt;a href="http://blogs.msdn.com/axperf/archive/2010/05/12/dynamics-ax-trace-parser-update-2.aspx"&gt;http://blogs.msdn.com/axperf/archive/2010/05/12/dynamics-ax-trace-parser-update-2.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4898451209659835863?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/axperf/archive/2010/05/12/dynamics-ax-trace-parser-update-2.aspx' title='Dynamics AX Trace Parser update'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4898451209659835863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4898451209659835863&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4898451209659835863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4898451209659835863'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/05/dynamics-ax-trace-parser-update.html' title='Dynamics AX Trace Parser update'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3043524996021209269</id><published>2010-05-08T08:42:00.001+02:00</published><updated>2010-05-08T08:43:42.004+02:00</updated><title type='text'>Important SQL Server change</title><content type='html'>A new SQL Server change may substantially improve the overall performance of Dynamics AX.&lt;br /&gt;&lt;br /&gt;Read more on the &lt;a href="http://blogs.msdn.com/axperf/archive/2010/05/07/important-sql-server-change-parameter-sniffing-and-plan-caching.aspx"&gt;Dynamics Ax Performance Team Blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3043524996021209269?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/axperf/archive/2010/05/07/important-sql-server-change-parameter-sniffing-and-plan-caching.aspx' title='Important SQL Server change'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3043524996021209269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3043524996021209269&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3043524996021209269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3043524996021209269'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/05/important-sql-server-change.html' title='Important SQL Server change'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6071778032276689152</id><published>2010-05-03T15:21:00.000+02:00</published><updated>2010-05-03T15:21:43.013+02:00</updated><title type='text'>Interview about workflow in version 6.0 of AX.</title><content type='html'>Interview revealing details about Workflow in version 6.0 of AX.&lt;br /&gt;&lt;br /&gt;&lt;object data="data:application/x-silverlight-2," height="384" type="application/x-silverlight-2" width="512"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt;&lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/5/4/0/8/3/5/endpointWF4DynamicsAX_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/5/4/0/8/3/5/endpointWF4DynamicsAX_512_ch9.png, postid=538045" /&gt;&lt;param name="background" value="#00FFFFFF" /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt; &lt;/a&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6071778032276689152?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://channel9.msdn.com/shows/Endpoint/endpointtv-WF4-in-the-Real-World-Microsoft-Dynamics-AX/' title='Interview about workflow in version 6.0 of AX.'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6071778032276689152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6071778032276689152&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6071778032276689152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6071778032276689152'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/05/interview-about-workflow-in-version-60.html' title='Interview about workflow in version 6.0 of AX.'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3454503566490504257</id><published>2010-05-03T07:36:00.001+02:00</published><updated>2010-05-03T07:37:03.889+02:00</updated><title type='text'>How to be productive with SSRS and Dynamics AX 2009: A new approach</title><content type='html'>"How to be productive with SSRS and Dynamics AX 2009: A new approach" is the title of new blog series published by Saveen Reddy , Lead Program Manager - Dynamics AX Business Intelligence, from Microsoft.&lt;br /&gt;&lt;br /&gt;Looking very much forward to follow it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/saveenr/archive/2010/05/01/how-to-be-productive-with-ssrs-and-dynamics-ax-2009-a-new-approach.aspx"&gt;http://blogs.msdn.com/saveenr/archive/2010/05/01/how-to-be-productive-with-ssrs-and-dynamics-ax-2009-a-new-approach.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3454503566490504257?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/saveenr/archive/2010/05/01/how-to-be-productive-with-ssrs-and-dynamics-ax-2009-a-new-approach.aspx' title='How to be productive with SSRS and Dynamics AX 2009: A new approach'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3454503566490504257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3454503566490504257&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3454503566490504257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3454503566490504257'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/05/how-to-be-productive-with-ssrs-and.html' title='How to be productive with SSRS and Dynamics AX 2009: A new approach'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1918857796189099454</id><published>2010-04-25T10:08:00.002+02:00</published><updated>2010-04-25T10:09:23.660+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Free ebook: Introducing Microsoft SQL Server 2008 R2</title><content type='html'>Another free ebook from Microsoft Press: &lt;i&gt;Introducing Microsoft SQL Server 2008 R2&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The 10 chapters and 216 pages cover:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Part I: Database Administration&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Chapter 1: SQL Server 2008 R2 Editions and Enhancements&lt;/li&gt;&lt;li&gt;Chapter 2: Multi-Server Administration&lt;/li&gt;&lt;li&gt;Chapter 3: Data-Tier Applications&lt;/li&gt;&lt;li&gt;Chapter 4: High Availability and Virtualization Enhancements&lt;/li&gt;&lt;li&gt;Chapter 5: Consolidation and Monitoring&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Part II: Business Intelligence Development&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Chapter 6: Scalable Data Warehousing&lt;/li&gt;&lt;li&gt;Chapter 7: Master Data Services&lt;/li&gt;&lt;li&gt;Chapter 8: Complex Event Processing with StreamInsight&lt;/li&gt;&lt;li&gt;Chapter 9: Reporting Services Enhancements&lt;/li&gt;&lt;li&gt;Chapter 10: Self-Service Analysis with PowerPivot&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Read more here: &lt;a href="http://blogs.msdn.com/microsoft_press/archive/2010/04/14/free-ebook-introducing-microsoft-sql-server-2008-r2.aspx"&gt;http://blogs.msdn.com/microsoft_press/archive/2010/04/14/free-ebook-introducing-microsoft-sql-server-2008-r2.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Or download in &lt;a href="http://go.microsoft.com/fwlink/?LinkId=189148"&gt;XPS format here&lt;/a&gt; or &lt;a href="http://go.microsoft.com/fwlink/?LinkId=189147"&gt;PDF format here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1918857796189099454?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/microsoft_press/archive/2010/04/14/free-ebook-introducing-microsoft-sql-server-2008-r2.aspx' title='Free ebook: Introducing Microsoft SQL Server 2008 R2'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1918857796189099454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1918857796189099454&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1918857796189099454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1918857796189099454'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/04/free-ebook-introducing-microsoft-sql.html' title='Free ebook: Introducing Microsoft SQL Server 2008 R2'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5544873207092065791</id><published>2010-04-20T13:42:00.003+02:00</published><updated>2010-04-25T11:14:22.402+02:00</updated><title type='text'>Messed up Product Builder lookups</title><content type='html'>&lt;span xmlns=""&gt;Users are able to right click and change some of the lookup's in the Product Builder configuration form. This way they can by accident hide the entire lookup and not be able to use it again, before someone deletes the change from their Usage Data.&lt;br /&gt;&lt;br /&gt;To avoid this issue, set the property AllowUserSetup on the design of the PBATableVarLookup and PBAVariableEnumLookup forms to No.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5544873207092065791?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5544873207092065791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5544873207092065791&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5544873207092065791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5544873207092065791'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/04/messed-up-product-builder-lookups.html' title='Messed up Product Builder lookups'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1560662623232096523</id><published>2010-02-21T09:30:00.000+01:00</published><updated>2010-02-21T09:30:08.449+01:00</updated><title type='text'>Free ebook: Understanding Microsoft Virtualization Solutions (Second Edition)</title><content type='html'>Mitch Tulloch has updated his free ebook of last year; it’s now updated for Windows Server 2008 R2. You can now download Understanding Microsoft Virtualization Solutions, From the Desktop to the Datacenter in &lt;a href="http://download.microsoft.com/download/5/B/4/5B46A838-67BB-4F7C-92CB-EABCA285DFDD/693821ebook.xps"&gt;XPS format here&lt;/a&gt; and in &lt;a href="http://download.microsoft.com/download/5/B/4/5B46A838-67BB-4F7C-92CB-EABCA285DFDD/693821ebook.pdf"&gt;PDF format here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Six chapters adding up to 466 pages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1560662623232096523?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/microsoft_press/archive/2010/02/16/free-ebook-understanding-microsoft-virtualization-r2-solutions.aspx' title='Free ebook: Understanding Microsoft Virtualization Solutions (Second Edition)'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1560662623232096523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1560662623232096523&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1560662623232096523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1560662623232096523'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/02/free-ebook-understanding-microsoft.html' title='Free ebook: Understanding Microsoft Virtualization Solutions (Second Edition)'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7916174767778003060</id><published>2010-02-17T15:07:00.007+01:00</published><updated>2010-04-25T10:12:56.125+02:00</updated><title type='text'>It is possible for users to edit the Item reference fields of sales order lines and purchase order lines.</title><content type='html'>&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;It is possible for users to edit the Item reference fields of sales order lines and purchase order lines of a user adds these fields to the forms.&lt;br /&gt;Hopefully no adventurous end users read this post &lt;span class="Apple-style-span" style="font-family: Wingdings;"&gt;;-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Repro:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open Sales Order Details&lt;/li&gt;&lt;li&gt;Go to Lines / Other&lt;/li&gt;&lt;li&gt;Select one the Item reference fields&lt;/li&gt;&lt;li&gt;Note that you cannot change the values&lt;/li&gt;&lt;li&gt;Right click in the form and select Setup&lt;/li&gt;&lt;li&gt;Select the Line / TabLine/Lines/SalesLineGrid node&lt;/li&gt;&lt;li&gt;Click Add fields&lt;/li&gt;&lt;li&gt;Expand Order lines&lt;/li&gt;&lt;li&gt;Select for example the Reference number (InventRefId) field&lt;/li&gt;&lt;li&gt;Close the selection form&lt;/li&gt;&lt;li&gt;Close the User setup form&lt;/li&gt;&lt;li&gt;Observe that the Reference number field is now added to the grid, and you can edit it.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Obviously if you tamper with the references of the lines, you will destroy the integrity between the references entities, links are broken, and subsequent actions will not perform as expected.&lt;br /&gt;&lt;br /&gt;You should lock these fields on datasource field level by setting the AllowEdit property to No.&amp;nbsp;Maybe you should even consider setting the AllowEdit property to No on the table level. I'm not sure if the later suggestion causes any problems elsewhere in the application, but I can't imagine a place where you'd want users to edit these fields manually.&lt;br /&gt;&lt;br /&gt;Here are the fields where you should set AllowEdit=No&amp;nbsp;if you&amp;nbsp;want a fix&amp;nbsp;at table level:&lt;br /&gt;AOT &amp;gt; Tables&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SalesLine &amp;gt; Fields &amp;gt;&lt;/li&gt;&lt;li&gt;InventRefTransId&lt;/li&gt;&lt;li&gt;InventRefType&lt;/li&gt;&lt;li&gt;InventRefId&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PurchLine &amp;gt; Fields &amp;gt;&lt;/li&gt;&lt;li&gt;InventRefTransId&lt;/li&gt;&lt;li&gt;InventRefType&lt;/li&gt;&lt;li&gt;InventRefId&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7916174767778003060?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7916174767778003060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7916174767778003060&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7916174767778003060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7916174767778003060'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/02/it-is-possible-for-users-to-edit-item.html' title='It is possible for users to edit the Item reference fields of sales order lines and purchase order lines.'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1628167779097104385</id><published>2010-02-05T10:52:00.002+01:00</published><updated>2010-02-05T10:54:27.339+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Datasource names on Data Sets used for custom lookups on Enterprise Portal</title><content type='html'>When creating lookups based on a User Control in the AOT, it seems required that you, in the query of the dataset, make sure the datesource name and table name is exactly the same for each datasource. &lt;br /&gt;&lt;br /&gt;Normally you would be able to name the datasource differently from the table it represents, but the EP frameworks can't figure this out when you apply custom filters from the webpage. &lt;br /&gt;&lt;br /&gt;It fails when applying the filter, being unable to update the query on the dataset.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1628167779097104385?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1628167779097104385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1628167779097104385&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1628167779097104385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1628167779097104385'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/02/datasource-names-on-data-sets-used-for.html' title='Datasource names on Data Sets used for custom lookups on Enterprise Portal'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1852166977940140751</id><published>2010-02-05T10:41:00.006+01:00</published><updated>2010-02-08T20:30:01.571+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Sorting of versions shown in the Compare tool, when using MorphX version control, is not correct</title><content type='html'>When using the Compare tool from an AOT node in a system with MorphX version control enabled, the order of historical versions for the object is not shown as intended.&lt;br /&gt;&lt;br /&gt;The Compare tool is intended to show the first version and the twenty latest versions of the object. In this case however you get the twenty first versions. This is because the Compare tool uses the change numbers of the object to figure out the sorting, but the change number with MorphX version control is always 0.&lt;br /&gt;&lt;br /&gt;To fix this, make the following change to \Classes\SysTreenodeCompareContext\comparableListTreenode, lines 110-111:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;while select item&lt;br /&gt;    order by ChangeNumber desc, Version asc&lt;br /&gt;&lt;/pre&gt;with&lt;br /&gt;&lt;pre class="code"&gt;while select item&lt;br /&gt;    order by ChangeNumber desc, Version desc&lt;br /&gt;&lt;/pre&gt;This is obviously just a quick fix, but will work as intended until Microsoft fixes the bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1852166977940140751?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1852166977940140751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1852166977940140751&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1852166977940140751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1852166977940140751'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/02/sorting-of-versions-shown-in-compare.html' title='Sorting of versions shown in the Compare tool, when using MorphX version control, is not correct'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-2386983891043527713</id><published>2010-01-28T11:43:00.007+01:00</published><updated>2010-03-11T11:37:02.643+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Important limitation in Enterprise Portal deployment</title><content type='html'>&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;You cannot out of the box run multiple EP sites, with different&amp;nbsp;versions of User Control code, on the same IIS. &lt;br /&gt;&lt;br /&gt;This is because SharePoint expects the code to be under the %System drive%:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\ep folder and you cannot deploy to different folders.&lt;br /&gt;&lt;br /&gt;A workaround where you map the layout folder differently for each site, is described in &lt;a href="http://support.microsoft.com/kb/944105"&gt;KB944105&lt;/a&gt;. But it has some conequences, which you can read more about in the knowledgebase article.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-2386983891043527713?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/2386983891043527713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=2386983891043527713&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2386983891043527713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2386983891043527713'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/01/important-limitation-in-enterprise.html' title='Important limitation in Enterprise Portal deployment'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5921794137363561778</id><published>2010-01-22T12:56:00.003+01:00</published><updated>2010-04-22T11:55:33.028+02:00</updated><title type='text'>Create a base64 encoded string from an image in AX</title><content type='html'>Here's how you can create a base64 encoded string from an image in AX:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;static void Job4(Args _args)&lt;br /&gt;{&lt;br /&gt;    System.Drawing.Image     image;&lt;br /&gt;    Str                      string;&lt;br /&gt;    System.IO.MemoryStream   memoryStream;&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    // Load the file&lt;br /&gt;    image = System.Drawing.Image::FromFile(@"C:\sandbox\test.tif");&lt;br /&gt;&lt;br /&gt;    // Convert the file to a memory stream&lt;br /&gt;    memoryStream = new System.IO.MemoryStream();&lt;br /&gt;    image.Save(memoryStream, System.Drawing.Imaging.ImageFormat::get_Tiff());&lt;br /&gt;&lt;br /&gt;    // Create the base64 encoded string&lt;br /&gt;    string = System.Convert::ToBase64String(memoryStream.ToArray());&lt;br /&gt;&lt;br /&gt;    // Save it again, to a new image (just for fun or test if you want)&lt;br /&gt;    AifUtil::saveBase64ToFile(@"C:\sandbox\test1.tif", string);&lt;br /&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/542394186887018212-5921794137363561778?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5921794137363561778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5921794137363561778&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5921794137363561778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5921794137363561778'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/01/create-64-bit-encoded-string-from-image.html' title='Create a base64 encoded string from an image in AX'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4072347219428445346</id><published>2010-01-22T12:53:00.000+01:00</published><updated>2010-01-22T12:53:48.011+01:00</updated><title type='text'>Convert an image from one format to another from AX</title><content type='html'>Here's is how you can convert an image from one format to another:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;static void Job5(Args _args)&lt;br /&gt;{&lt;br /&gt;    System.Drawing.Image    image;&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    image = System.Drawing.Image::FromFile(@"C:\sandbox\test.tif");&lt;br /&gt;&lt;br /&gt;    image.Save(@"C:\sandbox\newtest.jpg", System.Drawing.Imaging.ImageFormat::get_Jpeg());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;The new files tend to be a bit larger. You have to work with the ImageCodecInfo class from .NET to fix this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4072347219428445346?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4072347219428445346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4072347219428445346&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4072347219428445346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4072347219428445346'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/01/convert-image-from-one-format-to.html' title='Convert an image from one format to another from AX'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3959603518149776838</id><published>2010-01-21T08:41:00.002+01:00</published><updated>2010-02-05T10:53:37.631+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Annoying bug in AX 2009 Intercompany Sales Order</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Here is a really annoying bug in AX 2009 intercompany sales order, causing errors where it can take you ages to figure out the cause.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When adding items to an older intercompany order, the intercompany chain is not started. The user needs to pay much attention to realize that the chain is not started and there is not easy way to start it, once the sales order lines is saved.&lt;br /&gt;&lt;br /&gt;Repro steps:&lt;br /&gt;Go to company CEE.&lt;br /&gt;Create a new sales order (customer should not be important, but use for example 1102).&lt;br /&gt;Go to the "Other" tab of the sales order header, and check the "Autocreate intercompany orders" check box.&lt;br /&gt;Go to the "Delivery" date tab page.&lt;br /&gt;Enter values for Confirmed Receipt and Confirmed Shipping Dates.&lt;br /&gt;Add an item line for item 1101.&lt;br /&gt;Move the cursor away from the sales order.&lt;br /&gt;At this point the system will generate the intercompany.&lt;br /&gt;&lt;br /&gt;Now change the sessions date to a date after the Confirmed Shipping date of the order.&lt;br /&gt;&lt;br /&gt;Go back to the order.&lt;br /&gt;Add one more line for 1101.&lt;br /&gt;When saving the record you should get a warning like this: "Item number 1101, requested shipping date 12/3/2009 is in the past.".&lt;br /&gt;The order line is now saved.&lt;br /&gt;Move the cursor away from the sales order.&lt;br /&gt;Nothing happens - the intercompany order has not been updated with the new order line and I see no way that I can trigger the system to generate the line, other than changing dates of the order, delete and recreate the line..&lt;br /&gt;&lt;br /&gt;Business impact:&lt;br /&gt;The first problem is that if users aren't paying proper attention to this warning, they'll never get the intercompany chain started on order. And they will not know about it, until they realize that the items aren't delivered. &lt;br /&gt;The second problem is that there is no way to change the dates and the get the intercompany chain started, unless you delete the sales order line and recreated. If you use the product builder to configure items for the sales order, this could be a bit of a pain to do.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Resolution:&lt;br /&gt;Microsoft is considering fixing this issue for AX 2011, but sees it as a matter of educating the users...&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3959603518149776838?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3959603518149776838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3959603518149776838&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3959603518149776838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3959603518149776838'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/01/annoying-bug-in-ax-2009-intercompany.html' title='Annoying bug in AX 2009 Intercompany Sales Order'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-9132074508325299968</id><published>2010-01-14T17:50:00.002+01:00</published><updated>2010-01-14T17:53:03.889+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>Book review: "Microsoft Dynamics AX 2009 Programming: Getting Started"</title><content type='html'>I have published my review of the book at &lt;a href="http://www.amazon.co.uk/Microsoft-Dynamics-AX-2009-Programming/dp/1847197302/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1263487948&amp;amp;sr=8-1"&gt;Amazon&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-9132074508325299968?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tinyurl.com/ye7lxqy' title='Book review: &quot;Microsoft Dynamics AX 2009 Programming: Getting Started&quot;'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/9132074508325299968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=9132074508325299968&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/9132074508325299968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/9132074508325299968'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/01/book-review-microsoft-dynamics-ax-2009.html' title='Book review: &quot;Microsoft Dynamics AX 2009 Programming: Getting Started&quot;'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3430637280224748693</id><published>2010-01-06T14:23:00.001+01:00</published><updated>2010-01-06T14:27:16.773+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>AX 2009 Enterprise Portal Development Cookbook</title><content type='html'>&lt;a href="http://www.linkedin.com/in/meysun"&gt;Mey Meenakshisundaram&lt;/a&gt; a.k.a. &lt;a href="http://blogs.msdn.com/solutions/"&gt;Solutions Monkey&lt;/a&gt; has compiled a number of various blog posts into one combined EP Development Cookbook.&lt;br /&gt;&lt;br /&gt;You can download the cookbook here: &lt;a href="http://blogs.msdn.com/epblog/attachment/9944064.ashx"&gt;http://blogs.msdn.com/epblog/attachment/9944064.ashx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3430637280224748693?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/solutions/archive/2010/01/05/ax-2009-ep-development-cookbook.aspx' title='AX 2009 Enterprise Portal Development Cookbook'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3430637280224748693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3430637280224748693&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3430637280224748693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3430637280224748693'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/01/ep-development-cookbook.html' title='AX 2009 Enterprise Portal Development Cookbook'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4471861635301074602</id><published>2010-01-05T18:59:00.003+01:00</published><updated>2010-01-05T18:59:07.278+01:00</updated><title type='text'>Images from the new X++ editor in AX 6.0</title><content type='html'>&lt;a href="http://blogs.msdn.com/vnicolas/archive/2009/10/11/dynamics-ax6-the-new-x-editor.aspx"&gt;http://blogs.msdn.com/vnicolas/archive/2009/10/11/dynamics-ax6-the-new-x-editor.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4471861635301074602?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/vnicolas/archive/2009/10/11/dynamics-ax6-the-new-x-editor.aspx' title='Images from the new X++ editor in AX 6.0'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4471861635301074602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4471861635301074602&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4471861635301074602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4471861635301074602'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2010/01/images-from-new-x-editor-in-ax-60.html' title='Images from the new X++ editor in AX 6.0'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5841146885609848998</id><published>2009-12-30T22:39:00.000+01:00</published><updated>2009-12-30T22:39:24.462+01:00</updated><title type='text'>Yet another AX 2009 development book</title><content type='html'>This book is in the cookbook style, where you are advised on how to solve certain tasks of Dynamics AX development:&amp;nbsp;&lt;a href="http://www.amazon.com/gp/product/1847199429?ie=UTF8&amp;amp;tag=agermarkcom-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1847199429"&gt;Microsoft Dynamics AX 2009 Development Cookbook&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=agermarkcom-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1847199429" style="border: none !important; margin: 0px !important;" width="1" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5841146885609848998?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5841146885609848998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5841146885609848998&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5841146885609848998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5841146885609848998'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/12/yet-another-ax-2009-development-book.html' title='Yet another AX 2009 development book'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4113434791301341298</id><published>2009-12-23T09:21:00.007+01:00</published><updated>2010-08-17T21:33:09.436+02:00</updated><title type='text'>Identifying the current application environment</title><content type='html'>There is&amp;nbsp;a ton of ways you can identify what application you are running, when running an application from a set of similar environments like "Development", "Test",&amp;nbsp;"Staging"&amp;nbsp;and so on.&lt;br /&gt;&lt;br /&gt;So here's a new suggestion on how you can setup identification like this, without any custom coding in the application: Add the identifier to your Role Center.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_7EkfWkX6NTw/SzHTv5_mg6I/AAAAAAAABCc/CqUrQAPuyE4/s1600-h/ApplicationIdentifier.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="110" ps="true" src="http://1.bp.blogspot.com/_7EkfWkX6NTw/SzHTv5_mg6I/AAAAAAAABCc/CqUrQAPuyE4/s320/ApplicationIdentifier.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Here's how to add the text:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open your Role Center&lt;/li&gt;&lt;li&gt;Click Personalize this Page&lt;/li&gt;&lt;li&gt;Click Add a Web Part in the zone where you want the identifier to appear&lt;/li&gt;&lt;li&gt;Add the Content Editor Web Part&lt;/li&gt;&lt;li&gt;Click the "open the tool pane" link that appears in the web part&lt;/li&gt;&lt;li&gt;Click Rich Text Editor&lt;/li&gt;&lt;li&gt;Add and format a text. For example "&lt;span style="color: red;"&gt;&lt;b&gt;You are in the TEST application&lt;/b&gt;&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;Click Save&lt;/li&gt;&lt;li&gt;Open the Appearance node&lt;/li&gt;&lt;li&gt;Enter a meaningfull title to replace "Content Editor Web Part"&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Click Exit Edit Mode (to the upper right)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4113434791301341298?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4113434791301341298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4113434791301341298&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4113434791301341298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4113434791301341298'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/12/identifying-current-application.html' title='Identifying the current application environment'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_7EkfWkX6NTw/SzHTv5_mg6I/AAAAAAAABCc/CqUrQAPuyE4/s72-c/ApplicationIdentifier.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1200594724353929555</id><published>2009-12-21T09:02:00.000+01:00</published><updated>2009-12-21T09:02:38.726+01:00</updated><title type='text'>Suppress report scaling messages</title><content type='html'>If you want to suppress the infolog message "Report is scaled to xx percent to fit page", you can do it by adding the following statement to your report code, in for example the init method:&lt;br /&gt;&lt;pre class="code"&gt;    this.printJobSettings().suppressScalingMessage(true);&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/542394186887018212-1200594724353929555?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1200594724353929555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1200594724353929555&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1200594724353929555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1200594724353929555'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/12/suppress-report-scaling-messages.html' title='Suppress report scaling messages'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5979557933102443054</id><published>2009-12-20T09:01:00.001+01:00</published><updated>2009-12-20T09:36:32.233+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Data Set lookups on Enterprise Portal (EP)</title><content type='html'>I just spent a complete day trying to make a simple lookup for EP. The lookup was intended to be a lookup on EmplTable, with the ability of filtering on the name of the employees, and it is supposed to return the employee id.&lt;br /&gt;&lt;br /&gt;The query behind is built on EmplTable with an inner join to DirPartyTable to get the name.&lt;br /&gt;&lt;br /&gt;The easy solution would have been to &lt;a href="http://msdn.microsoft.com/da-dk/library/cc623636(en-us).aspx"&gt;make a lookup based on a new Data Set&lt;/a&gt;, but in trying that I came across two odd limitations in this type of lookup:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You’ll only be able to sort the lookup on the field you want return.&lt;/li&gt;&lt;li&gt;The filter will only show tables from the outer table. The joined tables doesn’t show up.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I find these two facts limiting the usability of the lookup in such degree, that I can’t imagine the lookup was designed this way and I’m assuming it is my own limited skills preventing me from getting the lookup to work like I imagined.&lt;br /&gt;&lt;br /&gt;I actually found one other data set (WorkflowUserListLookup), aimed at driving a lookup in standard, built after same model, but it doesn’t seem to be used from the EP application...&lt;br /&gt;&lt;br /&gt;Do you have any experience with Data Set lookup based on joined tables and do you know if this lookup could be achieved with a Data Set lookup? Please comment.&lt;br /&gt;&lt;br /&gt;B.t.w. I solved the lookup by developing a new user control with a temporary table to drive the lookup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5979557933102443054?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5979557933102443054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5979557933102443054&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5979557933102443054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5979557933102443054'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/12/data-set-lookups-on-enterprise-portal.html' title='Data Set lookups on Enterprise Portal (EP)'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4648467814165640570</id><published>2009-12-17T20:52:00.002+01:00</published><updated>2009-12-30T22:50:22.439+01:00</updated><title type='text'>New AX development book out</title><content type='html'>New "getting started" book out know: &lt;a href="http://www.amazon.com/gp/product/1847197302?ie=UTF8&amp;amp;tag=agermarkcom-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1847197302"&gt;Microsoft Dynamics AX 2009 Programming: Getting Started&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=agermarkcom-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=1847197302" style="border: none !important; margin: 0px !important;" width="1" /&gt;&lt;br /&gt;&lt;br /&gt;Sample chapter available &lt;a href="http://www.packtpub.com/files/7306-microsoft-dynamics-ax-2009-programming-getting-started-sample-chapter-no-5-searching-for-data.pdf"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4648467814165640570?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4648467814165640570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4648467814165640570&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4648467814165640570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4648467814165640570'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/12/new-ax-development-book-out.html' title='New AX development book out'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6781582359924690125</id><published>2009-09-23T11:28:00.006+02:00</published><updated>2010-01-06T22:13:05.824+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Implement WorkSheet.Copy in \Classes\SysExcelWorksheet</title><content type='html'>This is how the method should be implemented:&lt;br /&gt;&lt;pre class="code"&gt;public void copy(SysExcelWorksheet _before = null, SysExcelWorksheet _after = null)&lt;br /&gt;{&lt;br /&gt;    anytype before, after;&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    if (_before)&lt;br /&gt;        before = _before.comObject();&lt;br /&gt;    else&lt;br /&gt;        before = COMArgument::NoValue;&lt;br /&gt;&lt;br /&gt;    if (_after)&lt;br /&gt;        after = _after.comObject();&lt;br /&gt;    else&lt;br /&gt;        after = COMArgument::NoValue;&lt;br /&gt;&lt;br /&gt;    worksheet.copy(before, after);&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/542394186887018212-6781582359924690125?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6781582359924690125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6781582359924690125&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6781582359924690125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6781582359924690125'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/09/implement-worksheetcopy-in.html' title='Implement WorkSheet.Copy in \Classes\SysExcelWorksheet'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1036420182127877095</id><published>2009-09-10T09:11:00.001+02:00</published><updated>2009-09-10T09:11:46.869+02:00</updated><title type='text'>Getting "Runas" back into your life</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;When testing different uses scenarios on AX, I usually use "Run as..." to open a client as another user. That option is removed from a lot of programs in Windows 2008 (and Vista) and typically won't work on AX configuration files (axc).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I (or actually Google) found this tip on "Norm's PerformancePoint Server blog", on how to get RunAs back:&lt;br/&gt;&lt;a href='http://blogs.msdn.com/normbi/archive/2008/04/26/adding-runas-back-into-vista-and-windows-2008.aspx'&gt;http://blogs.msdn.com/normbi/archive/2008/04/26/adding-runas-back-into-vista-and-windows-2008.aspx&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1036420182127877095?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1036420182127877095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1036420182127877095&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1036420182127877095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1036420182127877095'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/09/getting-back-into-your-life.html' title='Getting &amp;quot;Runas&amp;quot; back into your life'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4688798103869650530</id><published>2009-08-26T13:54:00.005+02:00</published><updated>2009-08-26T13:59:28.845+02:00</updated><title type='text'>Print images directly to a printer with ShellExecute (in XP)</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;If you need to write code in AX to print an image file directly to a printer, your first thought might be to call shellExecute like this:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;winapi::shellExecute(filename.jpg, '', '', 'print');&lt;br /&gt;&lt;/p&gt;&lt;p&gt;This would be fine with other types of files, but in XP image files will be printed via the Photo Printing Wizard, so in this case you simply don't get the file printed.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you open Tools / Folder Options from an Explorer, go to the tab page File Types and find the type of image you want to print, you can click Advanced button to see that the operating system does when you right click on a file of that type and select print. If available the information will be under "printto". For TIF images on my box, I can see that this is what it will call:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_PrintTo /pt "%1" "%2" "%3" "%4"&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So in reality this is what you have to call through shellExecute.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here is a sample job for that:&lt;/p&gt;&lt;pre class="code"&gt;static void TestPrint(Args _args)&lt;br /&gt;{&lt;br /&gt;    ;&lt;br /&gt;    winapi::shellExecute(@'C:\WINDOWS\System32\rundll32.exe', @'C:\WINDOWS\System32\shimgvw.dll,ImageView_PrintTo /pt "C:\MYIMAGEFILE.TIF" "\\PRINTSERVER\PRINTERNAME" "%3" "%4"');&lt;br /&gt;}&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4688798103869650530?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4688798103869650530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4688798103869650530&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4688798103869650530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4688798103869650530'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/08/print-images-directly-to-printer-with.html' title='Print images directly to a printer with ShellExecute (in XP)'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-2237061778828703698</id><published>2009-08-22T09:21:00.002+02:00</published><updated>2009-08-22T09:22:54.699+02:00</updated><title type='text'>X++ based Web User Interface is discontinued in the next version of Microsoft Dynamics AX Enterprise Portal</title><content type='html'>Hardly a big surprise....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/solutions/archive/2009/08/20/x-based-web-user-interface-is-discontinued-in-the-next-version-of-microsoft-dynamics-ax-enterprise-portal.aspx"&gt;http://blogs.msdn.com/solutions/archive/2009/08/20/x-based-web-user-interface-is-discontinued-in-the-next-version-of-microsoft-dynamics-ax-enterprise-portal.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-2237061778828703698?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/solutions/archive/2009/08/20/x-based-web-user-interface-is-discontinued-in-the-next-version-of-microsoft-dynamics-ax-enterprise-portal.aspx' title='X++ based Web User Interface is discontinued in the next version of Microsoft Dynamics AX Enterprise Portal'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/2237061778828703698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=2237061778828703698&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2237061778828703698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2237061778828703698'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/08/x-based-web-user-interface-is.html' title='X++ based Web User Interface is discontinued in the next version of Microsoft Dynamics AX Enterprise Portal'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4869947493316389340</id><published>2009-08-18T17:22:00.003+02:00</published><updated>2009-08-18T17:26:13.438+02:00</updated><title type='text'>Use keyboard lookup in Product Builder enumerated fields</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;In the standard product builder you cannot use Alt-Arrow Down to use the lookup on your enumerated fields. This has been an error since the release in version 3.0 and it doesn't seem like it will be fixed before AX 6.0. So I have looked into how this can be accomplished without too much messing around with the product builder.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The reason that you cannot use the lookup from the keyboard is that the AX kernel reasonably enough decides that there is no point in activating the lookup. The key problem is simply to make the kernel accept that there is a point in activating the lookup.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;All the enumerated field is based on the table field \Data Dictionary\Tables\PBATmpBuildForm\Fields\tmpString which again is based on the extended data type PBATmpString. The extended data type has no relations on it, and that's the simple reason that the kernel won't activate the lookup.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So to make the kernel activate the lookup I have created a new table, PBASupportEnumLookup, which the extended data type now has a relation to.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Now the kernel will activate the lookup, but it will also try to validate the entered enum values against this table. So I must insert all enum values to the new PBASupportEnumLookup table. I do that in validateField of PBATmpBuildForm before validating the field entry. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The validation part would not be needed if I could get this to work with table relations, because on a table relation I can set the Validate property to no. But unfortunately, a table relation is not enough to make the kernel run the lookup.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Everything else is handled by the product builder code, which already works fine if users in standard use the mouse to open the lookup....&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Adding the enum entries to a new table is obviously not the most desirable solution, but it works and it works with minimal footprint in the standard code base. And the users are happy!&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:66px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-f09dc19b12baf713.skydrive.live.com/embedrowdetail.aspx/AX%20Blog%20Files/Product%20Builder%20Keyboad%20Lookup"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4869947493316389340?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4869947493316389340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4869947493316389340&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4869947493316389340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4869947493316389340'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/08/use-keyboard-lookup-in-product-build.html' title='Use keyboard lookup in Product Builder enumerated fields'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4496187452682232079</id><published>2009-08-17T11:59:00.007+02:00</published><updated>2009-08-18T16:42:55.704+02:00</updated><title type='text'>Found a Sleep statement in AX 2009 released code</title><content type='html'>&lt;div&gt;It's awfully nice of the developer to leave the users some time to be able to read progress in the progressbar ;-)&lt;p&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_7EkfWkX6NTw/Sokqnqyu81I/AAAAAAAABBA/G0BqCfD_sXU/s1600-h/PBAExecuteLine.png"&gt;&lt;img style="WIDTH: 373px; HEIGHT: 126px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5370870891606373202" border="0" alt="" src="http://4.bp.blogspot.com/_7EkfWkX6NTw/Sokqnqyu81I/AAAAAAAABBA/G0BqCfD_sXU/s320/PBAExecuteLine.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4496187452682232079?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4496187452682232079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4496187452682232079&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4496187452682232079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4496187452682232079'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/08/found-sleep-statement-in-ax-2009.html' title='Found a Sleep statement in AX 2009 released code'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7EkfWkX6NTw/Sokqnqyu81I/AAAAAAAABBA/G0BqCfD_sXU/s72-c/PBAExecuteLine.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1077603785309869265</id><published>2009-07-07T11:31:00.002+02:00</published><updated>2009-07-07T11:33:12.767+02:00</updated><title type='text'>Document management on Return Order may apply documents to wrong record</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;The following bug applies to AX 2009 application build number 5.0.1500.809 and earlier.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When you attach a document or note through document management to a return order line, the document or note might be attached to the current inventory dimension record rather than the return order line.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Repro steps:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open a new or existing return order from Accounts Receivable / Common Forms / Return order details&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Go to the lines of the order&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make one of the inventory dimension fields active, for example Configuration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Activate document management and a note.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Save and close the document management form.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make a non-inventory dimension field active.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Activate document management, and observer that you don't see you note.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Close document management again.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make again one of the inventory dimension fields active.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open document management, and observe that the note now is displayed.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;To fix the issue, the ReturnTable form should have a docCursor method similar to the docCursor method on the SalesTable form. &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1077603785309869265?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1077603785309869265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1077603785309869265&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1077603785309869265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1077603785309869265'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/07/document-management-on-return-order-may.html' title='Document management on Return Order may apply documents to wrong record'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5470101766572572142</id><published>2009-07-02T11:40:00.000+02:00</published><updated>2009-07-02T11:41:17.179+02:00</updated><title type='text'>Longer Support Timelines for Key Microsoft Dynamics Service Packs</title><content type='html'>See the old and the new timelines here: &lt;a href="http://support.microsoft.com/gp/lifean41"&gt;http://support.microsoft.com/gp/lifean41&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5470101766572572142?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5470101766572572142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5470101766572572142&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5470101766572572142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5470101766572572142'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/07/longer-support-timelines-for-key.html' title='Longer Support Timelines for Key Microsoft Dynamics Service Packs'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4294901087859200830</id><published>2009-07-02T11:32:00.003+02:00</published><updated>2010-10-25T08:54:39.140+02:00</updated><title type='text'>Troubleshooting missing EP Development Tools</title><content type='html'>If you cant see the Dynamics AX Web Project template in Visual Studio, please go through the following list:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Read the blog article "&lt;a href="http://blogs.msdn.com/solutions/archive/2008/08/09/ep-visual-studio-add-in.aspx"&gt;EP Visual Studio Add-In&lt;/a&gt;" to check if all components are correctly installed.&lt;br /&gt;As you can read in the article you must copy the installed templates from the My Documents folder of the user who installed the EP Developer Tools. The files and locations are listed in the article.&lt;/li&gt;&lt;li&gt;You may need to refresh Visual Studios cache of templates after copying them:Open the Visual Studio command prompt (Start \ Programs \ Microsoft Visual Studio 2008 \ Visual Studio Tools \ Visual Studio 2008 Command Prompt) and type &lt;span style="font-family: courier new;"&gt;devenv /installvstemplates&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;If you still don't see the template, remember that you need to select C# as your project programming language before it shows up.&lt;/li&gt;&lt;/ol&gt;If you can see the template but can't connect to the AX AOS from Visual Studio check the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Check that .NET Business Connector has been correctly installed and that the configuration points to the correct AOS instance.&lt;br /&gt;Check that the user you run Visual Studio with, has login and proper development permissions in AX.&lt;/li&gt;&lt;li&gt;Check that the "Dynamics AX Enterprise Portal Tools" Add-in is correctly installed in Visual Studio. Open Visual Studio / Tools / Add-in Manager to verify that Add-in is correctly installed and configured. If you can't see it, you must reinstall the EP Development Tools.&lt;/li&gt;&lt;/ol&gt;Additional troubleshooting:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://daxdilip.blogspot.com/2010/10/dynamics-ax-2009-ep-error-could-not.html"&gt;http://daxdilip.blogspot.com/2010/10/dynamics-ax-2009-ep-error-could-not.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4294901087859200830?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4294901087859200830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4294901087859200830&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4294901087859200830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4294901087859200830'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/07/troubleshooting-missing-ep-development.html' title='Troubleshooting missing EP Development Tools'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6844645604757197710</id><published>2009-06-30T15:39:00.001+02:00</published><updated>2009-06-30T15:41:39.509+02:00</updated><title type='text'>Intelligent Data Management Framework For Microsoft Dynamics AX (Pre-Release)</title><content type='html'>The Intelligent Data Management Framework for Microsoft Dynamics® AX helps administrators optimize Dynamics AX database layout by intelligently monitoring index usage, index layout, fragmentation and query patterns thru indices. The framework allows reduction of the database size by purging transaction records from a set of related entities, while maintaining the consistency and integrity of production data. The Intelligent Data Management Framework provides customers and partners the ability to identify and discover related entities based on Microsoft Dynamics AX metadata and to determine the purging criteria for entities and transactions. The Intelligent Data Management Framework also analyzes the production database to determine current usage patterns and assesses the health of the Microsoft Dynamics AX application. This Framework is compatible with all supported versions of Dynamics AX (Axapta 3.0 SP6 with latest kernel, Dynamics AX 4.0 SP2, Dynamics AX 2009 SP1). Customers on an active maintenance plan can implement this framework to build an efficient data management solution for their implementation.&lt;br /&gt;&lt;br /&gt;At RTM, this Framework will include “Archive to Offline” Instance Support.&lt;br /&gt;&lt;br /&gt;You can download the framework from &lt;a href="https://mbs.microsoft.com/partnersource/downloads/releases/ax_idmf.htm"&gt;PartnerSource&lt;/a&gt; (requires PartnerSource login)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;&lt;strong&gt;This is a pre-release non production build. &lt;/strong&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6844645604757197710?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6844645604757197710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6844645604757197710&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6844645604757197710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6844645604757197710'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/06/intelligent-data-management-framework.html' title='Intelligent Data Management Framework For Microsoft Dynamics AX (Pre-Release)'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8745603903079622197</id><published>2009-06-30T15:31:00.001+02:00</published><updated>2009-06-30T15:33:38.779+02:00</updated><title type='text'>AX 2009 Hotfix rollup 2 for SP1 is released</title><content type='html'>Check the description here: &lt;a href="https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb;en-us;971536"&gt;https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb;en-us;971536&lt;/a&gt; (requires partnersource login)&lt;br /&gt;&lt;br /&gt;The SYP build number of the rollup is 5.0.1500.809&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8745603903079622197?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://mbs.microsoft.com/knowledgebase/KBDisplay.aspx?scid=kb;en-us;971536' title='AX 2009 Hotfix rollup 2 for SP1 is released'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8745603903079622197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8745603903079622197&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8745603903079622197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8745603903079622197'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/06/ax-2009-hotfix-rollup-2-for-sp1-is.html' title='AX 2009 Hotfix rollup 2 for SP1 is released'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4681175394363766937</id><published>2009-06-16T09:07:00.002+02:00</published><updated>2009-06-17T13:40:10.879+02:00</updated><title type='text'>Reading PDF's from the PC</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;I have just read the training material for a couple of the AX certifications. I didn't want to print it, so I tried to read it directly off my laptop, which with Adobe Reader is a completely disaster. It is completely unpredictable when the reader changes pages while scrolling the document and after reading very few pages you just get tired. I moved the material to my Mac which has a good PDF reader.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Today I found this free reader, which allows me to read PDF's proper on the PC:&lt;br /&gt;&lt;a href="http://www.docu-track.com/home/prod_user/PDF-XChange_Tools/pdfx_viewer"&gt;http://www.docu-track.com/home/prod_user/PDF-XChange_Tools/pdfx_viewer&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4681175394363766937?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4681175394363766937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4681175394363766937&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4681175394363766937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4681175394363766937'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/06/reading-pdf-from-pc.html' title='Reading PDF&amp;#39;s from the PC'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-9070429987355135426</id><published>2009-06-10T16:07:00.004+02:00</published><updated>2009-06-10T16:21:20.076+02:00</updated><title type='text'>Dialog error when adding batch tasks to a batch job</title><content type='html'>If you enter a new batch task to a batch job manually, AX might not initialize the Parameters dialog properly.&lt;br /&gt; &lt;br /&gt;AX call unpack of the task class, with the contents of the Batch.Parameters field, but since we are creating a new entry to the table this field is empty.&lt;br /&gt; &lt;br /&gt;What AX should do, and what RunBase normally does, is then to call initParmDefault of the task class to initalize it with for example a base query.th for example a base query.&lt;br /&gt;&lt;br /&gt;Here is the code to insert in \Data Dictionary\Tables\Batch\Methods\showDialog in order to fix this issue.&lt;br /&gt;&lt;br /&gt;Replace:&lt;br /&gt;&lt;pre class="code"&gt;runClass.unpack(this.Parameters)&lt;/pre&gt;With:&lt;br /&gt;&lt;pre class="code"&gt;// As RunBase normally would do, we need to&lt;br /&gt;// call initParmDefault here, if there are no&lt;br /&gt;// values to unpack&lt;br /&gt;if (!runClass.unpack(this.Parameters))&lt;br /&gt;{&lt;br /&gt;    runClass.initParmDefault();&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/542394186887018212-9070429987355135426?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/9070429987355135426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=9070429987355135426&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/9070429987355135426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/9070429987355135426'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/06/dialog-error-when-adding-batch-tasks-to.html' title='Dialog error when adding batch tasks to a batch job'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-2506565154106602255</id><published>2009-05-28T15:29:00.001+02:00</published><updated>2009-05-28T15:29:38.345+02:00</updated><title type='text'>Product builder performance tip</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;I recently had the client/server trace on, while opening the production builder configuration form. Boy, I wish I didn't…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Depending on how complex your product model is, this for generates an excessive number of calls between the client and server.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In my case, the largest group of calls was calls made to \Data Dictionary\Tables\PBALanguageTxt\Methods\label. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;The method is tied to be executed on the server, with the "server" keyword. &lt;br/&gt;But, the table itself is cached as EntireTable, and this means that the client is likely to holds its own cache of the values and thus there is no need, and in particular, no gain of forcing AX to run the method on the server.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When I remove the "server" keyword from this method, I get rid of the majority of client/server calls while opening and navigating in this form.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There is however still room for improvement, as the form still generates a huge amount of calls. &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-2506565154106602255?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/2506565154106602255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=2506565154106602255&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2506565154106602255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2506565154106602255'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/05/product-builder-performance-tip.html' title='Product builder performance tip'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1559151048184829329</id><published>2009-05-27T13:13:00.003+02:00</published><updated>2009-05-27T13:21:20.853+02:00</updated><title type='text'>Create comments with a saved change request number</title><content type='html'>I have written a small editor script which allows you to insert a pre-formatted comment, with the option to save and reuse a change request number as part of the comment.&lt;br /&gt;&lt;br /&gt;After installating the xpo, the new script is avaible in the X++ editor from Script (Alt+R) \ Scripts \ Comments \ SavedComment.&lt;br /&gt;&lt;br /&gt;The comments made with the script is formatted like this:&lt;br /&gt;//[date] [current user id] #[change request number]&lt;br /&gt;&lt;br /&gt;You can download the script from my SkyDrive:&lt;br /&gt;&lt;iframe scrolling="no" marginheight="0" marginwidth="0" frameborder="0" style="width:240px;height:26px;margin:3px;padding:0;border:1px solid #dde5e9;background-color:#ffffff;" src="http://cid-f09dc19b12baf713.skydrive.live.com/embedrow.aspx/AX%20Blog%20Files/Editor%20Script%20for%20comments"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Use of the script is entirely at your own risk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1559151048184829329?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1559151048184829329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1559151048184829329&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1559151048184829329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1559151048184829329'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/05/create-comments-with-saved-change.html' title='Create comments with a saved change request number'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7712703269934077654</id><published>2009-05-25T22:12:00.003+02:00</published><updated>2009-06-30T15:36:14.945+02:00</updated><title type='text'>formdatasource.research(TRUE)</title><content type='html'>A small but not uninteresting little parameter has sneaked its way into AX 2009. The research method on form data sources now allows you to make AX reposition the cursor to the active record you were placed on when calling research.&lt;br /&gt;&lt;br /&gt;To do this, call xxx_ds.research(true).&lt;br /&gt;&lt;br /&gt;This little parameter saves you the effort of saving data for the record you are on, and use the saved data with the find() method to find the record again, and hopefully (I haven’t tested this though) it has much better performance than the find method. Performance couldn't really be worse than with the find method, so I assume performance is much better when MS introduces this as a new parameter.&lt;br /&gt;&lt;br /&gt;Link to MSDN SDK documentation for the method: &lt;a href="http://msdn.microsoft.com/en-us/library/aa597768.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa597768.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7712703269934077654?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn.microsoft.com/en-us/library/aa597768.aspx' title='formdatasource.research(TRUE)'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7712703269934077654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7712703269934077654&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7712703269934077654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7712703269934077654'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/05/formdatasourceresearchtrue.html' title='formdatasource.research(TRUE)'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5930705979322524455</id><published>2009-04-15T08:16:00.003+02:00</published><updated>2009-04-15T08:22:53.622+02:00</updated><title type='text'>Free SharePoint Designer 2007</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;SharePoint Designer 2007 is now free.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You can download the product, as well as educational videos, from here:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42"&gt;&lt;span style="font-family:Verdana;font-size:8;color:#3966bf;"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you have bought a license for SharePoint Designer 2007, it can be changed to a license to Expression Web. Read more here: &lt;a href="http://office.microsoft.com/en-us/sharepointdesigner/HA103607621033.aspx"&gt;&lt;span style="font-family:Tahoma;font-size:10;color:purple;"&gt;http://office.microsoft.com/en-us/sharepointdesigner/HA103607621033.aspx&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:8;color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://office.microsoft.com/en-us/sharepointdesigner/HA103607621033.aspx"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5930705979322524455?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5930705979322524455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5930705979322524455&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5930705979322524455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5930705979322524455'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/04/free-sharepoint-designer-2007.html' title='Free SharePoint Designer 2007'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8847876905534777472</id><published>2009-03-02T20:34:00.014+01:00</published><updated>2009-05-04T21:30:26.605+02:00</updated><title type='text'>Creating an image file based on plain text from AX</title><content type='html'>For the new version of Logica's electronic invoice handling module (&lt;a href="http://www.logica.dk/elektronisk+fakturabehandling+i+dynamics+ax/400006549"&gt;eScan&lt;/a&gt;) I needed to create a tiff image file from plain text.&lt;br /&gt;&lt;br /&gt;Here is a short example on how you can do that through CLR from X++:&lt;pre class="code"&gt;static void createTiffFromText(Args _args)&lt;br /&gt;{&lt;br /&gt;    FileName                outputFileName = @'C:\Test\MyNewImage.tiff';&lt;br /&gt;    str                     sampleText = "My sample text...";&lt;br /&gt;    System.Drawing.Bitmap   bitmap;&lt;br /&gt;    System.Drawing.Graphics graphics;&lt;br /&gt;    ;&lt;br /&gt;    bitmap = new System.Drawing.Bitmap(220, 50);&lt;br /&gt;    graphics = System.Drawing.Graphics::FromImage(bitmap&lt;br /&gt;    graphics.FillRectangle(System.Drawing.Brushes::get_Yellow(), 0, 0, 220, 50);&lt;br /&gt;    graphics.DrawString(sampleText,&lt;br /&gt;                        new System.Drawing.Font("Verdana", 18),&lt;br /&gt;                        new System.Drawing.SolidBrush(System.Drawing.Color::get_Black()), 0 ,0);&lt;br /&gt;    bitmap.Save(outputFileName, System.Drawing.Imaging.ImageFormat::get_Tiff());&lt;br /&gt;   // Show the image&lt;br /&gt;   Winapi::shellExecute(outputFileName);&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/542394186887018212-8847876905534777472?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8847876905534777472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8847876905534777472&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8847876905534777472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8847876905534777472'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/03/creating-image-file-based-on-plain-text.html' title='Creating an image file based on plain text from AX'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4949108365274334145</id><published>2009-02-17T09:25:00.002+01:00</published><updated>2009-08-18T18:25:18.525+02:00</updated><title type='text'>Adding new financial dimensions to AX</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;If you want to add a new financial dimension to the system, this has become much easier with the release of AX 4.0 which includes a wizard to do so.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The wizard is started from the file menu, under Tools \ Development tools \ Wizards \ Financial Dimension Wizard. It's located under Development tools because it makes changes in the Application Object Tree (AOT) and you need developer access rights to execute it.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The wizard collects the necessary input and performs the needed changes to the AOT.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The enumerated value suggested by the wizard should not be less than what the wizard suggests, leaving a huge range of numbers for dimensions free to be utilized by Microsoft in future versions.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If your application is hooked up to a version control system, the wizard will check out the elements that need to be changed. It will however not check these in automatically.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There is a small bug in the wizard, making it skip a data type (the bug still exists in AX 2009). Here's is how to fix it (and similar bugs if you find any): &lt;a href="http://blogs.msdn.com/palle_agermark/archive/2007/01/11/missing-datatype-in-the-fincancial-dimension-wizard.aspx"&gt;Missing datatype in the Fincancial Dimension Wizard&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;I encourage you to read this blog article on how to design your application for more than the three standard dimensions: &lt;a href="http://blogs.msdn.com/palle_agermark/archive/2006/03/30/Additioanl-Financial-Dimensions.aspx"&gt;Write applications that gracefully accepts new financial dimensions&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;There's is a limit of 10 on the total number of dimensions. This is due to the AccountPeriodIdx on LedgerBalanceDimTrans. You will hit the maximum number of fields that must be in a primary index on Microsoft SQL Server of you add more dimensions. You could discuss the value if having the index if you have that many dimensions and you could consider changing the index to a subset of the dimensions if you only need to do your reporting on some of them. If you change the index, you are not bound of the 10 dimensions limit.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4949108365274334145?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4949108365274334145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4949108365274334145&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4949108365274334145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4949108365274334145'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/02/adding-new-financial-dimensions-to-ax.html' title='Adding new financial dimensions to AX'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6839484948633029707</id><published>2009-02-11T16:15:00.002+01:00</published><updated>2009-02-11T16:16:15.821+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009'/><title type='text'>Possible upgrade bug in \Classes\ReleaseUpdateDB41_Administration\renumberEPParametersKey</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;This method doesn't check if you have and Enterprise Portal (EP) license and thus it doesn't verify that the EP tables exists in your database.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In case you don't have EP it will fail, saying it doesn't know the EPPARAMETERS table. You can ignore this job, even outcomment it, if you don't have EP enabled.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6839484948633029707?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6839484948633029707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6839484948633029707&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6839484948633029707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6839484948633029707'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/02/possible-upgrade-bug-in.html' title='Possible upgrade bug in \Classes\ReleaseUpdateDB41_Administration\renumberEPParametersKey'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-8810531704222498729</id><published>2009-02-11T08:49:00.002+01:00</published><updated>2009-02-11T08:50:36.444+01:00</updated><title type='text'>Dealing with changed table or field id's</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;If you apply an application code layer to an application where table or field id's have been changed from what they used to be, you will lose data during the database synchronization process.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;To mitigate this I often see that people export the data first and then re-import it after having deployed and synchronized the new layer.&lt;br /&gt;&lt;br /&gt;There is however a smarter, and faster, way to mitigate this issue. What you need to do is to change the id's from the old values to the new values in the SQLDictionary kernel table before the synchronization process starts.  &lt;/p&gt;&lt;p&gt;You can of course get into all sorts of trouble if you make incorrect changes to SQLDictionary, so use the helper methods on the ReleaseUpdate class to do your dirty work:  &lt;/p&gt;&lt;ul&gt;&lt;li&gt;changeFieldByAOTName &lt;/li&gt;&lt;li&gt;changeFieldByName &lt;/li&gt;&lt;li&gt;changeFieldId &lt;/li&gt;&lt;li&gt;changeNameByFieldId &lt;/li&gt;&lt;li&gt;changeTableByAOTName &lt;/li&gt;&lt;li&gt;changeTableByName &lt;/li&gt;&lt;li&gt;changeTableId &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Look for further information in the upgrade white papers:&lt;br /&gt;&lt;a href="https://mbs.microsoft.com/partnersource/deployment/documentation/whitepapers/ax2009_howtowriteupgradescripts.htm"&gt;How to Write Data Upgrade Scripts White Paper for Microsoft Dynamics AX 2009 &lt;/a&gt;&lt;br /&gt;&lt;a href="https://mbs.microsoft.com/partnersource/documentation/whitepapers/msdyax40_writing_upgrade_scripts_whitepaper.htm?printpage=false"&gt;Writing Upgrade Scripts White Paper for Microsoft Dynamics AX 4.0&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-8810531704222498729?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/8810531704222498729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=8810531704222498729&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8810531704222498729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/8810531704222498729'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/02/dealing-with-changed-table-or-field-id.html' title='Dealing with changed table or field id&amp;#39;s'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7663754697038577082</id><published>2009-02-11T08:31:00.001+01:00</published><updated>2009-02-11T08:31:00.204+01:00</updated><title type='text'>New White Paper: Programmability in Microsoft Dynamics AX 2009</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;This white paper is for Technical Decision Makers and provides an overview of the wide range of possibilities offered by the programmability in Microsoft Dynamics AX 2009, but it contains some interesting statement on the direction of the development tools. Find the white paper on &lt;a href='https://mbs.microsoft.com/partnersource/marketing/marketingcollateral/whitepapers/MDAX2009ProgrammabilityWhitepaper.htm'&gt;PartnerSource&lt;/a&gt; or &lt;a href='https://mbs.microsoft.com/customersource/documentation/whitepapers/MDAX2009ProgrammabilityWhitepaper.htm'&gt;CustomerSource&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7663754697038577082?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7663754697038577082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7663754697038577082&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7663754697038577082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7663754697038577082'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/02/new-white-paper-programmability-in.html' title='New White Paper: Programmability in Microsoft Dynamics AX 2009'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7104808683343892098</id><published>2009-02-10T10:01:00.001+01:00</published><updated>2009-02-10T10:01:53.219+01:00</updated><title type='text'>The book "Dynamics AX: A Guide to Microsoft Axapta" is available on Google Books</title><content type='html'>This book is written for AX 3.0, but still has some usefull information.&lt;br /&gt;&lt;br /&gt;The book can be read and searched from here:&lt;br /&gt;&lt;a href="http://books.google.com/books?id=61cA-UZGC4EC"&gt;http://books.google.com/books?id=61cA-UZGC4EC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7104808683343892098?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://books.google.com/books?id=61cA-UZGC4EC' title='The book &quot;Dynamics AX: A Guide to Microsoft Axapta&quot; is available on Google Books'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7104808683343892098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7104808683343892098&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7104808683343892098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7104808683343892098'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/02/book-dynamics-ax-guide-to-microsoft.html' title='The book &quot;Dynamics AX: A Guide to Microsoft Axapta&quot; is available on Google Books'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4756299359023050956</id><published>2009-01-30T08:25:00.000+01:00</published><updated>2009-01-30T08:26:52.733+01:00</updated><title type='text'>Channel 9 video: Dynamics AX Version Control interview from Convergence in Copenhagen 2008</title><content type='html'>20 minutes interview about version control in AX 2009 with Michael Fruergaard Pontoppidan (Principal SDE) and Morten Jensen (Program Manager) from the Dynamics AX team in Vedbaek, Denmark.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://channel9.msdn.com/posts/benriga/Dynamics-AX-Version-Control/"&gt;http://channel9.msdn.com/posts/benriga/Dynamics-AX-Version-Control/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4756299359023050956?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://channel9.msdn.com/posts/benriga/Dynamics-AX-Version-Control/' title='Channel 9 video: Dynamics AX Version Control interview from Convergence in Copenhagen 2008'/><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4756299359023050956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4756299359023050956&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4756299359023050956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4756299359023050956'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/01/channel-9-video-dynamics-ax-version.html' title='Channel 9 video: Dynamics AX Version Control interview from Convergence in Copenhagen 2008'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7209135849778062980</id><published>2009-01-22T08:01:00.006+01:00</published><updated>2009-05-04T21:24:03.396+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Adding simple display fields on VS reports</title><content type='html'>One thing I feel is missing from the documentation for AX Visual Studio reports is a simple explanation or demo of how to create an old school display field in a report.&lt;br /&gt;&lt;br /&gt;I could figure out that a DataMethod was needed but it took me some time to figure out how connect the method with a field on the report and how to pass parameters to the DataMethod.&lt;br /&gt;&lt;br /&gt;You add a datamethod like this:&lt;br /&gt;&lt;pre class="code"&gt;...&lt;br /&gt;[DataMethod(), AxSessionPermission(SecurityAction.Assert]&lt;br /&gt;public static string DataMethod1(string itemId)&lt;br /&gt;{&lt;br /&gt;    string demoString = '(' + itemId + ')';&lt;br /&gt;&lt;br /&gt;    return demoString;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then add a field to your design, and in the Expression editor for the field add the code to call your datamethod:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;=DataMethod1(Fields!ItemId.Value)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7209135849778062980?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7209135849778062980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7209135849778062980&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7209135849778062980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7209135849778062980'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/01/adding-simple-display-fields-on-vs.html' title='Adding simple display fields on VS reports'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-690691179209244629</id><published>2009-01-06T15:47:00.001+01:00</published><updated>2009-01-06T15:47:59.974+01:00</updated><title type='text'>Shortcut to the query object of a form data source</title><content type='html'>Did you now that to get the query object of a datasource, you can write dataSource_q instead of dataSource_ds.query()&lt;br /&gt; &lt;br /&gt;For example in the CustTable form you can write:&lt;br /&gt;query = custTable_q;&lt;br /&gt; &lt;br /&gt;Instead of:&lt;br /&gt;query = custTable_ds.query();&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-690691179209244629?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/690691179209244629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=690691179209244629&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/690691179209244629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/690691179209244629'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/01/shortcut-to-query-object-of-form-data.html' title='Shortcut to the query object of a form data source'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-173726727073212288</id><published>2009-01-05T07:59:00.002+01:00</published><updated>2009-01-05T08:11:39.112+01:00</updated><title type='text'>Bug in EP 2009 when having the debug flag set to true</title><content type='html'>When you use lookups that are built as user controls, you can get an error like the following error when you cancel the lookup:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;A Runtime Error has occured&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Line: 198&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Error: Sys.ArgumentNull&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Exception: Value cannot be null.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Parameter name: panelsDeleting[10]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here are repro steps to see the bug in Shop Floor Control, which currently seems to be the only place having lookups built as user controls:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open EP for an employee setup for SFC&lt;/li&gt;&lt;li&gt;Go to Shop Floor Control (This puts you in the Electronic timecard)&lt;/li&gt;&lt;li&gt;Click the "Lock" button&lt;/li&gt;&lt;li&gt;Click "Add lines"&lt;/li&gt;&lt;li&gt;Open the lookup for Reference&lt;/li&gt;&lt;li&gt;Close the lookup without selecting anything, by clicking the webpage somewhere not in the lookup&lt;/li&gt;&lt;li&gt;Try to use any other lookup or move to another record in the grid, if you have more than one line in the grid&lt;/li&gt;&lt;/ol&gt;The bug is related to a bug in AJAX when it runs in debug mode. If you have debug="true" in the web.config  file, change it to debug="false".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-173726727073212288?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/173726727073212288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=173726727073212288&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/173726727073212288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/173726727073212288'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2009/01/bug-in-ep-2009-when-having-debug-flag.html' title='Bug in EP 2009 when having the debug flag set to true'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-2892927664510383827</id><published>2008-11-27T11:10:00.006+01:00</published><updated>2009-05-04T21:27:02.441+02:00</updated><title type='text'>Set focus on a particular field on an EP page</title><content type='html'>With the AX 2009 Enterprise Portal you now have an easy way to set focus on a particular field on a page.&lt;br /&gt;&lt;br /&gt;These are the steps you need to go through:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The field must be created as or converted to a TemplateField. The "Dynamics AX Bound Field Designer" helps you to that. Add the field to the "Selected Field" list, make it active and click "Convert to Template field"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Switch to the Source view of the page.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It seems like you have to add the label of the fields yourself. This is done by adding the following section to the XML of the TemplateField: HeaderText="&lt;%$ AxLabel:@SYSxxxxx %&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Finally add code to set the focus:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;TextBox TextBox = (TextBox)this.AxGroup1.FindControl("TextBox1");&lt;br /&gt;if (TextBox != null)&lt;br /&gt;{&lt;br /&gt;    TextBox.Focus();&lt;br /&gt;}&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-2892927664510383827?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/2892927664510383827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=2892927664510383827&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2892927664510383827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2892927664510383827'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/11/set-focus-on-particular-field-on-ep.html' title='Set focus on a particular field on an EP page'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-3252198038663100570</id><published>2008-11-05T08:47:00.002+01:00</published><updated>2008-11-05T08:48:32.436+01:00</updated><title type='text'>EP 2009: Edit a record outside a grid</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Here is what you can do if you want to edit a record that is not part of a grid.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;The record needs to be shown through an &lt;a href="http://msdn.microsoft.com/en-us/library/cc551671.aspx"&gt;AxForm&lt;/a&gt; control and on this control you can set the "AutoGenerateEditButton" to True to get an Edit/Update and Cancel button automatically added to the form.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Next you may need to add event handlers to these buttons if you want the system to do something special in case these are clicked.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;This is how the event handler for update could look, if you want to run an additional action on the &lt;a href="http://msdn.microsoft.com/en-us/library/cc615188.aspx"&gt;DataSet&lt;/a&gt;:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; AxForm_MyForm_ItemUpdated(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;DetailsViewUpdatedEventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (e.Exception == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// Run the approval code&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.MyDataSet.GetDataSet().DataSetRun.AxaptaObjectAdapter.Call(&lt;span style="color:#a31515;"&gt;"MYMethodOnTheDataSet"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// Redirect to the list of invoices&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;AxUrlMenuItem&lt;/span&gt; listpage = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;AxUrlMenuItem&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"MyMenuItem"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;Response.Redirect(listpage.Url.OriginalString);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;And here is how the code for the Cancel button could look:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; AxForm_MyForm_ItemCommand(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;DetailsViewCommandEventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (e.CommandName == &lt;span style="color:#a31515;"&gt;"Cancel"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.RedirectToPreviousPage();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;The RedirectToPreviousPage method is a method you have to add yourself. It could look like this:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; RedirectToPreviousPage()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// Return to the previous page displayed.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (!&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;.IsNullOrEmpty(&lt;span style="color:#2b91af;"&gt;AxWebSession&lt;/span&gt;.GetPreviousURL(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Page)))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;Response.Redirect(&lt;span style="color:#2b91af;"&gt;AxWebSession&lt;/span&gt;.GetPreviousURL(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Page));&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// The previous page is not available, so return to a known page.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// Use the URL Web Menu item from the AOT to specify which&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;// page will be displayed.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;AxUrlMenuItem&lt;/span&gt; listpage = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;AxUrlMenuItem&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;"MyMainPage"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;Response.Redirect(listpage.Url.OriginalString);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;And finally you must add you new event handler to the event handlers for the two buttons. This is done in the Page_Init method:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;protected&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; Page_Init(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.AxForm_MyForm.ItemUpdated += &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;DetailsViewUpdatedEventHandler&lt;/span&gt;(AxForm_MyForm_ItemUpdated);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.AxForm_MyForm.ItemCommand += &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;DetailsViewCommandEventHandler&lt;/span&gt;(AxForm_MyForm_ItemCommand);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-3252198038663100570?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/3252198038663100570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=3252198038663100570&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3252198038663100570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/3252198038663100570'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/11/ep-2009-edit-record-outside-grid.html' title='EP 2009: Edit a record outside a grid'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-2861383559018147753</id><published>2008-10-31T07:52:00.006+01:00</published><updated>2009-05-04T21:27:30.679+02:00</updated><title type='text'>Setting up E-mail parameters on the AX 2009 VPC July 2008 image</title><content type='html'>In order to send e-mail within this image, you need to setup SMTP parameters in AX:&lt;br /&gt;&lt;br /&gt;Go to Administration / Setup / E-mail parameters:&lt;br /&gt;&lt;br /&gt;Default in the form you'll find the follwing settings:&lt;br /&gt;SMTP port number: 25&lt;br /&gt;Attachment size limit (MB): 10&lt;br /&gt;&lt;br /&gt;Enter the following new values:&lt;br /&gt;Outgoing mail server: contoso.com&lt;br /&gt;Local computer name: dynamicsvm&lt;br /&gt;&lt;br /&gt;And here is a small job to see if mail can be sent:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;static void testMail(Args args)&lt;br /&gt;{&lt;br /&gt;    SysMailer   sysMailer = new SysMailer();&lt;br /&gt;   &lt;br /&gt;    ;&lt;br /&gt;    sysMailer.quickSend("administrator@contoso.com", "administrator@contoso.com", "Suject", "Body");&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Please note that the test mail might end up in your Outlook junk-mail folder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-2861383559018147753?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/2861383559018147753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=2861383559018147753&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2861383559018147753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/2861383559018147753'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/10/setting-up-e-mail-parameters-on-ax-2009.html' title='Setting up E-mail parameters on the AX 2009 VPC July 2008 image'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-4186210599302959736</id><published>2008-10-23T12:49:00.006+02:00</published><updated>2009-05-04T20:38:24.367+02:00</updated><title type='text'>Finding unused labels</title><content type='html'>Here is a small job for finding labels, from a particular label file, that are not used in the application. You need an updated cross reference to use the job.&lt;br /&gt;&lt;pre class="code"&gt;static void findUnXedLabels(SysOperationProgress _progress = null)&lt;br /&gt;{&lt;br /&gt;    Label           label       = new Label('da');  // The language to use for finding the labels&lt;br /&gt;    str 250         labelId     = label.searchFirst('');&lt;br /&gt;    Map             mapLabels   = new Map(types::String, types::String);&lt;br /&gt;    MapEnumerator   mapEnumerator;&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    setPrefix("Finding UnX'ed labels");&lt;br /&gt;&lt;br /&gt;    while (labelId)&lt;br /&gt;    {&lt;br /&gt;        if (label.moduleId(labelId) == "XYZ") // The particular label file&lt;br /&gt;        {&lt;br /&gt;            if ((select xRefNames&lt;br /&gt;                     index hint Name&lt;br /&gt;                     where  xRefNames.Kind == xRefKind::Label &amp;amp;&amp;amp;&lt;br /&gt;                            xRefNames.Name == labelId &amp;amp;&amp;amp;&lt;br /&gt;                            xRefNames.TypeName == '').RecId == 0)&lt;br /&gt;            {&lt;br /&gt;                mapLabels.insert(labelId, label.extractString(labelId));&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        labelId = label.searchNext();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // The maps is used to sort the lables&lt;br /&gt;    mapEnumerator = mapLabels.getEnumerator();&lt;br /&gt;&lt;br /&gt;    while (mapEnumerator.moveNext())&lt;br /&gt;    {&lt;br /&gt;        info (strFmt("%1 %2", mapEnumerator.currentKey(), mapEnumerator.currentValue()));&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;In standard AX you can run this check for all labelfiles and save the result to a file, by using the \Classes\SysApplCheck\findUnXedLabels method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-4186210599302959736?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/4186210599302959736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=4186210599302959736&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4186210599302959736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/4186210599302959736'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/10/finding-unused-labels.html' title='Finding unused labels'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-5175607239900994703</id><published>2008-10-20T08:37:00.001+02:00</published><updated>2008-10-20T08:37:46.147+02:00</updated><title type='text'>Saving the reference to a unique record as a string</title><content type='html'>Sometimes you have have to store a unique reference to record as a string, for example if you want to include this reference in an XML file.&lt;br /&gt;&lt;br /&gt;Merely converting the RecId to a string is not always a good idea. The best choice for identifying the record may be another unique key of the table, especially if the table doesn't have a RecId index.&lt;br /&gt;&lt;br /&gt;On the Global class there is a method to analyze the unique keys of a table and give you the unique key as a string. This is the record2Dynakey method.&lt;br /&gt;&lt;br /&gt;The key is encoded in the string like this: &lt;br /&gt;[fieldid:strvalue][fieldid2:strvalue][fieldid3:strvalue]&lt;br /&gt;&lt;br /&gt;Later when you want to convert the string, representing the key, to an actual record, just call the dynaKey2Record method.&lt;br /&gt;&lt;br /&gt;You should not use this technique for long term storage of keys, since renaming primary keys or changing the datamodel might break the ability to restore the string into the right record or restoring it in the most sufficient way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-5175607239900994703?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/5175607239900994703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=5175607239900994703&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5175607239900994703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/5175607239900994703'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/10/saving-reference-to-unique-record-as.html' title='Saving the reference to a unique record as a string'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-7260239929579830870</id><published>2008-10-10T11:34:00.000+02:00</published><updated>2008-10-10T11:35:47.947+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009'/><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><title type='text'>Manage Enterprise Portal deployments</title><content type='html'>In a multi server setup of EP 2009, you could be tempted to install the .NET Business Connector as the only AX part on the IIS.&lt;br /&gt;&lt;br /&gt;It turns out that you must also install a regular client, because the "Manage deployments" form only will run from the box where EP is deployed...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-7260239929579830870?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/7260239929579830870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=7260239929579830870&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7260239929579830870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/7260239929579830870'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/10/manage-enterprise-portal-deployments.html' title='Manage Enterprise Portal deployments'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-6595388920872342071</id><published>2008-09-28T09:48:00.006+02:00</published><updated>2008-10-20T08:40:22.185+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><title type='text'>Compacting your virtual harddisks</title><content type='html'>Here is a good article on how you go about compacting these endlessly growing virtual harddisks: &lt;a href="http://jopx.blogspot.com/2008/09/compacting-virtual-harddisks-vhds.html"&gt;http://jopx.blogspot.com/2008/09/compacting-virtual-harddisks-vhds.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-6595388920872342071?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/6595388920872342071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=6595388920872342071&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6595388920872342071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/6595388920872342071'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/09/compacting-your-virtual-hardsisk.html' title='Compacting your virtual harddisks'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1248089657294722820</id><published>2008-09-25T10:01:00.010+02:00</published><updated>2009-05-04T20:47:39.261+02:00</updated><title type='text'>ImageListAppl classes</title><content type='html'>The idea with the ImageListAppl classes is that you load and cache a list of images once in for example a form. For each record where you want to show an image, through a display method you just lookup the image in the cached list.&lt;br /&gt;&lt;br /&gt;However I often see code where the image list is loaded in the display method itself, putting some overhead on the display method.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:105%;"&gt;Steps to use an ImageListClass&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;First of all, create a form window control to hold the images. These would be appropriate properties if you place this control in a grid:&lt;br /&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Property&lt;/td&gt;&lt;td&gt;Value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AutoDeclaration&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AllowEdit&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Width&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Height&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Enabled&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Skip&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AlignControl&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ImageMode&lt;/td&gt;&lt;td&gt;Size to fit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ShowLabel&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DataSource&lt;/td&gt;&lt;td&gt;Your controlling datasource&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DataMethod&lt;/td&gt;&lt;td&gt;Your method to select the right image&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;In the ClassDeclaration of the form declare your ImageListAppl class:&lt;br /&gt;&lt;pre class="code"&gt;ImageListAppl_MyImageList imageListAppl;&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;In the init method of the form, initialize your ImageListAppl object:&lt;br /&gt;&lt;pre class="code"&gt;&lt;p&gt;&lt;br /&gt;imageListAppl = new ImageListAppl_MyImageList();&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;And still in the init method pass the list of images to your window control:&lt;br /&gt;&lt;pre class="code"&gt;&lt;p&gt;myWindowControl.imageList(imageListAppl.imageList());&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;Implement your display method driving which image to show:&lt;br /&gt;&lt;pre class="code"&gt;&lt;p&gt;//BP Deviation Documented&lt;br /&gt;display ImageRes myDisplayMethod(MyRecord _myRecord)&lt;br /&gt;{&lt;br /&gt;   ImageRes res = -1;&lt;br /&gt;   #resAppl;&lt;br /&gt;   if (_myRecord.someConditioin())&lt;br /&gt;   {&lt;br /&gt;       res = imageListAppl.image(#MyImage);&lt;br /&gt;   }&lt;br /&gt;   return res;&lt;br /&gt;}&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;That's it...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1248089657294722820?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1248089657294722820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1248089657294722820&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1248089657294722820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1248089657294722820'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/09/imagelistappl-classes.html' title='ImageListAppl classes'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-542394186887018212.post-1487235490381088890</id><published>2008-08-13T08:18:00.004+02:00</published><updated>2008-08-13T08:26:37.148+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharedView'/><title type='text'>SharedView troubleshooting</title><content type='html'>If you have the problem that people joining your &lt;a href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=94"&gt;SharedView &lt;/a&gt;sessions only see scramled images, setting the hardware acceleration of your graphics hardware til None might do the trick:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_7EkfWkX6NTw/SKJ9RSl8KJI/AAAAAAAAAwI/orCdTMydYE8/s1600-h/SharedView_HardwareAcceleration.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5233883452960155794" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_7EkfWkX6NTw/SKJ9RSl8KJI/AAAAAAAAAwI/orCdTMydYE8/s400/SharedView_HardwareAcceleration.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.poppastring.com/ProblemsWithSharedViewAndLiveMeeting.aspx"&gt;Poppastring.com&lt;/a&gt; for having published this solution.&lt;br /&gt;&lt;br /&gt;See the &lt;a href="http://forums.microsoft.com/sharedviewbeta/default.aspx?siteid=59"&gt;SharedView &lt;/a&gt;forum for more troubleshooting tips.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/542394186887018212-1487235490381088890?l=palleagermark.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://palleagermark.blogspot.com/feeds/1487235490381088890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=542394186887018212&amp;postID=1487235490381088890&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1487235490381088890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/542394186887018212/posts/default/1487235490381088890'/><link rel='alternate' type='text/html' href='http://palleagermark.blogspot.com/2008/08/sharedview-troubleshooting.html' title='SharedView troubleshooting'/><author><name>Palle Agermark</name><uri>http://www.blogger.com/profile/11105277401639576264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://4.bp.blogspot.com/--Xm3x1MUJsA/Te1EFUYL7rI/AAAAAAAABG0/yhG4u5gTP00/s220/Billede%2Btil%2BCV.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7EkfWkX6NTw/SKJ9RSl8KJI/AAAAAAAAAwI/orCdTMydYE8/s72-c/SharedView_HardwareAcceleration.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
