<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Art Of Creation - Dynamics AX Blog</title>
	<atom:link href="http://www.artofcreation.be/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.artofcreation.be</link>
	<description>The everyday life of a Dynamics AX developer</description>
	<lastBuildDate>Wed, 02 May 2012 18:33:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Decisions Spring 2012 &#8211; AX Day June 18</title>
		<link>http://www.artofcreation.be/2012/05/02/decisions-spring-2012-ax-day-june-18/</link>
		<comments>http://www.artofcreation.be/2012/05/02/decisions-spring-2012-ax-day-june-18/#comments</comments>
		<pubDate>Wed, 02 May 2012 18:33:26 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Decisions]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1560</guid>
		<description><![CDATA[Hi AX-enthusiasts! Decisions Spring 2012 is a (free online) virtual conference about Dynamics products. If you didn&#8217;t attend the conference in the past, be sure to check it out now because it is a great opportunity meet other AX professionals and expand your knowledge about AX. The AX Day is on the 18th of June, [...]]]></description>
			<content:encoded><![CDATA[<p>Hi AX-enthusiasts!</p>
<p>Decisions Spring 2012 is a (free online) virtual conference about Dynamics products.<br />
If you didn&#8217;t attend the conference in the past, be sure to check it out now because it is a great opportunity meet other AX professionals and expand your knowledge about AX.</p>
<p><img alt="Decisions Spring 2012" src="/wp-content/uploads/decisionsspring2012.png" title="Decisions Spring 2012" class="aligncenter" width="463" height="137" /></p>
<p>The AX Day is on the 18th of June, you can <a href="http://decisions.msdynamicsworld.com/product/microsoft-dynamics-ax-day">register here</a>.</p>
<p>See you there. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2012/05/02/decisions-spring-2012-ax-day-june-18/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back online after site maintenance</title>
		<link>http://www.artofcreation.be/2012/05/02/back-online-after-site-maintenance/</link>
		<comments>http://www.artofcreation.be/2012/05/02/back-online-after-site-maintenance/#comments</comments>
		<pubDate>Wed, 02 May 2012 08:21:48 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Site news]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1556</guid>
		<description><![CDATA[Hi all! You might have noticed that this site was offline for a few hours, that&#8217;s because it has been moved to an upgraded server. Everything is up and running again, I hope this didn&#8217;t cause any inconveniences for you. Thanks to SiteHosting for helping out.]]></description>
			<content:encoded><![CDATA[<p>Hi all!</p>
<p>You might have noticed that this site was offline for a few hours,<br />
that&#8217;s because it has been moved to an upgraded server. </p>
<p>Everything is up and running again, I hope this didn&#8217;t cause any inconveniences for you.<br />
Thanks to <a href="http://www.sitehosting.be/nl/">SiteHosting</a> for helping out. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2012/05/02/back-online-after-site-maintenance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding runtime tasks to a business operation framework service</title>
		<link>http://www.artofcreation.be/2012/02/27/adding-runtime-tasks-to-a-business-operation-framework-service/</link>
		<comments>http://www.artofcreation.be/2012/02/27/adding-runtime-tasks-to-a-business-operation-framework-service/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 12:34:12 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Batch]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[SysOperation]]></category>
		<category><![CDATA[Technical conference]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1486</guid>
		<description><![CDATA[Hi all! When I was at the technical conference in Nice last year, I attended the session about performance (BRK224), and during a demo, something interesting was shown: how to add one BOF service as a runtime task to another BOF service in batch. You can watch the session recording here, the code is shown [...]]]></description>
			<content:encoded><![CDATA[<p>Hi all!</p>
<p>When I was at the technical conference in Nice last year, I attended the session about performance (BRK224), and during a demo, something interesting was shown: how to add one BOF service as a runtime task to another BOF service in batch.<br />
You can watch the session recording <a href="http://www.artofcreation.be/2012/01/17/ax-technical-conference-2011-session-recordings-now-available/">here</a>, the code is shown about 44 minutes, 50 seconds in. </p>
<h3>Background: Runtime tasks in Dynamics AX 2009</h3>
<p>If you are unfamiliar with runtime tasks and how to use them, read my post about <a href="http://www.artofcreation.be/2010/10/03/batch-multithreading/">batch multithreading</a> for an explanation. The basic principle stays the same, but in the example below, we will be using the Business Operation Framework (aka BOF, aka SysOperation) instead of RunBaseBatch. </p>
<h3>Runtime tasks in Dynamics AX 2012 using BOF</h3>
<p>The first thing you&#8217;ll need to do, is create 2 BOF services, one that will create the runtime tasks, and one that will represent the runtime task. If you don&#8217;t know how to do that, read this post: <a href="http://www.artofcreation.be/2011/08/21/ax2012-sysoperation-introduction/">SysOperation Introduction</a>. You can download the xpo file for the following example below. </p>
<h4>KlForSubTaskService: the runtime task</h4>
<p>This service will be our runtime task. It&#8217;s a regular BOF service, nothing special about it. In my example, the service operation contains some testing code so we can see if our service is working:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">class</span> KlForSubTaskService<br />
<span style="color: #000000;">&#123;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #000000;">&#91;</span>SysEntryPointAttribute<span style="color: #000000;">&#93;</span><br />
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> runSubTask<span style="color: #000000;">&#40;</span>KlForSubTaskDataContract _klForSubTaskDataContract<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; info<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">strFmt</span><span style="color: #000000;">&#40;</span><span style="color: #ff0000;">&quot;%1&quot;</span><span style="color: #00007f;">,</span> _klForSubTaskDataContract.<span style="color: #000000;">parmTheInt</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>The data contract for this service has one member:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&#91;</span>DataContractAttribute<span style="color: #000000;">&#93;</span><br />
<span style="color: #0000ff;">class</span> KlForSubTaskDataContract<br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; Integer theInt;<br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #000000;">&#91;</span>DataMemberAttribute<span style="color: #000000;">&#93;</span><br />
<span style="color: #0000ff;">public</span> Integer parmTheInt<span style="color: #000000;">&#40;</span>Integer _theInt <span style="color: #00007f;">=</span> theInt<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; theInt <span style="color: #00007f;">=</span> _theInt;<br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> theInt;<br />
<span style="color: #000000;">&#125;</span></div></div>
<h4>KlForBatchJobService: Batch header service</h4>
<p>This is the service that will create the runtime tasks. Starting for a regular BOF service, make sure that the service class extends <strong>SysOperationServiceBase</strong>. This enables us to call the isExecutingInBatch() method later on.</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">class</span> KlForBatchJobService <span style="color: #0000ff;">extends</span> SysOperationServiceBase<br />
<span style="color: #000000;">&#123;</span><br />
<span style="color: #000000;">&#125;</span></div></div>
<p>The service operation that creates the runtime tasks looks like this:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&#91;</span>SysEntryPointAttribute<span style="color: #000000;">&#93;</span><br />
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> createTasks<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; BatchHeader &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;batchHeader;<br />
&nbsp; &nbsp; SysOperationServiceController &nbsp;controller;<br />
&nbsp; &nbsp; KlForSubTaskDataContract &nbsp; &nbsp; &nbsp; dataContract;<br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i;<br />
&nbsp; &nbsp; ;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// for demo purposes, loop 10 times to add 10 runtime tasks</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span><span style="color: #000000;">&#40;</span>i<span style="color: #00007f;">=</span><span style="color: #000000;">1</span>;i<span style="color: #00007f;">&lt;=</span><span style="color: #000000;">5</span>;i<span style="color: #00007f;">++</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>this.<span style="color: #000000;">isExecutingInBatch</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #00007f;">&amp;&amp;</span> <span style="color: #00007f;">!</span>batchHeader<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// if no batchheader has been set yet, get it</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; batchHeader <span style="color: #00007f;">=</span> this.<span style="color: #000000;">getCurrentBatchHeader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// create new controller for the runtime task</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; controller <span style="color: #00007f;">=</span> <span style="color: #0000ff;">new</span> SysOperationServiceController<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">classStr</span><span style="color: #000000;">&#40;</span>KlForSubTaskService<span style="color: #000000;">&#41;</span><span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodStr</span><span style="color: #000000;">&#40;</span>KlForSubTaskService<span style="color: #00007f;">,</span> runSubTask<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// get the data contract</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dataContract <span style="color: #00007f;">=</span> controller.<span style="color: #000000;">getDataContractObject</span><span style="color: #000000;">&#40;</span><span style="color: #ff0000;">'_klForSubTaskDataContract'</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// initialize variables for the data contract</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dataContract.<span style="color: #000000;">parmTheInt</span><span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>this.<span style="color: #000000;">isExecutingInBatch</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// code is running in batch, so add a runtime task</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; batchHeader.<span style="color: #000000;">addRuntimeTask</span><span style="color: #000000;">&#40;</span>controller<span style="color: #00007f;">,</span> this.<span style="color: #000000;">getCurrentBatchTask</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">RecId</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// not in batch</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// by default, the tasks will execute in reliable asynchronous mode,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// but you could override it so it executes synchronous</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">//controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// not in batch, just run it</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controller.<span style="color: #000000;">run</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>batchHeader<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// save the batchheader if it has been created</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; batchHeader.<span style="color: #000000;">save</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>For this demo, I created a loop that creates 5 runtime tasks.<br />
When you execute this in batch, you can check the batch task history for the batch to see the tasks that have been created.<br />
<a href="http://www.artofcreation.be/wp-content/uploads/BOFruntimetasks.png"><img src="http://www.artofcreation.be/wp-content/uploads/BOFruntimetasks.png" alt="" title="BOFruntimetasks" width="554" height="380" class="aligncenter size-full wp-image-1495" /></a><br />
You can click the <em>Parameters</em> button to verify if the correct values were used to execute the task. </p>
<p>You can <a href="http://www.artofcreation.be/wp-content/uploads/SysOperationRuntimeTasks.xpo">download the XPO here</a>.</p>
<p><strong>Links</strong><br />
Another example can be found on Kenny Saelen&#8217;s blog: <a href="http://www.ksaelen.be/wordpresses/dynamicsaxblog/2012/02/business-operation-framework-and-multi-threading/">Business Operation Framework and multi-threading</a></p>
<p><strong>Related posts</strong><br />
<a href="http://www.artofcreation.be/2011/08/22/ax2012-sysoperation-part-1-data-contracts-and-service-operations/">AX2012: SysOperation part 1: Data Contracts and Service Operations</a><br />
<a href="http://www.artofcreation.be/2011/08/23/ax2012-sysoperation-part-2-sysoperationservicecontroller/">AX2012: SysOperation part 2: SysOperationServiceController</a><br />
<a href="http://www.artofcreation.be/2011/08/24/ax2012-sysoperation-part-3-sysoperationautomaticuibuilder/">AX2012: SysOperation part 3: SysOperationAutomaticUIBuilder</a><br />
<a href="http://www.artofcreation.be/2010/10/03/batch-multithreading/">AX2009: Batch multithreading (RunBaseBatch)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2012/02/27/adding-runtime-tasks-to-a-business-operation-framework-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Dynamics Salary Survey 2012</title>
		<link>http://www.artofcreation.be/2012/01/17/microsoft-dynamics-salary-survey-2012/</link>
		<comments>http://www.artofcreation.be/2012/01/17/microsoft-dynamics-salary-survey-2012/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 19:20:37 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[Nigel Frank]]></category>
		<category><![CDATA[Salary survey]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1471</guid>
		<description><![CDATA[Hi all! Wondering if you&#8217;re getting the right salary? Nigel Frank is organizing its yearly salary survey for Dynamics professionals. You&#8217;ll get a copy of the results for free if you take part in the survey, and you can also win some prizes. Just click the banner to take part in the survey.]]></description>
			<content:encoded><![CDATA[<p>Hi all!</p>
<p>Wondering if you&#8217;re getting the right salary?<br />
<a href="http://www.nigelfrank.com/">Nigel Frank</a> is organizing its yearly salary survey for Dynamics professionals. </p>
<p>You&#8217;ll get a copy of the results for free if you take part in the survey, and you can also win some prizes.<br />
<a href="http://survey.nigelfrank.com/en/microsoft-dynamics-salary-survey-2012.html"><br />
<img src="http://www.artofcreation.be/wp-content/uploads/Header_EN.jpg" alt="Nigal Frank Salary Survey" title="Nigal Frank Salary Survey" width="580" height="175" class="aligncenter size-full wp-image-1475" /></a></p>
<p>Just click the banner to take part in the survey.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2012/01/17/microsoft-dynamics-salary-survey-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AX Technical Conference 2011: Session Recordings (Now available)</title>
		<link>http://www.artofcreation.be/2012/01/17/ax-technical-conference-2011-session-recordings-now-available/</link>
		<comments>http://www.artofcreation.be/2012/01/17/ax-technical-conference-2011-session-recordings-now-available/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 09:31:20 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Technical conference]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1467</guid>
		<description><![CDATA[The session recordings and slides from the Technical Conference in Nice 2011 are available here: https://mbs.microsoft.com/partnersource/newsevents/news/MSDAXTechnicalConf2011Recordings]]></description>
			<content:encoded><![CDATA[<p>The session recordings and slides from the Technical Conference in Nice 2011 are available here:<br />
<a href="https://mbs.microsoft.com/partnersource/newsevents/news/MSDAXTechnicalConf2011Recordings ">https://mbs.microsoft.com/partnersource/newsevents/news/MSDAXTechnicalConf2011Recordings</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2012/01/17/ax-technical-conference-2011-session-recordings-now-available/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AX Technical Conference 2011: Session Recordings</title>
		<link>http://www.artofcreation.be/2011/12/20/ax-technical-conference-2011-session-recordings/</link>
		<comments>http://www.artofcreation.be/2011/12/20/ax-technical-conference-2011-session-recordings/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 13:05:42 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[PartnerSource]]></category>
		<category><![CDATA[Technical conference]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1460</guid>
		<description><![CDATA[Some of you asked if the session recordings from the Technical Conference in Nice were available online, and I&#8217;m glad to inform you that they will be available on PartnerSource starting January 4th, 2012. Just click this link in early January to view the recordings: https://mbs.microsoft.com/partnersource/training/news/MSDYAX_TechConferenceFall.htm https://mbs.microsoft.com/partnersource/newsevents/news/MSDAXTechnicalConf2011Recordings. Some of the sessions were really interesting, so [...]]]></description>
			<content:encoded><![CDATA[<p>Some of you asked if the session recordings from the Technical Conference in Nice were available online, and I&#8217;m glad to inform you that they will be available on PartnerSource starting January 4th, 2012. </p>
<p>Just click this link in early January to view the recordings: <a href="https://mbs.microsoft.com/partnersource/training/news/MSDYAX_TechConferenceFall.htm"><del datetime="2012-01-17T09:30:38+00:00">https://mbs.microsoft.com/partnersource/training/news/MSDYAX_TechConferenceFall.htm</del></a> <a href="https://mbs.microsoft.com/partnersource/newsevents/news/MSDAXTechnicalConf2011Recordings">https://mbs.microsoft.com/partnersource/newsevents/news/MSDAXTechnicalConf2011Recordings</a>.</p>
<p>Some of the sessions were really interesting, so be sure to check it out!</p>
<p>Update 2012/01/09: The recordings are not online yet. Will keep you updated.<br />
Update 2012/01/17: Available now!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2011/12/20/ax-technical-conference-2011-session-recordings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AX Technical Conference 2011 Day 1: Information Source</title>
		<link>http://www.artofcreation.be/2011/11/14/ax-technical-conference-2011-day-1-information-source/</link>
		<comments>http://www.artofcreation.be/2011/11/14/ax-technical-conference-2011-day-1-information-source/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 21:16:58 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Technical conference]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1439</guid>
		<description><![CDATA[Hi everyone, and greetings from the Microsoft Dynamics AX Technical Conference 2011 in Nice. Among other sessions, I saw Arijit Basu&#8217;s session about Implementing AX Technical Solution Architecture, and found it pretty inspiring. He demonstrated a lot of tools and methods that will come in very handy and I&#8217;m sure I&#8217;ll talk about more on [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone, and greetings from the Microsoft Dynamics AX Technical Conference 2011 in Nice. </p>
<p>Among other sessions, I saw Arijit Basu&#8217;s session about Implementing AX Technical Solution Architecture, and found it pretty inspiring. He demonstrated a lot of tools and methods that will come in very handy and I&#8217;m sure I&#8217;ll talk about more on this blog in the future. Tools like the Application Analysis Tool in particular look very promising. </p>
<p>Some of these tools are available through the website that Sri Srinivasan announced: <a href="http://informationsource.dynamics.com">InformationSource (beta)</a>.<br />
You can download these in the &#8220;Services&#8221; section. There is also an extensive library of Q&#038;A&#8217;s, and a lot of documentation (Word and Powerpoint documents, video&#8217;s,&#8230;) that dive deep into what they call Core Concepts of AX. </p>
<p>You will need to log in with your PartnerSource or CustomerSource account.<br />
Be sure to check it out, <strong>it&#8217;s awesome</strong> (really!). </p>
<p>Also, for those who haven&#8217;t seen this yet, a nice screenshot of the POS (Point of Sales) of AX For Retail:<br />
<img src="http://www.artofcreation.be/wp-content/uploads/rsz_imag0034.jpg" alt="AX For Retail POS" title="AX POS" class="aligncenter size-full wp-image-1447" /><br />
It almost makes me feel sad that my company isn&#8217;t focusing on the retail sector :). </p>
<p>I&#8217;m looking forward to tomorrow, especially to <a href="http://blogs.msdn.com/b/mfp/">mfp</a>&#8216;s talk about MorphX and TFS.<br />
See you then (or there)!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2011/11/14/ax-technical-conference-2011-day-1-information-source/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Data migration: Importing the InventItemGroupForm Table</title>
		<link>http://www.artofcreation.be/2011/11/08/data-migration-importing-the-inventitemgroupform-table/</link>
		<comments>http://www.artofcreation.be/2011/11/08/data-migration-importing-the-inventitemgroupform-table/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 10:23:53 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Data conversion]]></category>
		<category><![CDATA[Data migration]]></category>
		<category><![CDATA[Job]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1421</guid>
		<description><![CDATA[Hi everyone :-). I am tasked with doing data migration for a project that is about to go live. One of the things that have to be converted are item groups (InventItemGroup) and their linked dimensions (InventItemGroupForm). Importing the InventItemGroup table is easy, but InventItemGroupForm is a little bit trickier. There is a job below [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone :-). </p>
<p>I am tasked with doing data migration for a project that is about to go live. One of the things that have to be converted are item groups (InventItemGroup) and their linked dimensions (InventItemGroupForm). </p>
<p>Importing the InventItemGroup table is easy, but InventItemGroupForm is a little bit trickier.<br />
There is a job below that shows how to fill in the LedgerDimension field on the InventItemGroupForm table. I&#8217;m not saying I completely understand the new dimension framework, but this method worked for me, and I hope it helps you when you have to do the same thing. </p>
<p>You will notice that you won&#8217;t be able to import the InventItemGroupForm table with the excel add-on. You&#8217;ll have to use a custom job (or make you own import framework like I did). </p>
<p>This white paper can help too: <a href="http://technet.microsoft.com/en-us/library/hh272858.aspx">Implementing the Account and Financial Dimensions Framework (White paper)</a></p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> klforDimensionTest<span style="color: #000000;">&#40;</span>Args _args<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #007f00; font-style: italic;">/* input */</span><br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// the InventItemGroup record we want to set accounts for</span><br />
&nbsp; &nbsp; InventItemGroup &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inventItemGroup <span style="color: #00007f;">=</span> InventItemGroup<span style="color: #00007f;">::</span><span style="color: #000000;">find</span><span style="color: #000000;">&#40;</span><span style="color: #ff0000;">&quot;Car Audio&quot;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #007f00;">// the main account we want to link to our InventItemGroup</span><br />
&nbsp; &nbsp; MainAccountNum &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mainAccountNum <span style="color: #00007f;">=</span> <span style="color: #ff0000;">&quot;0107&quot;</span>;<br />
&nbsp; &nbsp; <span style="color: #007f00;">// The account type we are setting</span><br />
&nbsp; &nbsp; InventAccountType &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inventAccountType <span style="color: #00007f;">=</span> InventAccountType<span style="color: #00007f;">::</span><span style="color: #000000;">InventIssue</span>;<br />
&nbsp; &nbsp; <span style="color: #007f00;">// the dimension group of the account type</span><br />
&nbsp; &nbsp; ItemGroupLedgerDimensionGroup &nbsp; &nbsp; &nbsp; itemGroupLedgerDimensionGroup <span style="color: #00007f;">=</span> ItemGroupLedgerDimensionGroup<span style="color: #00007f;">::</span><span style="color: #000000;">Inventory</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00; font-style: italic;">/* declarations */</span><br />
&nbsp; &nbsp; Ledger &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ledger;<br />
&nbsp; &nbsp; MainAccount &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mainAccount;<br />
&nbsp; &nbsp; DimensionAttributeValueCombination &nbsp;dimensionAttributeValueCombination;<br />
&nbsp; &nbsp; DimensionAttributeValue &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dimAttributeValue;<br />
&nbsp; &nbsp; DimensionAttribute &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dimAttribute;<br />
&nbsp; &nbsp; DimensionStorage &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dimStorage;<br />
&nbsp; &nbsp; RecId &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hierarchyRecId;<br />
<br />
&nbsp; &nbsp; DimensionStorageSegment &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dimensionStorageSegment;<br />
&nbsp; &nbsp; InventItemGroupForm &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm;<br />
&nbsp; &nbsp; ;<br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>inventItemGroup.<span style="color: #000000;">RecId</span> <span style="color: #00007f;">==</span> <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">throw</span> error<span style="color: #000000;">&#40;</span><span style="color: #ff0000;">&quot;InventItemGroup not found&quot;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// check if inventItemGroupForm record exists</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">firstOnly</span> <span style="color: #0000ff;">forUpdate</span> inventItemGroupForm<br />
&nbsp; &nbsp; <span style="color: #0000ff;">where</span> &nbsp;inventItemGroupForm.<span style="color: #000000;">ItemGroupId</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #00007f;">==</span> inventItemGroup.<span style="color: #000000;">ItemGroupId</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #00007f;">&amp;&amp;</span> inventItemGroupForm.<span style="color: #000000;">InventAccountType</span> &nbsp; &nbsp;<span style="color: #00007f;">==</span> inventAccountType<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #00007f;">&amp;&amp;</span> inventItemGroupForm.<span style="color: #000000;">LedgerDimensionGroup</span> <span style="color: #00007f;">==</span> itemGroupLedgerDimensionGroup;<br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span><span style="color: #00007f;">!</span>inventItemGroupForm<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// record does not exists, initialize it</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">initValue</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">ItemGroupId</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #00007f;">=</span> inventItemGroup.<span style="color: #000000;">ItemGroupId</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">InventAccountType</span> &nbsp; &nbsp; &nbsp; <span style="color: #00007f;">=</span> inventAccountType;<br />
&nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">LedgerDimensionGroup</span> &nbsp; &nbsp;<span style="color: #00007f;">=</span> itemGroupLedgerDimensionGroup;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get the ledger record for the current company</span><br />
&nbsp; &nbsp; ledger <span style="color: #00007f;">=</span> Ledger<span style="color: #00007f;">::</span><span style="color: #000000;">findByLegalEntity</span><span style="color: #000000;">&#40;</span>CompanyInfo<span style="color: #00007f;">::</span><span style="color: #000000;">current</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// lookup main account record</span><br />
&nbsp; &nbsp; mainAccount <span style="color: #00007f;">=</span> MainAccount<span style="color: #00007f;">::</span><span style="color: #000000;">findByMainAccountId</span><span style="color: #000000;">&#40;</span>mainAccountNum<span style="color: #00007f;">,</span> <span style="color: #0000ff;">false</span><span style="color: #00007f;">,</span> ledger.<span style="color: #000000;">ChartOfAccounts</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #000000;">&#40;</span>mainAccount.<span style="color: #000000;">RecId</span> <span style="color: #00007f;">==</span> <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">throw</span> error<span style="color: #000000;">&#40;</span><span style="color: #ff0000;">&quot;MainAccount not found&quot;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// check if DAVC exists</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">firstOnly</span> dimensionAttributeValueCombination<br />
&nbsp; &nbsp; <span style="color: #0000ff;">where</span> dimensionAttributeValueCombination.<span style="color: #000000;">MainAccount</span> <span style="color: #00007f;">==</span> mainAccount.<span style="color: #000000;">RecId</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #00007f;">&amp;&amp;</span> dimensionAttributeValueCombination.<span style="color: #000000;">AccountStructure</span> <span style="color: #00007f;">==</span> <span style="color: #000000;">0</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #00007f;">&amp;&amp;</span> dimensionAttributeValueCombination.<span style="color: #000000;">LedgerDimensionType</span> <span style="color: #00007f;">==</span> LedgerDimensionType<span style="color: #00007f;">::</span><span style="color: #000000;">DefaultAccount</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// when the DAVC does not exist, create it</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>dimensionAttributeValueCombination.<span style="color: #000000;">RecId</span> <span style="color: #00007f;">==</span> <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #007f00;">// Cache the dimension attribute that represents the Main account</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">firstonly</span> <span style="color: #00007f;">*</span> <span style="color: #0000ff;">from</span> dimAttribute <span style="color: #0000ff;">where</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dimAttribute.<span style="color: #000000;">RecId</span> <span style="color: #00007f;">==</span> DimensionAttribute<span style="color: #00007f;">::</span><span style="color: #000000;">getMainAccountDimensionAttribute</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// Lookup the DAV backing the main account instance</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dimAttributeValue <span style="color: #00007f;">=</span> DimensionAttributeValue<span style="color: #00007f;">::</span><span style="color: #000000;">findByDimensionAttributeAndEntityInst</span><span style="color: #000000;">&#40;</span>dimAttribute.<span style="color: #000000;">RecId</span><span style="color: #00007f;">,</span> mainAccount.<span style="color: #000000;">RecId</span><span style="color: #00007f;">,</span> <span style="color: #0000ff;">false</span><span style="color: #00007f;">,</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// lookup the hierarchy for the default acount</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; hierarchyRecId <span style="color: #00007f;">=</span> DimensionHierarchy<span style="color: #00007f;">::</span><span style="color: #000000;">getHierarchyIdByHierarchyType</span><span style="color: #000000;">&#40;</span>DimensionHierarchyType<span style="color: #00007f;">::</span><span style="color: #000000;">DefaultAccount</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// create new storage</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dimStorage <span style="color: #00007f;">=</span> DimensionStorage<span style="color: #00007f;">::</span><span style="color: #000000;">construct</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// add the default account structure hierarchy</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dimStorage.<span style="color: #000000;">addAccountStructure</span><span style="color: #000000;">&#40;</span>hierarchyRecId<span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// create storage segment for the value</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dimensionStorageSegment <span style="color: #00007f;">=</span> DimensionStorageSegment<span style="color: #00007f;">::</span><span style="color: #000000;">construct</span><span style="color: #000000;">&#40;</span>mainAccountNum<span style="color: #00007f;">,</span> dimAttributeValue.<span style="color: #000000;">RecId</span><span style="color: #00007f;">,</span> dimAttributeValue.<span style="color: #000000;">HashKey</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// add the segment to the storage</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dimStorage.<span style="color: #000000;">setSegment</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">1</span><span style="color: #00007f;">,</span> dimensionStorageSegment<span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// save storage as default account and get the record</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dimensionAttributeValueCombination <span style="color: #00007f;">=</span> DimensionAttributeValueCombination<span style="color: #00007f;">::</span><span style="color: #000000;">find</span><span style="color: #000000;">&#40;</span>dimStorage.<span style="color: #000000;">saveAsDefaultAccount</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// set the ledgerdimension reference field</span><br />
&nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">LedgerDimension</span> <span style="color: #00007f;">=</span> dimensionAttributeValueCombination.<span style="color: #000000;">RecId</span>;<br />
&nbsp; &nbsp; <span style="color: #007f00;">// call modifiedfield voor ledgerdimension field to sync inventPosting</span><br />
&nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">modifiedField</span><span style="color: #000000;">&#40;</span><span style="color: #0000ff;">fieldNum</span><span style="color: #000000;">&#40;</span>InventItemGroupForm<span style="color: #00007f;">,</span> LedgerDimension<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">ttsBegin</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span><span style="color: #000000;">&#40;</span>inventItemGroupForm.<span style="color: #000000;">recid</span> <span style="color: #00007f;">==</span> <span style="color: #000000;">0</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// insert if this is a new record</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">insert</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">else</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #007f00;">// update existing record</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; inventItemGroupForm.<span style="color: #000000;">update</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">ttsCommit</span>;<br />
<br />
&nbsp; &nbsp; info<span style="color: #000000;">&#40;</span><span style="color: #ff0000;">&quot;Done&quot;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>Comments with ideas / insights / improvements are welcome as always. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2011/11/08/data-migration-importing-the-inventitemgroupform-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>See you at Technical Conference in Nice (Nov 14-16)</title>
		<link>http://www.artofcreation.be/2011/11/07/see-you-at-technical-conference-in-nice-nov-14-16/</link>
		<comments>http://www.artofcreation.be/2011/11/07/see-you-at-technical-conference-in-nice-nov-14-16/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 20:17:46 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Technical conference]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1411</guid>
		<description><![CDATA[Hi everyone, Together with some colleagues, I will be attending the Technical Conference in Nice next week. I&#8217;m very exited, as this is a first for me (but hopefully not last). I will bring you the news when I get back. See you there!]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.artofcreation.be/wp-content/uploads/AXTechConference_04.png" alt="AXTechConference banner" title="AXTechConference_04" class="aligncenter size-full wp-image-1412" /></p>
<p>Hi everyone, </p>
<p>Together with some colleagues, I will be attending the <a href="http://www.microsoft.com/dynamics/dynamicsaxtechnicalconference2011/">Technical Conference in Nice</a> next week.<br />
I&#8217;m very exited, as this is a first for me (but hopefully not last). </p>
<p>I will bring you the news when I get back.<br />
See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2011/11/07/see-you-at-technical-conference-in-nice-nov-14-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AX2012: SysOperation part 3: SysOperationAutomaticUIBuilder</title>
		<link>http://www.artofcreation.be/2011/08/24/ax2012-sysoperation-part-3-sysoperationautomaticuibuilder/</link>
		<comments>http://www.artofcreation.be/2011/08/24/ax2012-sysoperation-part-3-sysoperationautomaticuibuilder/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 10:00:00 +0000</pubDate>
		<dc:creator>Klaas Deforche</dc:creator>
				<category><![CDATA[Dynamics AX]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Batch]]></category>
		<category><![CDATA[SysOperation]]></category>

		<guid isPermaLink="false">http://www.artofcreation.be/?p=1279</guid>
		<description><![CDATA[Hi everyone. This is the third and final part in my series of posts about SysOperation (at least for now). You can find part 1 here and part 2 here. I will demonstrate how to override methods on the dialog (in this case modified()), and how to read and set properties of controls. For the [...]]]></description>
			<content:encoded><![CDATA[<p>Hi everyone. </p>
<p>This is the third and final part in my series of posts about SysOperation (at least for now). You can find part 1 <a href="http://www.artofcreation.be/2011/08/22/ax2012-sysoperation-part-1-data-contracts-and-service-operations/">here </a>and part 2 <a href="http://www.artofcreation.be/2011/08/23/ax2012-sysoperation-part-2-sysoperationservicecontroller/">here</a>. </p>
<p>I will demonstrate how to override methods on the dialog (in this case modified()), and how to read and set properties of controls. </p>
<p>For the sake of this demo, we will add a checkbox to the dialog that will allow us to set the <strong>enabled </strong>property of the date control.<br />
It should look like this:<br />
<img src="http://www.artofcreation.be/wp-content/uploads/CheckboxChecked.png" alt="" title="CheckboxChecked" width="620" height="320" class="aligncenter size-full wp-image-1370" /></p>
<h3>1. Modify the data contract</h3>
<p>We will need to modify the data contract so a checkbox is displayed on the dialog that we can use to enable or disable the date control. </p>
<p>Add this variable to the class declaration of the <strong>KlForCustTesterDataContract </strong>class:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; NoYesId &nbsp; &nbsp; allowModifyDate;</div></div>
<p>Then add this method to that same data contract</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&#91;</span>DataMemberAttribute<span style="color: #00007f;">,</span><br />
SysOperationLabelAttribute<span style="color: #000000;">&#40;</span><span style="color: #ff0000;">&quot;Enable date control&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><br />
<span style="color: #0000ff;">public</span> NoYesId parmAllowModifyDate<span style="color: #000000;">&#40;</span>NoYesId _allowModifyDate <span style="color: #00007f;">=</span> allowModifyDate<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; allowModifyDate <span style="color: #00007f;">=</span> _allowModifyDate;<br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> allowModifyDate;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>There&#8217;s nothing new here, we already did all of this in <a href="http://www.artofcreation.be/2011/08/22/ax2012-sysoperation-part-1-data-contracts-and-service-operations/">part 1</a></p>
<h3>2. Extending SysOperationAutomaticUIBuilder</h3>
<p>We will extend the SysOperationAutomaticUIBuilder class so we can override methods and properties of controls on our dialog. </p>
<p>First, create a new class, KlForCustTesterUIBuilder:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">class</span> KlForCustTesterUIBuilder <span style="color: #0000ff;">extends</span> SysOperationAutomaticUIBuilder<br />
<span style="color: #000000;">&#123;</span><br />
<span style="color: #000000;">&#125;</span></div></div>
<p>Things we will need in this class are:</p>
<ol>
<li>a variable for the date control</li>
<li>a variable for the new checkbox control</li>
<li>our data contract</li>
</ol>
<p>So we add these variables to the class declaration:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">class</span> KlForCustTesterUIBuilder <span style="color: #0000ff;">extends</span> SysOperationAutomaticUIBuilder<br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; DialogField &nbsp; &nbsp; dialogFieldAllowModifyDate;<br />
&nbsp; &nbsp; DialogField &nbsp; &nbsp; dialogFieldTransDate;<br />
<br />
&nbsp; &nbsp; KlForCustTesterDataContract klForCustTesterDataContract;<br />
<span style="color: #000000;">&#125;</span></div></div>
<h3>2.1 Adding the override method</h3>
<p>We will first write the method that will override the modified of the checkbox control. Simply add a new method to the KlForCustTesterUIBuilder class:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">boolean</span> allowModifyDateModified<span style="color: #000000;">&#40;</span>FormCheckBoxControl _checkBoxControl<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; ;<br />
&nbsp; &nbsp; <span style="color: #007f00;">// set enabled or disabled based on checkbox</span><br />
&nbsp; &nbsp; dialogFieldTransDate.<span style="color: #000000;">enabled</span><span style="color: #000000;">&#40;</span><span style="color: #0000ff;">any2enum</span><span style="color: #000000;">&#40;</span>dialogFieldAllowModifyDate.<span style="color: #000000;">value</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #007f00;">// or alternatively</span><br />
&nbsp; &nbsp; <span style="color: #007f00;">// dialogFieldTransDate.enabled(_checkBoxControl.checked());</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>The code above sets the enabled method on the dialogFieldTransDate object based on the value property of dialogFieldAllowModifyDate object, or alternatively, the _checkBoxControl variable.<br />
As you may remember, we declared the DialogField variables in the class declaration. Of course we will still have to initialize these variables , and that&#8217;s what we&#8217;ll do when overriding the postBuild method. </p>
<h3>2.2 Overwriting the postBuild method</h3>
<p>Next, we need to override the postBuild method on our KlForCustTesterUIBuilder class. This method will be called after the dialog is created, so it is a good place to put our logic. </p>
<p>Override the method:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> postBuild<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; ;<br />
&nbsp; &nbsp; <span style="color: #0000ff;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>Next, let&#8217;s add some code to this method, starting with the code that retrieves the data contract object, which is pretty easy:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> postBuild<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; ;<br />
&nbsp; &nbsp; <span style="color: #0000ff;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get datacontract</span><br />
&nbsp; &nbsp; klForCustTesterDataContract <span style="color: #00007f;">=</span> this.<span style="color: #000000;">dataContractObject</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>Next, we retrieve the DialogField objects:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> postBuild<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; ;<br />
&nbsp; &nbsp; <span style="color: #0000ff;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get datacontract</span><br />
&nbsp; &nbsp; klForCustTesterDataContract <span style="color: #00007f;">=</span> this.<span style="color: #000000;">dataContractObject</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get dialog fields</span><br />
&nbsp; &nbsp; dialogFieldTransDate &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #00007f;">=</span> this.<span style="color: #000000;">bindInfo</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">getDialogField</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> parmTransDate<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; dialogFieldAllowModifyDate &nbsp;<span style="color: #00007f;">=</span> this.<span style="color: #000000;">bindInfo</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">getDialogField</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> parmAllowModifyDate<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>In the code above, the <strong>bindInfo() </strong>method returns an object of type <strong>SysOperationUIBindInfo</strong>. This contains information about which dialog controls the data members are bound to. By providing a reference to the parmTransDate and parmAllowModifyDate member when calling the <strong>getDialogField()</strong> method, we get the dialog control that is associated with each member. </p>
<p>Next, we will register the method we want to override:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> postBuild<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; ;<br />
&nbsp; &nbsp; <span style="color: #0000ff;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get datacontract</span><br />
&nbsp; &nbsp; klForCustTesterDataContract <span style="color: #00007f;">=</span> this.<span style="color: #000000;">dataContractObject</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get dialog fields</span><br />
&nbsp; &nbsp; dialogFieldTransDate &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #00007f;">=</span> this.<span style="color: #000000;">bindInfo</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">getDialogField</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> parmTransDate<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; dialogFieldAllowModifyDate &nbsp;<span style="color: #00007f;">=</span> this.<span style="color: #000000;">bindInfo</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">getDialogField</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> parmAllowModifyDate<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// register override methods</span><br />
&nbsp; &nbsp; dialogFieldAllowModifyDate.<span style="color: #000000;">registerOverrideMethod</span><span style="color: #000000;">&#40;</span><span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>FormCheckBoxControl<span style="color: #00007f;">,</span> modified<span style="color: #000000;">&#41;</span><span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterUIBuilder<span style="color: #00007f;">,</span> allowModifyDateModified<span style="color: #000000;">&#41;</span><span style="color: #00007f;">,</span> this<span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<p>As you can see, we can use the registerOverrideMethod() method to override methods on dialog. This is a huge improvement over overriding methods on dialogs in 2009. We simply point to the method we want to override (FormCheckBoxControl.modified) and the method the needs to be executed (KlForCustTesterUIBuilder.allowModifyDateModified). </p>
<p>Finally, we initialize the value of the enabled property, and the complete method will look like this:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> postBuild<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; ;<br />
&nbsp; &nbsp; <span style="color: #0000ff;">super</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get datacontract</span><br />
&nbsp; &nbsp; klForCustTesterDataContract <span style="color: #00007f;">=</span> this.<span style="color: #000000;">dataContractObject</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// get dialog fields</span><br />
&nbsp; &nbsp; dialogFieldTransDate &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #00007f;">=</span> this.<span style="color: #000000;">bindInfo</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">getDialogField</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> parmTransDate<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; dialogFieldAllowModifyDate &nbsp;<span style="color: #00007f;">=</span> this.<span style="color: #000000;">bindInfo</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #000000;">getDialogField</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterDataContract<span style="color: #00007f;">,</span> parmAllowModifyDate<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// register override methods</span><br />
&nbsp; &nbsp; dialogFieldAllowModifyDate.<span style="color: #000000;">registerOverrideMethod</span><span style="color: #000000;">&#40;</span><span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>FormCheckBoxControl<span style="color: #00007f;">,</span> modified<span style="color: #000000;">&#41;</span><span style="color: #00007f;">,</span> <span style="color: #0000ff;">methodstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterUIBuilder<span style="color: #00007f;">,</span> allowModifyDateModified<span style="color: #000000;">&#41;</span><span style="color: #00007f;">,</span> this<span style="color: #000000;">&#41;</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #007f00;">// enable/disable transdate based on checkbox</span><br />
&nbsp; &nbsp; dialogFieldTransDate.<span style="color: #000000;">enabled</span><span style="color: #000000;">&#40;</span><span style="color: #0000ff;">any2enum</span><span style="color: #000000;">&#40;</span>dialogFieldAllowModifyDate.<span style="color: #000000;">value</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div></div>
<h3>3. One more attribute</h3>
<p>Now, we&#8217;ve created the UIBuilder class, but we still have to link it to our data contract. That&#8217;s what the <strong>SysOperationContractProcessingAttribute </strong>attribute is for. </p>
<p>To link the UIBuilder class to the data contract, open the <strong>classDeclaration</strong> method of the <strong>KlForCustTesterDataContract</strong> class, and add the <strong>SysOperationContractProcessingAttribute</strong>:</p>
<div class="codecolorer-container xpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000;">&#91;</span>DataContractAttribute<span style="color: #00007f;">,</span><br />
&nbsp; &nbsp; SysOperationContractProcessingAttribute<span style="color: #000000;">&#40;</span><span style="color: #0000ff;">classstr</span><span style="color: #000000;">&#40;</span>KlForCustTesterUIBuilder<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><br />
<span style="color: #0000ff;">class</span> KlForCustTesterDataContract<br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; Name &nbsp; &nbsp; &nbsp; &nbsp;name;<br />
&nbsp; &nbsp; TransDate &nbsp; transDate;<br />
&nbsp; &nbsp; <span style="color: #0000ff;">str</span> &nbsp; &nbsp; &nbsp; &nbsp; packedQuery;<br />
<br />
&nbsp; &nbsp; NoYesId &nbsp; &nbsp; allowModifyDate;<br />
<span style="color: #000000;">&#125;</span></div></div>
<h3>4. Testing!</h3>
<p>But wait (you already know what I&#8217;m going to say right), first click the Generate Incremental CIL button to generate CIL.<br />
<img src="http://www.artofcreation.be/wp-content/uploads/generateCIL.png" alt="" title="generateCIL" width="634" height="99" class="aligncenter size-full wp-image-1229" /></p>
<p>Right click the KlForCustTesterServiceController menu item we created on day 2, and choose open. You should see this dialog:<br />
<img src="http://www.artofcreation.be/wp-content/uploads/CheckboxUnChecked.png" alt="" title="CheckboxUnChecked" width="620" height="320" class="aligncenter size-full wp-image-1371" /><br />
When you check the checkbox, you should see that the date field is enabled.<br />
<img src="http://www.artofcreation.be/wp-content/uploads/CheckboxChecked.png" alt="" title="CheckboxChecked" width="620" height="320" class="aligncenter size-full wp-image-1370" /></p>
<p><a href="http://www.artofcreation.be/wp-content/SharedProject_KlFor_SysOperation_Day3.xpo">Download the XPO for part 3 here</a>. </p>
<p>That concludes my blog posts about SysOperation, I hope you like it, and I&#8217;m looking forward to your feedback.<br />
Have fun making batches!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.artofcreation.be/2011/08/24/ax2012-sysoperation-part-3-sysoperationautomaticuibuilder/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

