tag:blogger.com,1999:blog-61430238561272828172024-02-08T04:25:56.853+01:00DeniZone- on Dynamics AX - software development methodologies - and other exciting topicsMr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.comBlogger51125tag:blogger.com,1999:blog-6143023856127282817.post-63783800056205142702016-11-25T12:13:00.001+01:002016-11-25T12:13:21.984+01:00Dynamics 365 for Operation, PowerApps, Common Data Model and mobile apps<div class="tr_bq">
A lot has been going on in the field of Dynamics AX - in the spring, AX7 got renamed to "The New Microsoft Dynamics" but by November 2016 AX7 was released as Dynamics 365 for Operation as "<a href="https://community.dynamics.com/b/msftdynamicsblog/archive/2016/11/01/microsoft-dynamics-365-now-generally-available" target="_blank">the evolution of Dynamics AX on Azure</a>". </div>
<br />
Some of us perhaps remember "Project Green" back around 2007. Project Green was rumored to combine or merge the at that time vastly different business applications in the MS portfolio. An article from 2007 by Mary Jo Foley gave us some insights:<br />
<blockquote>
<i>"Green was Microsoft's plan to unify its four ERP applications. Initially, Microsoft officials said Green would culminate in a single, Microsoft-branded ERP product that would take the best features of the existing four ERP products and meld them together. Before Microsoft got to that point, according to the Green roadmap, the Micrososft Business Solutions team would roll out new "waves" of its existing ERP products that used shared elements, such as a common workflow engine and business-intelligence tools." </i>(<a href="http://www.zdnet.com/article/microsofts-project-green-still-alive-and-kicking/" target="_blank">reference</a>)</blockquote>
<div>
Does it sound familiar to the products we now have? But wait there is more:</div>
<br /><blockquote>
<i>"The plan of record -- even though Microsoft no longer refers to it publicly as "Green" -- is to introduce at some point </i><b style="font-style: italic;">in the next decade</b> [my emphasis]<i> a round of releases of its ERP products where Microsoft's four ERP lines all look and feel remarkably similar, he said.</i><br /><i>Ultimately, "</i><b style="font-style: italic;">we could have Dynamics without the little (GP, AX, SL and NAV) appendages </b>[my emphasis]<i>," Utzschneider said."</i>(<a href="http://www.zdnet.com/article/microsofts-project-green-still-alive-and-kicking/" target="_blank">reference</a>)</blockquote>
<div>
Well, there you have it - or at least it could be interpreted as "Project Green" finally saw the light of day with the release of the Dynamics 365 suite. The referenced article is from 2007 so the "decade" was not far off.<br />
<br />
Alongside the release of Dynamics 365 for Operations - D365O - a plethora of other products got released that in some way or the other integrate with D365O pretty much out-of-the box. These product are referred to as the application platform (<a href="https://youtu.be/Bf6pR10jA14?t=7m8s" target="_blank">reference</a>)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihPpPu1oX8w4K3-LmSPZBZmqFoK9PD_OuR7gdMrkbfSo0b8ak2RhaJr_55YUp1f6F6AUN76D-gXoKFDS4RZLZEPVoNxn_p34GNslHx7YEZ0f-7RJ21yDOp9WuwNUU6_n04Iyn7AxZKn4Ym/s1600/application+platform.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihPpPu1oX8w4K3-LmSPZBZmqFoK9PD_OuR7gdMrkbfSo0b8ak2RhaJr_55YUp1f6F6AUN76D-gXoKFDS4RZLZEPVoNxn_p34GNslHx7YEZ0f-7RJ21yDOp9WuwNUU6_n04Iyn7AxZKn4Ym/s400/application+platform.png" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
The Common Data Model (CDM) is a data store that offers a consolidated set of data sourced, via an entity model, from across the enterprise (<a href="https://youtu.be/Bf6pR10jA14?t=9m54s" target="_blank">reference</a>) and PowerApps can build on data consolidated from the various system of records in an enterprise - system of records being the phrase used most often to describe the "old" Dynamics ERP products, when the lack of intelligence-offerings is contrasted to the capabilities of the newest version, i.e. Dynamics 365.<br />
<br />
<a href="https://powerapps.microsoft.com/en-us/" target="_blank">PowerApps </a>is a generic framework for building apps for any device - it is super easy to use and it literally took me less than 45 min to go from "Hmm - I wonder how this PowerApps work" to I published my customized app to my iPhone that showed real data from my D365O instance. That is pretty amazing and a huge leap from the capabilities of the previous versions of AX.<br />
<br />
While CDM offers consolidating options, if you just need to build a mobile app for you D365O instance, there is a little trick to get the mobile customization option.<br />
<br />
Normally the URL looks like this:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6NLOxpazdpMxezYwP0Hp3QS_s4AXcVWpJ5tN54GSilgbQIIkRv4dlG__olAjd6aHVtMgKcFFHY8Ok7LPfWhz1FmfS15OzTeSb2oiFr3uIg3xDEII0mAGsZy8D-jUwFcA1UxPpppP2_SBR/s1600/2016-11-25+11_46_23-Sales+order+processing+and+inquiry+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="34" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6NLOxpazdpMxezYwP0Hp3QS_s4AXcVWpJ5tN54GSilgbQIIkRv4dlG__olAjd6aHVtMgKcFFHY8Ok7LPfWhz1FmfS15OzTeSb2oiFr3uIg3xDEII0mAGsZy8D-jUwFcA1UxPpppP2_SBR/s320/2016-11-25+11_46_23-Sales+order+processing+and+inquiry+--+Operations.png" width="320" /></a></div>
And the Settings offer the usual options:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpiekaPe27qbLJv4tEjFfpGRhTg7TzO_krTjJW8UsUzFkyvzQ7nV5i0oVGmSyK-wpJX7av4jMDASLeXL8IA2WgTrfWaYHF6KegQpzsSwlgA3na9rvFnJiYsTpUT5V_38ik7lL97d_hUL2F/s1600/2016-11-25+11_47_57-Sales+order+processing+and+inquiry+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpiekaPe27qbLJv4tEjFfpGRhTg7TzO_krTjJW8UsUzFkyvzQ7nV5i0oVGmSyK-wpJX7av4jMDASLeXL8IA2WgTrfWaYHF6KegQpzsSwlgA3na9rvFnJiYsTpUT5V_38ik7lL97d_hUL2F/s320/2016-11-25+11_47_57-Sales+order+processing+and+inquiry+--+Operations.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
But if you add a small snippet to the end of the URL :</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
"&mode=mobile"</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
a new option appears in the Settings:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtEdNhKBT4Cu9r4AXD_DWIzrdxfJofO38dS8-GVTGfvdRhjSszILWk1BTsErVv1bpfU44bbpSkzXAvf_vJ9I1L7tjXAzzdbUuSj8e66Q1zAKev2drxkfWYSDcj9Pf6S10STHvgOwVKWu3d/s1600/2016-11-25+11_50_45-Unconfirmed+orders+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtEdNhKBT4Cu9r4AXD_DWIzrdxfJofO38dS8-GVTGfvdRhjSszILWk1BTsErVv1bpfU44bbpSkzXAvf_vJ9I1L7tjXAzzdbUuSj8e66Q1zAKev2drxkfWYSDcj9Pf6S10STHvgOwVKWu3d/s1600/2016-11-25+11_50_45-Unconfirmed+orders+--+Operations.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
If you then open a list page and click the Mobile app you can create a mobile app drawing on the data from that particular page:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdjLvNFEkEfTSt4nW3rGe6Ptm045lhAV8ICl2OERsD-pX093FEYdSYD6XD40rp8o-OowLfsjhWER6aZlbDSZ4lNwv973ohxzc0Gz_nvhFF1wb9IyVBxg_uJClZdyA56PYG77IdUWQRvlC3/s1600/2016-11-25+11_52_45-Open+sales+order+lines+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdjLvNFEkEfTSt4nW3rGe6Ptm045lhAV8ICl2OERsD-pX093FEYdSYD6XD40rp8o-OowLfsjhWER6aZlbDSZ4lNwv973ohxzc0Gz_nvhFF1wb9IyVBxg_uJClZdyA56PYG77IdUWQRvlC3/s640/2016-11-25+11_52_45-Open+sales+order+lines+--+Operations.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyOy7reYTaO1prZINtJ7VcYsDZrEdbLwelysMHI8vY-SC95s9TC8RGNRwbhSUkuFuvh1VG19-xI0ruzMfSyNbKfEnzaSkDupM4EVR-_z3MfEut76QclrOiTQWED816ul28R4VOXAR5XHiz/s1600/2016-11-25+11_56_01-Build+Custom+Business+Apps+_+Microsoft+PowerApps.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyOy7reYTaO1prZINtJ7VcYsDZrEdbLwelysMHI8vY-SC95s9TC8RGNRwbhSUkuFuvh1VG19-xI0ruzMfSyNbKfEnzaSkDupM4EVR-_z3MfEut76QclrOiTQWED816ul28R4VOXAR5XHiz/s320/2016-11-25+11_56_01-Build+Custom+Business+Apps+_+Microsoft+PowerApps.png" width="224" /></a></div>
<div class="" style="clear: both; text-align: left;">
Add a page and select the fields that you want to present on your page in the app</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxhVx5airKFqr_fmY0Sgg1MCOUE5DPt5mMBqox7lim_XWpWEVx-WKCidFohvlih49gX995blOEi8CYmSgYekbe_uTD38xiPnc4uyFBdC8wsJDiugH2Ipo2XQhOVx5iGhV-lp7PXXayXBBd/s1600/2016-11-25+11_57_10-Open+sales+order+lines+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxhVx5airKFqr_fmY0Sgg1MCOUE5DPt5mMBqox7lim_XWpWEVx-WKCidFohvlih49gX995blOEi8CYmSgYekbe_uTD38xiPnc4uyFBdC8wsJDiugH2Ipo2XQhOVx5iGhV-lp7PXXayXBBd/s320/2016-11-25+11_57_10-Open+sales+order+lines+--+Operations.png" width="237" /></a></div>
<div class="" style="clear: both; text-align: left;">
<br /></div>
<div class="" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDfDMhpfM_Y7iM-71hDD0GlKkFGWRDb3p6MCevC3QRnBBUlMkAtVQL-sf6O_N-720Gos14aM3jPwFVeUkMhNGhl0K3UyFIcYvqu_hJ3FFllA-biGrilI1fa5zb-4cqHCob4WzPLBblyTFF/s1600/2016-11-25+11_58_19-Open+sales+order+lines+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDfDMhpfM_Y7iM-71hDD0GlKkFGWRDb3p6MCevC3QRnBBUlMkAtVQL-sf6O_N-720Gos14aM3jPwFVeUkMhNGhl0K3UyFIcYvqu_hJ3FFllA-biGrilI1fa5zb-4cqHCob4WzPLBblyTFF/s1600/2016-11-25+11_58_19-Open+sales+order+lines+--+Operations.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
When you press the Select fields you can select fields directly from the overview grid by pressed the '+' icon next to the field:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQl8VjfFVvEOc_1dQbZyB04nc7W3IVz6lb6PloWytWvlMji6gHgiVAu-E3LxbHDvzsqMuAGuavxWIO4csvxgR4G0Fem_JxCHpyAMw2rGBw7jXj5FvgmQjBB2BkV-kJOmaotc4qf7eb3V8X/s1600/2016-11-25+12_00_14-Open+sales+order+lines+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="51" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQl8VjfFVvEOc_1dQbZyB04nc7W3IVz6lb6PloWytWvlMji6gHgiVAu-E3LxbHDvzsqMuAGuavxWIO4csvxgR4G0Fem_JxCHpyAMw2rGBw7jXj5FvgmQjBB2BkV-kJOmaotc4qf7eb3V8X/s640/2016-11-25+12_00_14-Open+sales+order+lines+--+Operations.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Super easy to populate and you even the type of the field from the grid.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7nikEieTLrjpdC99GGIFcQASvCD7AF_PDH-nHrIt3AG9cNy2f22bcqoVOaSb2VpItUCmBBu_gKyY4PBQPKCaU613SckOGjpGCypuPCsAUEYQ9lXH-lf3HDsoXjZbptztmgYR-Ucvd8IHi/s1600/2016-11-25+12_01_54-Open+sales+order+lines+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7nikEieTLrjpdC99GGIFcQASvCD7AF_PDH-nHrIt3AG9cNy2f22bcqoVOaSb2VpItUCmBBu_gKyY4PBQPKCaU613SckOGjpGCypuPCsAUEYQ9lXH-lf3HDsoXjZbptztmgYR-Ucvd8IHi/s1600/2016-11-25+12_01_54-Open+sales+order+lines+--+Operations.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
When you are done with customizing the app you get the option of publishing or exporting your workspace:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggojaOyMgnMX9-q3Hsaqki93Zz0jrAXaNk9oS9unOwQp6XyPl6j6V_VMc3kf_M0M_oOBSO3kd_eq8MrFrQh-Fqa5Y5kFSC4vA4R5qg2ePPI9nBRFQi7XCsWC1jQRg0m_kPgJpV3QWOBPdI/s1600/2016-11-25+12_03_09-Open+sales+order+lines+--+Operations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggojaOyMgnMX9-q3Hsaqki93Zz0jrAXaNk9oS9unOwQp6XyPl6j6V_VMc3kf_M0M_oOBSO3kd_eq8MrFrQh-Fqa5Y5kFSC4vA4R5qg2ePPI9nBRFQi7XCsWC1jQRg0m_kPgJpV3QWOBPdI/s1600/2016-11-25+12_03_09-Open+sales+order+lines+--+Operations.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And you created your first workspace app.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
So, there are many new features and products in the Dynamics 365 product portfolio and there are many areas to explore business wise and tech wise with the increased application platform. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The public roadmap is always worth to <a href="https://roadmap.dynamics.com/" target="_blank">watch</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-23869749551339079052016-05-24T20:57:00.001+02:002016-05-24T20:57:23.727+02:00Performance and The New Microsoft Dynamics AXThe performance landscape has changed with the New Microsoft Dynamics AX - of that there is little doubt. The client executable is now a browser and the rest of the topology resides in the cloud (until the on-premise version is released).<div>
<br /></div>
<div>
Well, since the "client" is now a browser, the lessons learned regarding performance of the client side executed code of the previous versions are no longer valid. Latency is king, when it comes to a smooth user experience.</div>
<div>
<br /></div>
<div>
Addressing performance starts with the user's experience of the performance of the system and luckily Microsoft have introduced some nice feature where we can start getting some information when the client is in the browser.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUR5K6Bq3_ac783rTCIUiW6LcqcF9ARatDRqidW1nX06agzwEQriMNYiO-GOaAxlJ_tcqKW-zS6xYEuw27WAWg_2cRdZ9k21Q6D0vF5Xd3zf7cZoJOtjMCduE7GSO1hbipTaLfD4Hez7rF/s1600/2016-05-24+20_33_29-Dynamics+AX+-+Internet+Explorer+provided+by+CGI+ISIT+Nordic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUR5K6Bq3_ac783rTCIUiW6LcqcF9ARatDRqidW1nX06agzwEQriMNYiO-GOaAxlJ_tcqKW-zS6xYEuw27WAWg_2cRdZ9k21Q6D0vF5Xd3zf7cZoJOtjMCduE7GSO1hbipTaLfD4Hez7rF/s320/2016-05-24+20_33_29-Dynamics+AX+-+Internet+Explorer+provided+by+CGI+ISIT+Nordic.png" width="320" /></a></div>
<div>
<br /></div>
<div>
The workspace of AX has a URL, no surprise here, and it may look something like this:</div>
<div>
<br /></div>
<div>
https://YourNameHere.dynamics.com/?cmp=DAT&mi=DefaultDashboard </div>
<div>
<br /></div>
<div>
But what happens if you add "&debug=develop" after the last character in the URL, like</div>
<div>
<br /></div>
<div>
<div>
https://YourNameHere.dynamics.com/?cmp=DAT&mi=DefaultDashboard&debug=develop</div>
</div>
<div>
<br /></div>
<div>
After the page loads again a small number appears next to the Search box</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKixLYjwzHBsXyWCS8-MgVDQF9P_9nsAGjxBoxEAgoI2xLT7OywG2B823o195THxpr7YqsLwLSTIBnlUdh6_Po5L7zQW-35CUga0mTmgGfnkWeG-uA4oNxXtPqlm2mh4M4fZTtLpJrlumq/s1600/2016-05-24+20_41_21-Dynamics+AX+-+Internet+Explorer+provided+by+CGI+ISIT+Nordic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKixLYjwzHBsXyWCS8-MgVDQF9P_9nsAGjxBoxEAgoI2xLT7OywG2B823o195THxpr7YqsLwLSTIBnlUdh6_Po5L7zQW-35CUga0mTmgGfnkWeG-uA4oNxXtPqlm2mh4M4fZTtLpJrlumq/s320/2016-05-24+20_41_21-Dynamics+AX+-+Internet+Explorer+provided+by+CGI+ISIT+Nordic.png" width="320" /></a></div>
<div>
<br /></div>
<div>
Left click the number and a performance pane pops up to the right where the stack is presented</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbWVGdttts-XnpwzXZRTNOQOTmW4POZblLRKScqboF9VncsnE_Czd_fcA818qjZQQqBqg-JZPizYC8H894tdc1t5duZNKwkEcLzsB-jnUWLsSE1sKNz7lvSX1cifSZcl47HQJ1iqqC1Ibm/s1600/2016-05-24+20_47_43-.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbWVGdttts-XnpwzXZRTNOQOTmW4POZblLRKScqboF9VncsnE_Czd_fcA818qjZQQqBqg-JZPizYC8H894tdc1t5duZNKwkEcLzsB-jnUWLsSE1sKNz7lvSX1cifSZcl47HQJ1iqqC1Ibm/s320/2016-05-24+20_47_43-.png" width="169" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You are able to drill-down if you click one on entries in the stack to get more information regarding the elapsed time</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Vs5yS3vpH-33kVrNryXar-4pFo_HI0rkwy3KI94Qt8ag6GuDm81N1dQY70uNAdnOWvUIXZ5d8rgLoWefLZ_SVDKg3cpxHHzFJC3ZuR06c4pAAfzco6WxdJnJ-5DWvqLZyDiWLBsg9yBn/s1600/2016-05-24+20_53_39-.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Vs5yS3vpH-33kVrNryXar-4pFo_HI0rkwy3KI94Qt8ag6GuDm81N1dQY70uNAdnOWvUIXZ5d8rgLoWefLZ_SVDKg3cpxHHzFJC3ZuR06c4pAAfzco6WxdJnJ-5DWvqLZyDiWLBsg9yBn/s320/2016-05-24+20_53_39-.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2A06tULkUcLuvZb-gMNB4PLkYQmy_BnpR290W6WYmb8CwPXvM-3GYkkB5XAbJT5NVHcsfctQSnZXlV1szJuWX_7ZRQ0KUWq_W4sEjNQLq9BSV7D-XkArsAgGi21z4lmb68uO5CEwrA303/s1600/2016-05-24+20_54_00-Catalogs+--+Dynamics+AX+-+Internet+Explorer+provided+by+CGI+ISIT+Nordic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2A06tULkUcLuvZb-gMNB4PLkYQmy_BnpR290W6WYmb8CwPXvM-3GYkkB5XAbJT5NVHcsfctQSnZXlV1szJuWX_7ZRQ0KUWq_W4sEjNQLq9BSV7D-XkArsAgGi21z4lmb68uO5CEwrA303/s320/2016-05-24+20_54_00-Catalogs+--+Dynamics+AX+-+Internet+Explorer+provided+by+CGI+ISIT+Nordic.png" width="150" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div>
So, a short but effective start off to digging into the end-users performance challenge simply by adding a small snippet after the URL.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-48644668097346925372016-02-04T16:25:00.000+01:002016-02-04T16:25:05.618+01:00WHS Mobile Device application debuggingThis post is about my debugging and error finding in the WHS Mobile Device application.<br />
<br />
First of all some general info about the Warehouse Mobile Device Portal, Microsoft published a series of post on the topic that will cover the architecture, setting up etc. The posts are well worth the read.<br />
<a href="http://blogs.msdn.com/b/dynamicsaxscm/archive/2015/02/23/warehouse-mobile-device-portal.aspx" target="_blank">Warehouse Mobile Device Portal part 1</a><br />
<a href="http://blogs.msdn.com/b/dynamicsaxscm/archive/2015/03/03/warehouse-mobile-device-portal-architecture.aspx" target="_blank">Warehouse Mobile Device Portal part 2</a><br />
<br />
and a general post about my problem area<br />
<br />
<a href="http://blogs.msdn.com/b/dynamicsaxscm/archive/2016/01/14/inventory-on-hand-movements-transfers-using-the-mobile-device-menus.aspx" target="_blank">Inventory on-hand movements/transfers using the mobile device menus</a><br />
<br />
First of, there is the option of simulating the web based client by opening the Form WHSWorkExecute:<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8nym0YXuR6rb7ORytnfxWT942zXjzDLKuSbV7ijcrCk9hZyMXhLqtrVHl2RwhFmvFtIpJWx4NGCAmTuobT0rUdGf783M-Jt9tgWabb1sO9awSOezZhNwXgIbFsFx0HFkNVTTHwrUYCo6n/s1600/2016-02-04+15_34_00-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8nym0YXuR6rb7ORytnfxWT942zXjzDLKuSbV7ijcrCk9hZyMXhLqtrVHl2RwhFmvFtIpJWx4NGCAmTuobT0rUdGf783M-Jt9tgWabb1sO9awSOezZhNwXgIbFsFx0HFkNVTTHwrUYCo6n/s400/2016-02-04+15_34_00-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" /></a><br />
when opening it you get a X++ form that is ideal for debugging the code - the menu is customizable - so your may look different<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtFtaHcNsr_obo5uJ9iu8FEY6eMV_jsTcHiePm4tc9YGlqq2zcV7lKdtZhnxO7OSEyn0ll_zMt_1vTH8GXWqsJMhklnqWO9GjjqnrfPIcfW_UvlSHApq0UFfQivSJRdRNKzpXF6WnaB_fk/s1600/MDPMenu.png" imageanchor="1"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtFtaHcNsr_obo5uJ9iu8FEY6eMV_jsTcHiePm4tc9YGlqq2zcV7lKdtZhnxO7OSEyn0ll_zMt_1vTH8GXWqsJMhklnqWO9GjjqnrfPIcfW_UvlSHApq0UFfQivSJRdRNKzpXF6WnaB_fk/s320/MDPMenu.png" width="171" /></a><br />
<br />
And now to the problem, when ever we did a Location transfer (that was setup as a movement as per the guides in the Microsoft blogs above - so it's not the standard naming) in the mobile device application it went back to the From page.<br />
<br />
We could copy the license plate into the client and the rest of the data would be filled in - seemingly:<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHxNG4_cAFWnzfX-1_g3TcLZaDb7QCOzKpRLIeV8yaGZRPFixNebNh0u6yz95VqvMQPUERuNxIrDw01-1_kL-oPEkC-iaQcXzNQpxlOUQHJUb6xJGOQ8LfPLEjMF_Nxdza-aW1fJv35KE2/s1600/2016-02-04+15_48_48-Windows+Media+Player.png" imageanchor="1"><img border="0" height="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHxNG4_cAFWnzfX-1_g3TcLZaDb7QCOzKpRLIeV8yaGZRPFixNebNh0u6yz95VqvMQPUERuNxIrDw01-1_kL-oPEkC-iaQcXzNQpxlOUQHJUb6xJGOQ8LfPLEjMF_Nxdza-aW1fJv35KE2/s320/2016-02-04+15_48_48-Windows+Media+Player.png" width="320" /></a><br />
<br />
Once we pressed the OK button however, the client would skip back to the From-page again, deleting the Qty:<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYLD8FXwVdIdzIcK8EF96r8mVEGTutZ0rC_eiCoQn5-yQiLOKf6dbgTQpfFcinM-tQZx9ideBfgs_w8TA3erYsTQs6DUw4maRO-O1iGYCsdLXS0riFr_cEx1S_ALf5h3jySlhbVVCBCtZU/s1600/2016-02-04+15_50_33-Windows+Media+Player.png" imageanchor="1"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYLD8FXwVdIdzIcK8EF96r8mVEGTutZ0rC_eiCoQn5-yQiLOKf6dbgTQpfFcinM-tQZx9ideBfgs_w8TA3erYsTQs6DUw4maRO-O1iGYCsdLXS0riFr_cEx1S_ALf5h3jySlhbVVCBCtZU/s320/2016-02-04+15_50_33-Windows+Media+Player.png" width="320" /></a><br />
<br />
Since the environment is without customisations, we suspected that the issue was data related - furthermore we could tell that the Inventory status was apparently blank even though we confirmed the status to be available in the On-hand inventory.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9oORw3UIDBqOSUqCYHmuytzJ_vVyxGF4I4mn8pv72a6W4BGaGFWBmE_a4xREWdVVJ2LJgn1vYMQ5GBiFOjIZxbUE2I7W3g5gWq6APiG33G4u9aqYylGrmlGEyBMn9aC6MmZ6d8EhX66Mf/s1600/Blankinventorystatus.png" imageanchor="1"><img border="0" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9oORw3UIDBqOSUqCYHmuytzJ_vVyxGF4I4mn8pv72a6W4BGaGFWBmE_a4xREWdVVJ2LJgn1vYMQ5GBiFOjIZxbUE2I7W3g5gWq6APiG33G4u9aqYylGrmlGEyBMn9aC6MmZ6d8EhX66Mf/s320/Blankinventorystatus.png" width="320" /></a><br />
We could do transfers in the AX client via the Transfer journals, so the data related to the item was correct.<br />
<br />
We were interested in investigating how the client form (either the web based or the AX form) got populated, because somewhere along the lines, the inventory status went missing.<br />
<br />
Well, after some extensive digging we found the class that populates the form with labels, data fields and buttons:<br />
<br />
WHSRFControlData<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAm1UD0xyGcmKQkDBlGV3YOeeQeC5WI40itNs75uSMDIwaa85SJ072qlyUsF0vh6n1kCfceCtGdEm5F1AiGCqPvr3cWVSV2a4y8Nv_hf-rNSIdVwj7fRgOOBlznWB7P_1nSYHFYmC5JK2t/s1600/2016-02-04+16_05_26-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAm1UD0xyGcmKQkDBlGV3YOeeQeC5WI40itNs75uSMDIwaa85SJ072qlyUsF0vh6n1kCfceCtGdEm5F1AiGCqPvr3cWVSV2a4y8Nv_hf-rNSIdVwj7fRgOOBlznWB7P_1nSYHFYmC5JK2t/s400/2016-02-04+16_05_26-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" /></a><br />
<br />
The population takes place in the populateData() and we could confirm that the InventStatusId was correct when assigning to the fromInventStatusId variable<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJLDzzJ9IgRd9WUP8Wdq9aL_sCSvfUBq8g9NV6K8bSyVaDiSZ66oTgiyStBlrnrRMF3Kc7nQs2csPu00NaUT8X592OBJoAAYJdOgAf1w_3moKWZ_-Jjl9gEnrN8OAjd9LpkNbzEmaEUVOG/s1600/PopulateData.png" imageanchor="1"><img border="0" height="168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJLDzzJ9IgRd9WUP8Wdq9aL_sCSvfUBq8g9NV6K8bSyVaDiSZ66oTgiyStBlrnrRMF3Kc7nQs2csPu00NaUT8X592OBJoAAYJdOgAf1w_3moKWZ_-Jjl9gEnrN8OAjd9LpkNbzEmaEUVOG/s640/PopulateData.png" width="640" /></a><br />
but when adding the Id to the control, there was a round trip to the WMSInventStatus where the Name was inserted as data value and not the Status from the actual inventory status.<br />
<br />
A short look into the WHS Inventory status form showed that the Name was blank, resulting in the Inventory status of item in the Mobile Device Portal not being populated - and consequently resulting in the user not being able to transfer the item (and the behaviour above).<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTnToSWFUw03dG8hND3ChFk0-56bttnYRiwcbYJYl-FeUz5WCHQD7oIxgjaCED3nCIRvY9yv8L5vnpuibr_pMxJ3exuGnh68Ge-6lXFjxUOM-56iJ8TSAYV4dTTQuebuHfDD_gwLP7U_Uo/s1600/2016-02-04+16_15_57-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" imageanchor="1"><img border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTnToSWFUw03dG8hND3ChFk0-56bttnYRiwcbYJYl-FeUz5WCHQD7oIxgjaCED3nCIRvY9yv8L5vnpuibr_pMxJ3exuGnh68Ge-6lXFjxUOM-56iJ8TSAYV4dTTQuebuHfDD_gwLP7U_Uo/s320/2016-02-04+16_15_57-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" width="320" /></a><br />
<br />
Adding the Name to the Inventory status resulted in expected behaviour of the forms and we could do our transfer<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5qMIolbfgRm_5uiNJNolJc9Fso84WvkVKVm03rlnyr61iGQb8rYewX9PlrmhUC-WWcrzyMkafMhiiKOO4ikLRQG305hh4PCW5rNsFgxg36bwy8iLjOEUHtsYwQZ-KSd8CkaAmPK7wm_mS/s1600/2016-02-04+16_20_00-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" imageanchor="1"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5qMIolbfgRm_5uiNJNolJc9Fso84WvkVKVm03rlnyr61iGQb8rYewX9PlrmhUC-WWcrzyMkafMhiiKOO4ikLRQG305hh4PCW5rNsFgxg36bwy8iLjOEUHtsYwQZ-KSd8CkaAmPK7wm_mS/s320/2016-02-04+16_20_00-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" width="234" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4nLfpqZ4JpfB9Q0xc9-IYWHLJTNGAvC6P9InoP5VBGSpJLpXK2PMXGdYSVg3lLNrSDQepet0gucFxpEubyiuYzdiag0_t2T4P6hoThRdLLiFlh57Tt0zgucIxlgsnc1BKNQUDDjFnStX/s1600/2016-02-04+16_20_13-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4nLfpqZ4JpfB9Q0xc9-IYWHLJTNGAvC6P9InoP5VBGSpJLpXK2PMXGdYSVg3lLNrSDQepet0gucFxpEubyiuYzdiag0_t2T4P6hoThRdLLiFlh57Tt0zgucIxlgsnc1BKNQUDDjFnStX/s400/2016-02-04+16_20_13-Azure+Workshop+CU10+-+AX2012R3-DevTest-LIN-AX-WORKSHOP-D-961677926a19240f.clouda.png" /></a>Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-21949458533312226572015-05-06T09:05:00.000+02:002015-05-06T09:05:02.950+02:00Finding X++ compile errors from CIL compile logEvery once in a while you will get some strange errors in your code - in the pre-2012 R3/R2 releases of AX without the axbuild command, doing a full X++ compile is quite time consuming.<br />
<br />
As known, without an error-free X++ compile, the CIL compile will fail, so how can developers easily find any X++ errors if the CIL compile fails? Sure, do the full X++ compile, but wait, there is more.<br />
<br />
A quick way to find X++ errors after an unsuccessful fuld CIL generation is to look in the CIL generation log.<br />
<br />
The log can be found on the AOS-server in the relevant AOS-instance's program files, e.g.<br />
<br />
<span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 20.7900009155273px;"><span style="font-size: xx-small;">"C:\Program Files\Microsoft Dynamics AX\60\Server\<b>[Instance name]</b>\bin\XppIL\Dynamics.Ax.Application.dll.log"</span></span><br />
<span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; line-height: 20.7900009155273px;"><span style="font-size: xx-small;"><br /></span></span>
You want the log to look like this<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjtCoIVom3lwMNcAA03sJ2k-N4soQWLghPz_gJjf8-F42UyQhTSt1Nv8aeM2QIQErRLn76Pj1JF9A_pPnG5bjkybUH18PwQmH0HXCVfQYePqD-P8zXRyJL2ABb_DWJvrv_y-Pq5cExc9mv/s1600/2015-05-06+09_00_58-RD+Tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjtCoIVom3lwMNcAA03sJ2k-N4soQWLghPz_gJjf8-F42UyQhTSt1Nv8aeM2QIQErRLn76Pj1JF9A_pPnG5bjkybUH18PwQmH0HXCVfQYePqD-P8zXRyJL2ABb_DWJvrv_y-Pq5cExc9mv/s1600/2015-05-06+09_00_58-RD+Tabs.png" height="147" width="320" /></a></div>
<span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"><span style="background-color: white; line-height: 20.7900009155273px;"><br /></span></span>Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-908524521661915402015-04-17T15:28:00.001+02:002015-04-17T15:28:45.359+02:00Assigning enum value to variable from enum nameWorking with utilities there are alot of file exchanges - alot.<br />
<br />
Today we got a strange case though. In a file we receive a value that represents the name of a enum value, e.g. E17. The label of the enum value is Consumption, so we wanted to assign the value to a field value in a given table, so this is what we came up with<br />
<br />
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <i><span style="color: green;">//</span><span style="color: #92d050;"> must assign Consupmtion and not E17</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> JournalConnection
journalConnection;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <b><span style="color: darkblue;">str</span></b> typeOfMeteringPoint
= <span style="color: darkred;">"E17"</span>;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> SysDictEnum
dictEnum = <b><span style="color: darkblue;">new</span></b>
SysDictEnum(<b><span style="color: darkblue;">enumNum</span></b>(ConnectionTypes));<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> ;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <o:p></o:p></span></div>
<br />
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> journalConnection.type =
dictEnum.symbol2Value(typeOfMeteringPoint);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"><br /></span></div>
<div class="MsoNormal">
<br /></div>
<br />
<br />
<br />
we also came up with this one where we inserted the option of a small if-statement to check if the name of the enum value is found on the enum:<br />
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: DA;"> </span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8pt;"> J</span><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;">ournalConnection
journalConnection;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> ConnectionTypes
connectionTypes;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <b><span style="color: darkblue;">str</span></b>
typeOfMeteringPoint = <span style="color: darkred;">"E17"</span>;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> SysDictEnum
dictEnum = <b><span style="color: darkblue;">new</span></b>
SysDictEnum(<b><span style="color: darkblue;">enumNum</span></b>(ConnectionTypes));<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;">
Counter
values = dictEnum.values();<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <b><span style="color: darkblue;">int</span></b>
idx;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> ;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <b><span style="color: darkblue;">for</span></b>(idx
= <b><span style="color: red;">0</span></b>; idx< values ;idx++)<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> { <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> <b><span style="color: darkblue;">if</span></b>(typeOfMeteringPoint
== dictEnum.index2Symbol(idx))<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;">
journalConnection.type = <b><span style="color: darkblue;">str2enum</span></b>(ConnectionTypes,dictEnum.index2Name(idx));<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: DA;"> </span><span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: DA;">}<o:p></o:p></span></div>
<br />
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: DA;"> }<o:p></o:p></span></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-65969060868404321362015-03-31T12:52:00.002+02:002015-03-31T12:52:47.420+02:00Primary legal entity primary address and country code specific menu itemsEarlier this week a customer experienced that a very important menu item all of a sudden disappeared. It was quite disturbing since it is the call center's main entry point for calls.<br />
<br />
I could see the menu item in AOT > Menus but when I opened the element I got this error message:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdtNx7BdxjI_792LgW5y4DW6iSbAI3JB_U1BZQrZyODwPJPOO76A24sBWLjES2l1IUaLYszocf8NTt8s4iy9Ox9Nac0drRUUTzwKS_LgRIT0mPhIer7BZyvh-kbtpLGYsZemJXKEcA6nZg/s1600/2015-03-31+12_29_51-RD+Tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdtNx7BdxjI_792LgW5y4DW6iSbAI3JB_U1BZQrZyODwPJPOO76A24sBWLjES2l1IUaLYszocf8NTt8s4iy9Ox9Nac0drRUUTzwKS_LgRIT0mPhIer7BZyvh-kbtpLGYsZemJXKEcA6nZg/s1600/2015-03-31+12_29_51-RD+Tabs.png" /></a></div>
<br />
<br />
I knew that the Menu Item in question had a CountryRegionCode property set to Denmark (DK)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSArp6DvFxkFnPYk-hUnjaZ4RfnjVF_cmtS2zla-ahg8wSIK6OuUutx2nU9XNgZg76k_rOBNxnYpQNvVW9bMFJmdIK-NuBxsEK2LD2tCA2pqhq5xIrWqme5ujX5j1TXG25HuEvqjwzs9tH/s1600/2015-03-31+11_33_58-10.45.71.138.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSArp6DvFxkFnPYk-hUnjaZ4RfnjVF_cmtS2zla-ahg8wSIK6OuUutx2nU9XNgZg76k_rOBNxnYpQNvVW9bMFJmdIK-NuBxsEK2LD2tCA2pqhq5xIrWqme5ujX5j1TXG25HuEvqjwzs9tH/s1600/2015-03-31+11_33_58-10.45.71.138.png" height="80" width="320" /></a></div>
and that the License configuration had Denmark set in Country/Regional specific feature:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK8KbpW9BfBbMFlFvNvJha_7RjTS8RHJPoXXYL1Tz-F79VuEtlIbZMZkOElsTBXOAvas88jtWX5i2UoM4Prr4q-lqSHY-0sM_lbZEebJ9s8UbDxI6rI_1FWcVN0fEmcXmcxfv4th1QxjeH/s1600/2015-03-31+11_35_05-10.45.71.138.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK8KbpW9BfBbMFlFvNvJha_7RjTS8RHJPoXXYL1Tz-F79VuEtlIbZMZkOElsTBXOAvas88jtWX5i2UoM4Prr4q-lqSHY-0sM_lbZEebJ9s8UbDxI6rI_1FWcVN0fEmcXmcxfv4th1QxjeH/s1600/2015-03-31+11_35_05-10.45.71.138.png" /></a></div>
My immediate thought was that the customer had altered the role for the users, however when I logged on to the clients environment with the System Administrator role, the menu item still was unavailable.<br />
<br />
So, what was the problem? I could confirm that it had something to do with the CountryRegionCode by doing some tests.<br />
<br />
With AX 2012 the controlling party is defined by the organization model. "If the country context of the controlling party matches the country context of the controlled entity, the functionality or UI elements will be enabled." (<a href="https://msdn.microsoft.com/en-us/library/hh404126.aspx" target="_blank">MSDN-article "Applying Country Specific Functionality [AX 2012]"</a>)<br />
<br />
So the country region code of the primary address of the legal entity defines the country/region context for the controlling party - which means that if there is no primary address or the primary address is not in the same country as the menu item, the UI element will not be shown.<br />
<br />
The resolution was to check if the Legal entity had Denmark as country code for the primary address:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPi6tYjq8cj0IzPziONAVOUQ3WJbhkM1WFnhq_YzanbzN2BhoPImTAqIvqdi8wB854Ov0KFXf3-HHKty6pFHjFgWyNwg4tuzYygZfv3H8Ne1Di_QMRNFFe3VHmBJjZKXP-E7TXj37J6d-2/s1600/2015-03-31+12_46_28-RD+Tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPi6tYjq8cj0IzPziONAVOUQ3WJbhkM1WFnhq_YzanbzN2BhoPImTAqIvqdi8wB854Ov0KFXf3-HHKty6pFHjFgWyNwg4tuzYygZfv3H8Ne1Di_QMRNFFe3VHmBJjZKXP-E7TXj37J6d-2/s1600/2015-03-31+12_46_28-RD+Tabs.png" height="32" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Open the Legal entities form:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6OcIOE5QWA4IdFQXZjk401-ey-G4TNvPbWFINCNWP-hcWE0qS5-bJ9EYwtkkDIFFuWiqEFRAN0iVDXmrL36yq80O_3mRo-F9gC-7g9IZUr10CxgsRUU7uAU5SjJzqywC8FOLg9qw2TMAK/s1600/2015-03-31+12_49_43-RD+Tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6OcIOE5QWA4IdFQXZjk401-ey-G4TNvPbWFINCNWP-hcWE0qS5-bJ9EYwtkkDIFFuWiqEFRAN0iVDXmrL36yq80O_3mRo-F9gC-7g9IZUr10CxgsRUU7uAU5SjJzqywC8FOLg9qw2TMAK/s1600/2015-03-31+12_49_43-RD+Tabs.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
which it did not - they had altered the country region for the primary address for no reason.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzR4UmCga8Cg9iNzeZRtCLu5R3IunpvnguoHXd1v6MZ7oXXPr9MiAGeJ-qqmnFnn3WNiNd3dBgRm7Y4_u8Ex-iyDNuhJswY7edBmfVIvgfYibefLREpp-5wD4LP3OgLclUWMxjmrKEhVFW/s1600/2015-03-31+12_50_53-RD+Tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzR4UmCga8Cg9iNzeZRtCLu5R3IunpvnguoHXd1v6MZ7oXXPr9MiAGeJ-qqmnFnn3WNiNd3dBgRm7Y4_u8Ex-iyDNuhJswY7edBmfVIvgfYibefLREpp-5wD4LP3OgLclUWMxjmrKEhVFW/s1600/2015-03-31+12_50_53-RD+Tabs.png" height="229" width="320" /></a></div>
<br />
<br />
Once the primary address' country region was edited back to Denmark, the menu item appeared again.Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-63137286186521801172015-03-05T08:07:00.000+01:002015-03-06T11:00:18.103+01:00Microsoft Dynamics AX 2012 R3 and AzureBack in November 2013 Mary Jo Foley <a href="http://www.zdnet.com/article/microsoft-to-bring-dynamics-ax-erp-to-the-cloud-by-april-2014/" target="_blank">reported</a> that Microsoft planned to Dynamics AX to the clould by spring 2014.<br />
<br />
With the release of Dynamics AX 2012 R3 Microsoft introduced the ability of deploying AX 2012 R3 to the Cloud, proving once again that Mary Jo Foley's articles are well worth reading when it comes to news on Microsoft and their products. While Microsoft have updated their articles on how to <a href="https://technet.microsoft.com/en-us/library/dn741579.aspx" target="_blank">plan a AX deployment to the cloud</a>, the move to a cloud based solution may seem a challenge if you never before have investigated Azure.<br />
<br />
In order to get the fundamentals in place, Microsoft have published a free e-book. It is a great read, not only covering many of the topics that are relevant for a Dynamics AX 2012 R3 implementation but will also covering areas for general development.<br />
<br />
Download your copy from:<br />
<a href="http://blogs.msdn.com/b/microsoft_press/archive/2015/02/03/free-ebook-microsoft-azure-essentials-fundamentals-of-azure.aspx">http://blogs.msdn.com/b/microsoft_press/archive/2015/02/03/free-ebook-microsoft-azure-essentials-fundamentals-of-azure.aspx</a><br />
<br />
<br />Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-77675227641524596032015-03-03T15:04:00.000+01:002015-03-05T13:12:27.301+01:00Videos from Technical Conference 2015The annual Microsoft Dynamics Techical Conference took place back in February. As always the conference demonstrated Microsoft's strong commitment to the Dynamics Product portfolio and gave participants the opportunity to hear about practical and technical content, as well as recommended best practices, delivered by Microsoft leaders and technology experts.<br />
<div>
<br /></div>
<div>
The videos from the conference are now available from <a href="https://mbs.microsoft.com/customersource/northamerica/AX/learning/presentations/AXTechConf15PresentationVideos" target="_blank">Customer and Partner Source site</a>:</div>
<div>
<br /></div>
<div>
<br /></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-75232312038822612342015-02-28T11:18:00.000+01:002015-02-28T11:18:03.646+01:002 examples of importing multiple filesIn AX, the typical way to import files via the UI is to do it one file at the time. If you have multiple files to import there are several options on how to do this via the AIF.<br />
<br />
Every once in a while, it could be useful for the end-user to have the option of importing several files through the UI.<br />
<br />
I have found two similar examples on how to achieve this:<br />
<br />
Example 1)<br />
static void MultiFileSelectDlgTest_1(Args _args)<br />
{<br />
System.Windows.Forms.OpenFileDialog ofd;<br />
System.String[] s2;<br />
int counters;<br />
str imageValaue;<br />
int i;<br />
;<br />
ofd = new System.Windows.Forms.OpenFileDialog();<br />
ofd.set_Title("Select files");<br />
ofd.set_Multiselect(true);<br />
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult::OK)<br />
{<br />
s2 = ofd.get_FileNames();<br />
counters=System.Convert::ToInt32( s2.get_Length());<br />
for(i = 0 ; i <= counters-1; i++)<br />
{<br />
imageValaue = System.Convert::ToString(s2.GetValue(i));<br />
info(strFmt('%1', imageValaue));<br />
//do whatever you want ;)<br />
}<br />
}<br />
<br />
}<br />
The dialog will show this:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJE20JpPl19t7vaecuB7l1JXobnXRrCy6CJx3WbQ9UD7V_5pqVAvJwbTdpBlup-ee9cVZ3enhv2Jrf9SiftBIG4tsMRQBXrVKbUIs9hlvmx0DS7xFlp5WWHlL1DKqfpkSz-ya70yhm4IT_/s1600/2015-02-28+11_10_25-RD+Tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJE20JpPl19t7vaecuB7l1JXobnXRrCy6CJx3WbQ9UD7V_5pqVAvJwbTdpBlup-ee9cVZ3enhv2Jrf9SiftBIG4tsMRQBXrVKbUIs9hlvmx0DS7xFlp5WWHlL1DKqfpkSz-ya70yhm4IT_/s1600/2015-02-28+11_10_25-RD+Tabs.png" height="213" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
and the output in the infolog shows the individual files processed:</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3xjPtZT8AszKkPyYAea9nJs-x95qZ2uGvY_SMQW-XPuCJ_ur7UG2LVB-LmfwPDDceJ59yGL8mE8VH3BBZv_82ykORVfl-aLVIvhCZnlfQyQZ5KKq-p4r11pXid3s5MduK_AEQNclk_A3p/s1600/2015-02-28+11_11_34-RD+Tabs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3xjPtZT8AszKkPyYAea9nJs-x95qZ2uGvY_SMQW-XPuCJ_ur7UG2LVB-LmfwPDDceJ59yGL8mE8VH3BBZv_82ykORVfl-aLVIvhCZnlfQyQZ5KKq-p4r11pXid3s5MduK_AEQNclk_A3p/s1600/2015-02-28+11_11_34-RD+Tabs.png" height="161" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Example 2) The second example is just another flavour of the first, adding a filter option on the input content.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
static void MultiFileSelectDlgTest_2(Args _args)</div>
<div class="separator" style="clear: both;">
{</div>
<div class="separator" style="clear: both;">
int idx;</div>
<div class="separator" style="clear: both;">
int cnt;</div>
<div class="separator" style="clear: both;">
boolean result;</div>
<div class="separator" style="clear: both;">
System.String[] files;</div>
<div class="separator" style="clear: both;">
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
dlg.set_Multiselect(true);</div>
<div class="separator" style="clear: both;">
dlg.set_DefaultExt(".txt");</div>
<div class="separator" style="clear: both;">
dlg.set_Filter("Text documents|*.txt|All files|*.*");</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
result = dlg.ShowDialog();</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
if (result)</div>
<div class="separator" style="clear: both;">
{</div>
<div class="separator" style="clear: both;">
files = dlg.get_FileNames();</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
cnt = files.get_Count();</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
for (idx = 0; idx <= cnt; idx++)</div>
<div class="separator" style="clear: both;">
{</div>
<div class="separator" style="clear: both;">
info(files.get_Item(idx));</div>
<div class="separator" style="clear: both;">
}</div>
<div class="separator" style="clear: both;">
}</div>
<div class="separator" style="clear: both;">
}</div>
<br />
<br />Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-53298944098885847032015-02-21T10:52:00.000+01:002015-02-28T11:18:36.697+01:00Importing an Excel spread sheet with multiple columns<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">You may have seen it before, but here’s our take:<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">Case: The end-user has a spreadsheet they want to
import, and creating a csv-file is not an option. <o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">Challenge: In Excel the end user needs to set a “ ’ ”
in front of the numbers if they are to behave as strings e.g. an account no
“123435”. When read in AX the value will be read as 123.435,0000 since is
interpreted as a real. To overcome this, the end user must set the ‘ in front
of the string e.g. ‘123435. Since there may be several hundred or thousands of
records, it is not an option for the end user.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">How to import from Excel and format the cells’ content
when assigning to variables in AX.<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">Suggested solution below:<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">So, you create a dialog etc. for the file import and
in the actual method you read the sheet, the code looks like this:<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span lang="EN-US" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">private</span></b><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">void</span></b> readExcelFile()<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">{<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> SysExcelApplication
application;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> SysExcelWorkbooks
workbooks;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
SysExcelWorkbook workbook;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> SysExcelWorksheets
worksheets;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> SysExcelWorksheet
worksheet;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
SysExcelCells
cells;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
COMVariantType type;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
COMVariant
variant;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">int</span></b>
row=<b><span style="color: red;">1</span></b>,errors = <b><span style="color: red;">0</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
smmBusRelTable
smmBusRelTable;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
smmBusRelAccount
smmBusRelAccount;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
XXX_SortingId
sortingId;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">container</span></b>
errorCon;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> ;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> application = SysExcelApplication::construct();<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> workbooks = application.workbooks();<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">ttsBegin</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">try</span></b><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> workbooks.open(filenameopen);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">catch</span></b>
(Exception::Error)<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">throw</span></b>
error(<span style="color: darkred;">"@SYS19358."</span>);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> workbook = workbooks.item(<b><span style="color: red;">1</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> worksheets = workbook.worksheets();<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> worksheet = worksheets.itemFromNum(<b><span style="color: red;">1</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> cells =
worksheet.cells();<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> type = cells.item(row+<b><span style="color: red;">1</span></b>,<b><span style="color: red;">1</span></b>).value().variantType();<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">while</span></b>
(type != COMVariantType::VT_EMPTY)<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> row++;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <i><span style="color: green;">//
find variant of cell</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
variant = cells.item(row, <b><span style="color: red;">1</span></b>).value();<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <i><span style="color: green;">//
set variant type to smmBusRelAccount</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> smmBusRelAccount =
this.variant2str(variant);<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">if</span></b>(smmBusRelAccount)<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
smmBusRelTable = smmBusRelTable::find(smmBusRelAccount,<b><span style="color: darkblue;">true</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <i><span style="color: green;">// if there is a prospect proceed</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">if</span></b>(smmBusRelTable.RecId)<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
variant = cells.item(row, <b><span style="color: red;">3</span></b>).value();<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
sortingId = this.variant2str(variant);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
<b><span style="color: darkblue;">if</span></b>(!sortingId)<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
{<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
sortingId = cells.item(row, <b><span style="color: red;">3</span></b>).value().toString();<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
}<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
<b><span style="color: darkblue;">if</span></b>(XXX_Table::exist(sortingId,<b><span style="color: red;">8</span></b>))<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
</span><span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">{<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">
smmBusRelTable.XXX_Field =
sortingId;<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">
smmBusRelTable.update();<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">
</span><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">}<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
<b><span style="color: darkblue;">else</span></b><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
{<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US"><span style="font-family: Consolas;"><span style="font-size: 8pt;">
errorCon = </span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">conIns</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(errorCon,</span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">maxInt</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(),</span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">strFmt</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(</span></span><span style="color: darkviolet; font-family: Consolas;"><span style="font-size: 8pt;">"</span><span style="font-size: 10.6666669845581px;">Error with sorting %1</span><span style="font-size: 8pt;">"</span></span><span style="font-family: Consolas;"><span style="font-size: 8pt;">,row,sortingId));<o:p></o:p></span></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
}<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <i><span style="color: green;">// write to error log</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">else</span></b><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US"><span style="font-family: Consolas;"><span style="font-size: 8pt;">
errorcon = </span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">conIns</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(errorCon,</span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">maxInt</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(),</span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">strFmt</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(</span></span><span style="color: darkviolet; font-family: Consolas;"><span style="font-size: 8pt;">"</span><span style="font-size: 10.6666669845581px;">Error with prospect %1</span><span style="font-size: 8pt;">"</span></span><span style="font-family: Consolas;"><span style="font-size: 8pt;">,row));<o:p></o:p></span></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> type = cells.item(row+<b><span style="color: red;">1</span></b>, <b><span style="color: red;">1</span></b>).value().variantType();<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> application.quit();<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">ttsCommit</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US"><span style="font-family: Consolas;"><span style="font-size: 8pt;"> info(</span></span><span style="color: darkviolet; font-family: Consolas;"><span style="font-size: 8pt;">'</span><span style="font-size: 10.6666669845581px;">Import done</span><span style="font-size: 8pt;">'</span></span><span style="font-family: Consolas;"><span style="font-size: 8pt;">);<o:p></o:p></span></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <i><span style="color: green;">// Header was counted as
successful import. 1 is substracted from row to reflect that headers should not
count</span></i><o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US"><span style="font-family: Consolas;"><span style="font-size: 8pt;"> info(</span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">strFmt</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(</span></span><span style="color: darkviolet; font-family: Consolas;"><span style="font-size: 8pt;">'</span><span style="font-size: 10.6666669845581px;">Number of items imported %1</span><span style="font-size: 8pt;">'</span></span><span style="font-family: Consolas;"><span style="font-size: 8pt;">,(row-</span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: red;">1</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">)-</span></span><b style="font-family: Consolas; font-size: 8pt;"><span style="color: darkblue;">conLen</span></b><span style="font-family: Consolas;"><span style="font-size: 8pt;">(errorCon)));<o:p></o:p></span></span></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">setprefix</span></b>(<b><span style="color: darkblue;">strfmt</span></b>(<span style="color: darkviolet;">'@SYS344649'</span>,<b><span style="color: darkblue;">conLen</span></b>(errorCon)));<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">while</span></b>
(errors < <b><span style="color: darkblue;">conLen</span></b>(errorCon))<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> errors++;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> </span><span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">info(<b><span style="color: darkblue;">conPeek</span></b>(errorCon,errors));<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">}<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">In the<o:p></o:p></span></div>
<div class="MsoNormal">
<b><span lang="EN-US" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">while</span></b><span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> (type != COMVariantType::VT_EMPTY) <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">we check if there is something the cell read.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">Then you assign the variant of the cell<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">variant
= cells.item(row, <b><span style="color: red;">1</span></b>).value();<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">which you then cast to string:<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b><span lang="SV" style="color: darkblue; font-family: Consolas; font-size: 8.0pt; mso-ansi-language: SV; mso-fareast-language: EN-US;">private</span></b><span lang="SV" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: SV; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">str</span></b> variant2str(COMVariant
_variant)<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">{<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">str</span></b> valueStr;<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;"> ;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">switch</span></b>(_variant.variantType())<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">case</span></b>
COMVariantType::VT_EMPTY :<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
valueStr = <span style="color: darkred;">''</span>;<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">break</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">case</span></b>
COMVariantType::VT_BSTR :<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
valueStr = _variant.bStr();<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">break</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">case</span></b>
COMVariantType::VT_R4 :<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">case</span></b>
COMVariantType::VT_R8 :<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">if</span></b>(_variant.double())<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> {<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
valueStr = num2Str0(_variant.double(),<b><span style="color: red;">0</span></b>);<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">break</span></b>;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">default</span></b>
:<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">throw</span></b> error(<b><span style="color: darkblue;">strfmt</span></b>(<span style="color: darkviolet;">"@SYS26908"</span>,<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Consolas; font-size: 8.0pt; mso-ansi-language: EN-US; mso-fareast-language: EN-US;">
</span><span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">_variant.variantType()));<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;"> }<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;"> <b><span style="color: darkblue;">return</span></b> valueStr;<o:p></o:p></span></div>
<br />
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 8.0pt; mso-fareast-language: EN-US;">}<o:p></o:p></span></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-7120605621642239062015-02-20T11:36:00.003+01:002015-02-20T12:40:43.792+01:00Easy steps to create a number sequence in AX2012<br />
Following are steps to create new NumberSequence in Ax 2012<br />
<div>
<br /></div>
<div>
<b>1. Open the NumberSeqModuleXXX</b> (XXX is for the module name e.g. NumberSeqModuleCustomer, NumberSeqModuleHRM etc) class in the Application Object Tree (AOT) and add the following code to the bottom of the loadModule() method:</div>
<div>
<br />
datatype.parmDatatypeId(extendedTypeNum(YYYY)); //EDT used for number sequence<br />
<br />
datatype.parmReferenceHelp("zzzzzzzzzzz");<br />
<br />
datatype.parmWizardIsContinuous(false);<br />
<br />
datatype.parmWizardIsManual(NoYes::No);<br />
<br />
datatype.parmWizardIsChangeDownAllowed(NoYes::Yes);<br />
<br />
datatype.parmWizardIsChangeUpAllowed(NoYes::Yes);<br />
<br />
datatype.parmWizardHighest(999);<br />
<br />
datatype.parmSortField(20);<br />
<br />
datatype.addParameterType(<br />
<br />
NumberSeqParameterType::DataArea, true, false);<br />
<br />
this.create(datatype);<br />
<br />
<b>2.Create a new job with following code and run it:</b><br />
<br />
static void NumberSeqLoadAll(Args _args)<br />
<br />
{<br />
<br />
NumberSeqApplicationModule::loadAll();<br />
<br />
}<br />
<br />
<b>3.Run the number sequence wizard on the Organization</b><br />
<br />
administration >Common >Number sequences > Number sequences > Generate and click on the Next button. Click on Details for more information. Delete the lines except the desired lines ( lines with your module and reference to your EDT). Click next and finish the wizard.<br />
<br />
<b>4</b>.You will find the newly created numberSequence in the respective module's parameters form under numbersequence tab.<br />
In the parameters table(zzzzParameters) in the AOT create the following method:<br />
<br />
public server static NumberSequenceReference numRefYYYY()<br />
<br />
{<br />
<br />
return NumberSeqReference::findReference(extendedTypeNum(YYYY));<br />
<br />
}<br />
<br />
<b>5.To use the number sequence refer to the following code :</b><br />
<br />
public void initValue()<br />
<br />
{ <br />
<br />
NumberSeq NumSeq;<br />
<br />
;<br />
<br />
super();<br />
<br />
NumSeq = NumberSeq::newGetNum(zzzzParameters::numRefYYYY(),true);<br />
<br />
//NumSeq.num(); this will create new numbers.<br />
<br />
}</div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-84282787255227772812015-02-16T17:07:00.001+01:002015-02-20T11:37:15.641+01:00How to redirect/drain user clients in a cluster AOS-setup<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">It may become necessary to redirect users to a
specific AOS instance even though the client configuration is setup to use a
AOS cluster.<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">If the redirect is a temporary fix such as setting an AOS-server offline for maintenance instead of editing all axc-client configurations, it is possible
in the user interface to tell an AOS-server to redirect user connection to
other AOS-instances in the cluster quite easily:<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">Open AX and navigate to the System Administration
module:<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3BaHZLqg24zZRiiqg-9mcGLUx8EgFerhyphenhyphenCduf05FJJhT0jStrbYe04zDIGyhfpivZrFKXmGGFKr5UYTSDRWpsp1OVkOKO-Du7J-CuXLglCUy5Io68dvNG2UVjwAA-jNYdVvln2IqU0T5L/s1600/sysadm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3BaHZLqg24zZRiiqg-9mcGLUx8EgFerhyphenhyphenCduf05FJJhT0jStrbYe04zDIGyhfpivZrFKXmGGFKr5UYTSDRWpsp1OVkOKO-Du7J-CuXLglCUy5Io68dvNG2UVjwAA-jNYdVvln2IqU0T5L/s1600/sysadm.png" /></a></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">In the group Users, open Online users:<o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ubYCK6O2eugEIC7ipn49aDpojvMooTN5viDtforU1v4TtNqHzqu7DbyaONR0qKIyLGGOpyid_FerSw9uImI_B8qVJgu8PSywpa2qT6mdYr0VVwERvgBSSZOyF5WYQifLjV8PMnTaClUD/s1600/online+users.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ubYCK6O2eugEIC7ipn49aDpojvMooTN5viDtforU1v4TtNqHzqu7DbyaONR0qKIyLGGOpyid_FerSw9uImI_B8qVJgu8PSywpa2qT6mdYr0VVwERvgBSSZOyF5WYQifLjV8PMnTaClUD/s1600/online+users.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">On the tab Server Instances confirm that are are 2 or
more AOS-instances connected to the application:</span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAXjg-TpEvU1ftomHihQY-wsLDLV1H6QnewjIdT0HGUl7iO8v-94OIyyOo4kWNBMlvT8IdX62UVoJs9qSUIwOlLi3g-IpeQKpAA6Ttm9y7xL10OghLWDmbLLhKvUFQ5a_WZgUbDwvQZJ2y/s1600/server+instances.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAXjg-TpEvU1ftomHihQY-wsLDLV1H6QnewjIdT0HGUl7iO8v-94OIyyOo4kWNBMlvT8IdX62UVoJs9qSUIwOlLi3g-IpeQKpAA6Ttm9y7xL10OghLWDmbLLhKvUFQ5a_WZgUbDwvQZJ2y/s1600/server+instances.png" height="89" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">Mark the AOS-instance that you want to redirect from
and press the Reject new clients button, e.g. <o:p></o:p></span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjue0dqVOks3Rx_jWiiBCL-gjL9IgNwQT-ywmZQZIkb6uph5uHaWNz3dXw19vhT70rtsCYmfkoE98tjsLd7q_YfTt4dLwOq-qLrVJK0jp4ddFfIB5xqESLoGc66XGnyMeUi9uQFVTRmfJu/s1600/reject.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjue0dqVOks3Rx_jWiiBCL-gjL9IgNwQT-ywmZQZIkb6uph5uHaWNz3dXw19vhT70rtsCYmfkoE98tjsLd7q_YfTt4dLwOq-qLrVJK0jp4ddFfIB5xqESLoGc66XGnyMeUi9uQFVTRmfJu/s1600/reject.png" height="124" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">A prompt will ask for confirmation, press OK:<o:p></o:p></span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0jTeaFkNs-mxTdiLEqgM1bTVAoZmUzsUI_EbNLviQ-OiLJSW2VH4w8xGCE4w7Hn3-SfAfIzpmiG7Tr7cJ_x_iLOGghK_Ev48Vx77ddbnhPwrUDzgrNAS8Vwk3BzU3D9rdM1zneAoCnN9o/s1600/confirm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0jTeaFkNs-mxTdiLEqgM1bTVAoZmUzsUI_EbNLviQ-OiLJSW2VH4w8xGCE4w7Hn3-SfAfIzpmiG7Tr7cJ_x_iLOGghK_Ev48Vx77ddbnhPwrUDzgrNAS8Vwk3BzU3D9rdM1zneAoCnN9o/s1600/confirm.png" height="125" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">Status for the AOS instance will shift to Draining,
which means that connections to the AOS-instance is in the process of drained from the AOS-instance(s).<o:p></o:p></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj_5OQcNcEgQorb36dws0FITagCktkxSgQxpaw3gwfwjG48SNhxz9OrxoNeOOAtZYEXzYJivQzPKCmUMRLKrv5rz8EFS50sTq9JS42z9-g8x1oaYpojkHZqqEn7kcRL0HQLnZ0uLWCaymq/s1600/draining.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj_5OQcNcEgQorb36dws0FITagCktkxSgQxpaw3gwfwjG48SNhxz9OrxoNeOOAtZYEXzYJivQzPKCmUMRLKrv5rz8EFS50sTq9JS42z9-g8x1oaYpojkHZqqEn7kcRL0HQLnZ0uLWCaymq/s1600/draining.png" height="125" width="320" /></a><span style="font-family: Calibri, sans-serif; font-size: 11pt;"> </span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">To allow connections to the AOS-instance again, navigate
to the same form, highlight the redirecting AOS instance and press the “Accept
new clients”.<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;">In this way, we have redirected new connections to an
AOS-cluster away from a specific AOS-instance, without altering the client
configuration.<o:p></o:p></span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; mso-ansi-language: EN-US;"><a href="https://technet.microsoft.com/en-us/library/hh433538.aspx" target="_blank">TechNet: Drain users from an AOS</a></span></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-30893486540217557392013-05-06T14:37:00.000+02:002013-05-06T15:18:12.434+02:00Checking up on Backup history?<span style="font-family: inherit;">Ever needed to show the history of your backups? Here is the SQL script to do it</span><br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: Courier New, Courier, monospace;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;">SELECT</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"> <span style="color: blue;">top</span> 10 <o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;"> database_name<span style="color: grey;">,<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
recovery_model<span style="color: grey;">,</span> <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;"> <span style="color: blue;">CASE</span> bs<span style="color: grey;">.</span><span style="color: blue;">type</span> <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;"> <span style="color: blue;">WHEN</span> <span style="color: red;">'D'</span> <span style="color: blue;">THEN</span> <span style="color: red;">'FULL'<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
<span style="color: blue;">WHEN</span> <span style="color: red;">'I'</span> <span style="color: blue;">THEN</span> <span style="color: red;">'DIFFERENTIAL'<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
<span style="color: blue;">WHEN</span> <span style="color: red;">'L'</span> <span style="color: blue;">THEN</span> <span style="color: red;">'TRANSACTION LOG'<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
<span style="color: blue;">ELSE</span> <span style="color: red;">'UNKNOWN'<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
<span style="color: blue;">END</span> <span style="color: blue;">AS</span>
backup_type<span style="color: grey;">,</span> <o:p></o:p></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;"> backup_start_date<span style="color: grey;">,<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
backup_finish_date<span style="color: grey;">,<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
backup_size<span style="color: grey;">,<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-family: Courier New, Courier, monospace; font-size: 10.0pt; mso-ansi-language: EN-US;">
compressed_backup_size<o:p></o:p></span></div>
<div class="MsoNormal">
<span style="font-family: Courier New, Courier, monospace;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;">FROM</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"> msdb<span style="color: grey;">.</span>dbo<span style="color: grey;">.</span>backupset bs<o:p></o:p></span></span></div>
<div class="MsoNormal">
<span style="font-family: Courier New, Courier, monospace;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;">where</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"> database_name <span style="color: grey;">=</span> <span style="color: red;">'AX2012'<o:p></o:p></span></span></span></div>
<div class="MsoNormal">
<span style="font-family: Courier New, Courier, monospace;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;">order</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"> <span style="color: blue;">by</span> backup_finish_date <span style="color: blue;">desc</span></span></span><span lang="EN-US"><o:p></o:p></span><br />
<span style="font-family: Courier New, Courier, monospace;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"><span style="color: blue;"><br /></span></span></span>
<span style="font-family: Courier New, Courier, monospace;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"><span style="color: blue;"><br /></span></span></span>
<span style="font-family: Courier New, Courier, monospace;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US;"><span style="color: blue;"><br /></span></span></span></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-35231220251891355992013-04-11T13:13:00.001+02:002013-04-11T13:13:19.159+02:00Database Maintenance Strategies for Dynamics AX - reblogI just happened to come across these blog posts while perusing my news feed:<br />
<br />
<a href="http://blogs.msdn.com/b/axinthefield/archive/2012/08/01/database-maintenance-strategies-for-dynamics-ax.aspx">http://blogs.msdn.com/b/axinthefield/archive/2012/08/01/database-maintenance-strategies-for-dynamics-ax.aspx</a><br />
<br />
<a href="http://www.brentozar.com/archive/2009/02/index-fragmentation-findings-part-1-the-basics/">http://www.brentozar.com/archive/2009/02/index-fragmentation-findings-part-1-the-basics/</a><br />
<br />
That reminded me of an article which I found a couple of years back that described index fragmentation in this manner:<br />
<br />
"Index
fragmentation is a lot like cholesterol. The bad kind, not the good kind. It
builds up slowly. Some deletes occur, leaving empty space in a data page here.
Inserts occur, but the target page is packed, so a page split occurs so the
record can be inserted in the correct order, yet the other page is now mostly
empty. Updates are a double whammy. Over time, your index pages continue to be
less and less full, meaning you have to perform that many more reads per query.<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US">Just like
cholesterol, it’s not perceptible. Sure, if you compared yourself now to 10
years ago, you’d be able to instantly recognize that you feel tired all the
time, or occasionally dizzy spells or have blurred vision. Then all of a sudden
— HEART ATTACK!"<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<br /></div>
Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.comtag:blogger.com,1999:blog-6143023856127282817.post-15745221103602468492011-11-23T12:57:00.000+01:002011-11-23T12:57:26.943+01:00Agile development and ERPHere is small collection of blog-posts, articles and case-studies on Agile and Enterprise Resource Planning implementations.<br />
The post <a href="http://www.infoq.com/news/2011/11/21" target="_blank">Can Agile Practices Prevent ERP Disaster</a> sums up different sources on the topic and <a href="http://www.guerrillaprojectmanagement.com/agile-practices-in-large-system-integration-projects" target="_blank">Agile practices in large system integration projects</a> introduces a series of posts all dealing with agile and ERP. <br />
<br />
MSDynamicsworld.com has a post titled <a href="http://msdynamicsworld.com/story/accounting/how-substitute-agile-erp-implementation-waterfall-approach" target="_blank">How to Substitute Agile ERP Implementation for the Waterfall Approach</a> which is spot on, when it comes strong link between the waterfall model and ERP-implementations.<br />
<br />
InfoQ has a whole <a href="http://www.infoq.com/agile/" target="_blank">subsite</a> dedicated to agile processes and Jesper Boeg's introduction to Kanban "<a href="http://www.infoq.com/minibooks/priming-kanban-jesper-boeg" target="_blank">Priming Kanban</a>" can be downloaded for free.Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-5485734896609194862010-11-03T09:52:00.000+01:002010-11-03T09:52:00.897+01:00Dynamics AX Easter Egg<a href="http://gotdax.blogspot.com/">Jacob</a> posted this <a href="http://en.wikipedia.org/wiki/Easter_egg_(media)">easter egg</a> on his blog - funny little thing<br />
I know it's a "bit" off-season, but funny nonetheless<br />
<br />
static void easterEgg(Args _args)<br />
{;<br />
info(conPeek(new HeapCheck().createAContainer(), 4));<br />
}Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com1tag:blogger.com,1999:blog-6143023856127282817.post-463650914138824802010-10-27T09:02:00.002+02:002010-10-27T10:18:58.761+02:00AX6, Reports and SSRSAs mentioned in a previous <a href="http://denizone.blogspot.com/2010/10/more-on-ax-6-from-techincal-conference.html">post</a> on the sample content of the Technical Conference on AX, many tracks have SSRS and the transition from X++ reporting to SSRS reporting as a theme, and I anticipate that SSRS will be the de-facto reporting language in future versions of AX.<br />
However, as Saveen Reddy mentions on his <a href="http://blogs.msdn.com/b/saveenr/">blog</a>, the transition from X++ to SSRS is no novelty. The gap between the two technologies is too big, despite many white papers, blogs and documents, and consultants and developers need to ramp up their skills in order to offer customers the full benefits of their AX investment.<br />
Luckily Saveen Reddy, lead programme manager for Dynamics AX Business Intelligence, acknowledges this difficulty in making the transition and has a series of posts on his blog, which might help developers and consultants alike "being productive", as he calls it.<br />
The plan is a 4 phase series, which is already posted, so there is ample opportunity for us all to start learning SSRS and how it collaborates with Dynamics AX 6, for as Saveen Reddy states in no uncertain terms:<br />
<span style="font-size: 85%;"><i>'And again why should you care? I’ll repeat again: the future of AX Reporting is SSRS. Internalize that message. I cannot emphasize it enough. X++ will continue to see much less investment in the future. Becoming very familiar with SSRS is your best bet to stay productive with AX in the future.'</i></span><br />
Read the first post <a href="http://blogs.msdn.com/b/saveenr/archive/2010/05/01/how-to-be-productive-with-ssrs-and-dynamics-ax-2009-a-new-approach.aspx">here</a> and see all of the published posts on SSRS and AX 6 <a href="http://blogs.msdn.com/b/saveenr/archive/tags/dynamicsax/">here</a><span style="font-size: 85%;"><i><br />
</i></span><br />
<span style="font-size: 85%;"><i><br />
</i></span>Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com1tag:blogger.com,1999:blog-6143023856127282817.post-46050421712779646652010-10-07T09:05:00.000+02:002010-10-07T16:09:09.265+02:00More on AX 6 from the Techincal Conference ProgrammeDuring the last couple of weeks the programme for the Dynamics AX 2011 Technical Conference has been disclosed gradually. You can head about the conference <a href="http://www.microsoft.com/dynamics/DynamicsAXTechnicalConference2011/">here</a>, which in itself is an interesting read.<div><br /></div><div>Much more interesting is the sample session content, which indicates in which direction Microsoft Dynamics AX is heading. I have written about the <a href="http://denizone.blogspot.com/2010/06/new-x-editor-in-action.html">X++ editor</a> and I posted <a href="http://denizone.blogspot.com/2010/01/summary-of-ax6.html">a general summary of AX 6 posts</a> I found around the web. Going through the sample <a href="http://www.microsoft.com/dynamics/DynamicsAXTechnicalConference2011/SessionContent.aspx#table">session content</a> further hints to new functionality coming to light, e.g. </div><div><br /></div><div>'the new granular metadata support for forms which reduces the upgrade impact, the new metadata driven approach to making the UI context-aware based on country region, the new managed host control which enables easier integration of WPF or WinForm controls, and the ease of use for controls supporting the enhanced user experience.'</div><div><br /></div><div>and a very interesting session which is described this way:</div><div>'Outline the programming models and developer tools in Microsoft Dynamics AX. Layout guidelines for choosing the right programming model, language (.NET or X++) and development tools (MorphX or Visual Studio) for categories of development.'</div><div><br /></div><div>along with several session covering an upgrade of a X++ report in a SSRS context indicating what I talked about earlier, i.e. that Microsoft is pushing .NET and SSRS as the defacto standard programming languages/platforms for future versions of Dynamics AX. </div><div><br /></div><div>To me, it appears that Project Green is arisen in another guise. So instead of having the same kernel for the whole Dynamics portfolio, Microsoft are moving the development tools and language to their .NET framework and Reporting Services.</div>Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-30893367591293514442010-06-01T09:59:00.000+02:002010-06-02T09:14:00.084+02:00The new X++ editor in actionDuring the last couple of months <a href="http://blogs.msdn.com/b/vnicolas/">Vincent</a> published more details on how the upcoming X++ editor will present itself.<div><br /></div><div>I previoulsy <a href="http://denizone.blogspot.com/2009/06/x-and-c-compared.html">discussed</a> some of the features which the community have called out for and it seems that Microsoft hear our prayers.</div><div><br /></div><div>In <a href="http://blogs.msdn.com/b/vnicolas/archive/2010/01/27/dynamics-ax6-the-new-x-editor-part-2.aspx">this post</a> Vincent shows some nice screenshots of the new IntelliSense, (which AxAssist provides for 3.0, 4.0 and 2009) and in <a href="http://www.dynamicsaxbr.com/wp-content/uploads/2010/05/editorDemo2.wmv">this video</a> you can see some of the new features in action.</div><div><br /></div><div><br /></div>Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com2tag:blogger.com,1999:blog-6143023856127282817.post-23889696270285716202010-01-11T11:51:00.000+01:002010-01-13T09:14:20.566+01:00Summary of AX6Just thought I would post some of the links I found regarding AX6:<br /><br />mpf has a series on the new AX Models, which will form the basis of deployment in future versions. The series consists of 4 parts, all of them well worth the read:<br /><br /><a href="http://blogs.msdn.com/mfp/archive/2009/09/23/introducing-ax-models-part-1.aspx">AX Models - Part 1 - Deploying models</a><br /><a href="http://blogs.msdn.com/mfp/archive/2009/09/29/introducing-ax-models-part-2.aspx">AX Models - Part 2 - Manifest and Signing</a><br /><a href="http://blogs.msdn.com/mfp/archive/2009/10/08/introducing-ax-models-part-3.aspx">AX Models - Part 3 - Multiple Models per Layer</a><br /><a href="http://blogs.msdn.com/mfp/archive/2009/11/25/ax-models-part-4-working-with-models-inside-morphx.aspx">AX Models - Part 4 - Working with Models Inside MorphX</a><br /><br />Furthermore, Vincent has some nice changes made to the Editor, which can be seen here:<br /><br /><a href="http://blogs.msdn.com/vnicolas/archive/2009/10/11/dynamics-ax6-the-new-x-editor.aspx">Dynamics AX6 - The new X++ editor</a><br /><br />It appears that some of the things I discussed in <a href="http://denizone.blogspot.com/2009/06/x-and-c-compared.html">x++ and C# compared</a> are being implemented, which is much needed and widely wished for, as can be told by the number of comments on Vincent's post.<br /><br />All in all, some nice improvements are bound for AX6 - when more details and posts appear around the net, I will add them to this post.<br /><br />If you know of posts which relate to AX 6 which I havn't got on my list, please feel free to add them in the comment field, and I will add them to the list.<br /><br />EDIT:<br />Having browsed through mpf's blog again - I found a few more posts on AX6:<br /><a href="http://blogs.msdn.com/mfp/archive/2009/04/02/ax6-sneak-preview-x-unit-test-improvements.aspx">AX6 sneak preview - X++ Unit test improvements</a><br /><a href="http://blogs.msdn.com/mfp/archive/2009/05/25/ax6-sneak-preview-elements-with-32-bit-ids.aspx">AX6 sneak preview - elements with 32 bit IDs</a><br /><a href="http://blogs.msdn.com/mfp/archive/2009/05/01/ax6-sneak-preview-sql-aod.aspx">AX6 sneak preview - SQL AOD</a><br /><br />Microsoft has also published their statement of direction, in which further functionality changes which will influence developers and their work are mentioned, so if you have access to PartnerSource it's a must read, as it gives an indication where AX is headed<br /><a href="https://mbs.microsoft.com/partnersource/marketing/statementofdirection/StatementofDirection.htm">Statement of Direction for Microsoft Dynamics AX</a>Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-34570305046654742962010-01-07T15:50:00.000+01:002010-01-07T20:18:22.979+01:00Preview to review of Microsoft Dynamics AX 2009 Programming: Getting Started<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.packtpub.com/microsoft-dynamics-ax-2009-programming?utm_source=daxguy.blogspot.com&utm_medium=bookrev&utm_content=blog&utm_campaign=mdb_001968"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 100px; height: 123px;" src="https://www.packtpub.com/images/100x123/1847197302.png" alt="" border="0" /></a><br />As I mentioned in my <a href="http://denizone.blogspot.com/2009/12/msdn-with-wiki-content-on-ax-2009.html">post</a> on the new feature of community content on MSDN, a new developer book has been published by <a href="http://www.packtpub.com/">Packt Publishing</a>, viz. <a href="http://www.packtpub.com/microsoft-dynamics-ax-2009-programming/book?utm_source=denizone.blogspot.com&utm_medium=bookrev&utm_content=blog&utm_campaign=mdb_002027">"Microsoft Dynamics AX 2009 Programming: Getting Started"</a> by Erlend Dalen.<br /><br />I have the privilege of writing a review of the book, but until I read the book from page to page, there is a sample chapter for you all the study titled <a href="http://www.packtpub.com/files/7306-microsoft-dynamics-ax-2009-programming-getting-started-sample-chapter-no-5-searching-for-data.pdf">"Searching for Data"</a>.<br />Having scanned the content of the book I am certain that it will provide the novice AX programmer with an easy accessable introduction to the programming language itself, its core syntax and structure along with step-by-step guides on how to e.g. create queries, as exemplified in the sample chapter which you can download from the link above.<br /><br />One thing that I can readily tell is that 'foo' and 'bar' examples have been substituted with a business-like scenario of a car rental, so you get the feel of real life examples while learning the basics.<br /><br />Enjoy the sample chapter and stay tuned for a full review.Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-75748838452284992402009-12-20T09:45:00.000+01:002009-12-24T08:21:44.847+01:00MSDN with wiki content on AX 2009There are many reasons why we bloggers blog, depending on the type of posts you post of course. Some rant about their personal relationsships, some about political stuff, and yet some about their work and / or hobbies. I fall into the last category - my posts are for myself ( so I don't forget stuff ) and for other AX people, much in the same way as <a href="http://dynamics-ax-live.blogspot.com/2009/12/jubilee.html">Willy</a>. When I started on AX development I knew only very little about programming in practice and very much about theory ( having a MA in Information Technology ). During my studies I buddied up with <a href="http://tinodidriksen.com/">Tino</a> at the <a href="http://visl.sdu.dk/">VISL-project</a> where I did the user-oriented studies and he did the programming ( his programming skills are still out of this world ).<br /><br />So when it got round to AX development, I was scared s**tless over the lack of how-to's, documentation and manuals for AX. Much of know-how seemed to be anchored in the people who somehow were in contact with the Damgaard company or former Damgaard employees and the most common respons to programming problems was "see if you can find similar functionality in the std. application, and steal with pride". However, many of the problems were not represented in the std. application though of such a general nature, that someone out there must have a solution or hint to how to solve it. And this is where blogs and forums enter the scene. There are a plethora of blogs and forum posts out there which deal with, suggest solutions to an almost ever increasing pool of good questions ( imo - there are no stupid questions ).<br />Two of the sites which helped me - and continue to do so - are <a href="http://www.axaptapedia.com/">Axaptapedia</a> and the <a href="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.axapta.programming">Axapta Programming site</a> and to a lesser extend <a href="http://msdn.microsoft.com/en-us/library/dd448627.aspx">MSDN</a>, and this blog is my way of repaying the AX community in the same way I was helped in my hours of need for specific problems, and general discussions on AX related stuff.<br /><br />Then I read the <a id="bp___v___bt___BlogTitle" class="headermaintitle" href="http://www.blogger.com/axsdkupdates/default.aspx">Microsoft Dynamics AX SDK Updates Blog</a> and as of Nov. 10th Community content ( or wiki content ) can be added to articles ( currently only SDK 2009 - but 4.0 is in the making ). Great days are ahead of us - more books on X++ development are published now than when I started, the most recent ( <a href="http://www.packtpub.com/microsoft-dynamics-ax-2009-programming/book">'Microsoft Dynamics AX 2009 Programming : Getting started' by Erlen Dalen </a>) appears to be an up-to-date of Steen Andreasen's <a href="http://www.steenandreasen.com/index.php?page=morphx-it">MorphX IT</a> ( which I still recommend to new AX developers ), but adding the possibilty of contributing to MSDN will increase it's overall value to AX developers out there. Kudos to the MS AX2009 SDK team which do a great job adding value to the documentation which was sparse to say the least until an increased effort from MS came about some years ago.<br /><br />Happy hacking,<br />SteffenMr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com1tag:blogger.com,1999:blog-6143023856127282817.post-34890076935166140882009-11-24T15:06:00.000+01:002009-11-24T15:27:22.978+01:00Pass by reference vs. pass by valueThis one is for myself, as I often forget how to implement pass by reference and pass by value, and what the difference is between them.<br />Pass by reference:<br /><br />Declare varible and set it :<br />SalesLine salesLine = salesLine4<br /><br />Down-side is if salesLine4 changes - so does salesLine<br /><br />Pass by value:<br /><br />SalesLine salesLine;<br />salesLine.data(salesLine4);<br /><br />Happy ax-hacking<br /><br />If salesLine4 changes - salesLine doesn'tMr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-55399377284214319942009-11-16T08:45:00.000+01:002009-11-16T08:58:47.991+01:00Deleting duplicate records in SQLRecently I needed to delete some duplicate records across several companies in AX. The table is self-contained so I needn't worry about delete actions or validation and as there are several companies I wanted to try and do it SQL-style. So this is what I came up with<br /><br />DELETE FROM [Table with Duplicates]<br />WHERE [Primary Key Field] IN<br />DELETE FROM [Table with Duplicates]<br />WHERE [Primary Key Field] IN<br />(<br />SELECT a.[Primary Key Field]<br />FROM [Table with Duplicates] a,<br />[Table with Duplicates] b<br /><br />WHERE a.[Primary Key Field]!= b.[Primary Key Field] -- i.e. Userkey<br />AND a.[Value to check]= b.[Value to Check] -- i.e. Lastname<br />AND a.[Second Value to Check] = b.[Second Value to Check] -- i.e. Firstname<br />AND a.[Primary Key Field] < b.[Primary Key Field] -- i.e. Userkey<br />)<br /><br />Respect to the original poster at <a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=6256">SQL Server forum. </a><br /><br />Remember always to backup your data and try the SQL-statement on a test table before you do anything on data which will be used in live environments.Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0tag:blogger.com,1999:blog-6143023856127282817.post-62723496090104907912009-09-02T08:57:00.000+02:002009-12-25T07:58:14.805+01:00The future of X++During the summmer Microsoft announced that<a href="https://mbs.microsoft.com/partnersource/newsevents/news/newsgeneral/ax_epuiframework.htm"> X++ based Web User Interface is discontinues in the next version of EP</a> which hardly comes as a surprise - <a href="http://daxdilip.blogspot.com/2009/08/x-web-ui-framework-in-enterprise-portal.html">Dilip</a> has some nice thoughs on the subject, and as he says this will allow developers to use Web 3.0 Framework.<br /><br />On Channel 9 - "<span id="ctl00_MainPlaceHolder_Starter_BodyLabel">Dynamics Program Manager Peter Villadsen and Software Developer Gustavo Plancarte teach us about a new tool they've developed that translates X++ byte code into MSIL. We learn a lot of history along the way and gain insights into the process of taking X++ into the .NET age.<br /><br /><p>Microsoft Dynamics features a proprietary language called X++ (basically a superset of Java, with some strong data primitives added) and a complete stack (compiler, interpreter and debugger) that goes with it. The new feature Peter and team have developed is a tool to generate managed code from the X++ intermediate language produced by the X++ compiler. This will have profound impact on the performance of the business applications written in X++, and it very clearly points to where they'll be going in the next few releases of Dynamics Ax."</p><p>Watch the video <a href="http://beta.channel9.msdn.com/posts/Charles/Peter-Villadsen-and-Gustavo-Plancarte-Inside-Ax-Translator-X-to-MSIL/">here</a>.</p><p>My thoughts on the subject - as I posted on Dilip's blog, is that X++ sooner than later will become the new COBOL; 'pure' X++ code and developers will never die completly due to the exsisting code-base already out there, which has to be maintained but when the full implementation of an intermedia langauge parser comes into exsistence .NET programmers will be able to code Dynamics AX customizations in e.g. Visual Studio. There are many blessings in X++ - Extended Data Types and it's function to name one - which does not exsist in other languages ( to my knowledge ) which newer generations of developers will probably not fanthom if the platform will be migrated completly to the .NET-platform.<br /></p><p>The progress begs the question - what are the advantages in the migration from X++ to .NET? Hard to tell for a X++ 'evangelist' but one thing could be the that Microsoft wish to consolidate NAV and AX development to the .NET platform through the intermediate language and thus open ERP development to the many exsisting .NET developers. This will perhaps position Microsoft better in the ERP market versus e.g. SAP if in a few years all the .NET programmers will be able to develop ERP solutions?<br /></p><p>The days where a X++ developer could get by with "only" SQL and X++ skills are soon to end. Already for ISVs to give customers the full advantage of their Dynamics AX 2009 investment, their competencies has to include .NET programmers and Business Intelligence people (<span id="ctl00_MainPlaceHolder_Starter_BodyLabel">e.g. </span>MDX, Reporting Services) on top of the traditional X++ and SQL teams. This will bring new challenges to ISVs and Dynamics AX team composition.</p><p><br /></p><p><br /></p><p><br /></p></span><h2><br /></h2>Mr. Denizehttp://www.blogger.com/profile/03374723335458096148noreply@blogger.com0