<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7473360666294928991</id><updated>2011-12-17T00:44:46.178-08:00</updated><category term='X++'/><category term='Application Integration Framework'/><category term='Editor Script'/><category term='.net'/><category term='EP'/><category term='Web Seminar'/><category term='AX 2009 SP1'/><category term='Sure Step 2010'/><category term='Ax 2009 Snap'/><category term='AX 2009'/><category term='web service'/><category term='AIF'/><title type='text'>Axapta programming blog</title><subtitle type='html'>Microsoft Dynamics Axapta, X++ ,EP</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-8889184770528975760</id><published>2010-09-06T22:43:00.000-07:00</published><updated>2010-09-06T23:15:50.477-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Enable User ID from SQL in AX 2009</title><content type='html'>Enabling&amp;nbsp;user Id in Axapta 3.0 from SQL was easy you need to update enable field to 1 only this but in AX 2009 if&amp;nbsp;coincidently&amp;nbsp;you have disable userID having&amp;nbsp;Administrator&amp;nbsp;access then&amp;nbsp;updating enable filed will not work few days back coincidently&amp;nbsp;i had done the same :) disabled my ID now being only user having administrator privledge i got stuck.&lt;br /&gt;&lt;br /&gt;Now to enable it from back end SQL you need to update enable flag to 1 and provide SID in UserInfo table to get SID you can user following job as provided in Screenshot in some other application in &amp;nbsp;but in same domain&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_EIbjOk8Ynb4/TIXPivkk-wI/AAAAAAAABUw/UNCxnw14nlQ/s1600/job.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://2.bp.blogspot.com/_EIbjOk8Ynb4/TIXPivkk-wI/AAAAAAAABUw/UNCxnw14nlQ/s400/job.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;then use following query in SQL&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;select * from USERINFO where &amp;nbsp;ID = 'secu'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;update USERINFO set ENABLE = 1 where ID = 'secu'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;update USERINFO set SID = 'S-1-5-21-2656439898-1577874530-2966910584-8962' where ID = 'secu'&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;all this to enable from SQL ...........&lt;/div&gt;&lt;div&gt;Cheerz.......&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-8889184770528975760?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/8889184770528975760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=8889184770528975760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8889184770528975760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8889184770528975760'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2010/09/enable-user-id-from-sql-in-ax-2009.html' title='Enable User ID from SQL in AX 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_EIbjOk8Ynb4/TIXPivkk-wI/AAAAAAAABUw/UNCxnw14nlQ/s72-c/job.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-5908283422239087278</id><published>2010-05-14T21:37:00.000-07:00</published><updated>2010-05-14T21:41:47.173-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Seminar'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Microsoft Dynamics Convergence 2010 Web Seminar Series</title><content type='html'>Take time to review these highly rated web seminars from the Convergence Virtual Partner Briefing. They will give you important updates on upgrades &amp;amp; renewals, how to compete effectively against NetSuite, Partner Development Centers, new MPN requirements and Partner Business Systems.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://mbs.microsoft.com/partnersource/newsevents/events/webseminars/Conv2010series"&gt;Microsoft Dynamics Convergence 2010 Web Seminar Series &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;*Require partner source login&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-5908283422239087278?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/5908283422239087278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=5908283422239087278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/5908283422239087278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/5908283422239087278'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2010/05/microsoft-dynamics-convergence-2010-web.html' title='Microsoft Dynamics Convergence 2010 Web Seminar Series'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-1903802202395166068</id><published>2010-05-11T05:03:00.000-07:00</published><updated>2010-05-11T05:10:42.300-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sure Step 2010'/><title type='text'>Sure Step 2010 Now Available</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;strong style="color: rgb(0, 0, 0);"&gt;Microsoft Dynamics Sure Step&lt;/strong&gt; &lt;span style="font-weight: bold;"&gt;2010&lt;/span&gt; is available for download now it provides a complete methodology—including project management discipline and field-tested best practices—plus user-friendly tools that enable you to more successfully deploy, migrate, configure, and upgrade.&lt;br /&gt;&lt;/span&gt;&lt;span id="Body"  style="font-size:85%;"&gt;&lt;a href="https://mbs.microsoft.com/partnersource/communities/consulting/resources/Consulting_SureStep_Methodology"&gt;Download and Install Sure Step&lt;/a&gt;* – NEW Sure Step 2010!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;" id="Body"&gt;For more information on installing and using Sure Step, read the &lt;a href="https://mbs.microsoft.com/partnersource/partneressentials/serviceplans/surestep/MSD_SureStepUserGuides.htm"&gt;Sure Step User Guide&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;*&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-size:85%;" &gt;&lt;span style="font-family: verdana;"&gt;*Requires Partner source access&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-1903802202395166068?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/1903802202395166068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=1903802202395166068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/1903802202395166068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/1903802202395166068'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2010/05/sure-step-2010-now-available.html' title='Sure Step 2010 Now Available'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-9214236480894665934</id><published>2010-04-26T21:16:00.000-07:00</published><updated>2010-04-26T21:23:34.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><category scheme='http://www.blogger.com/atom/ns#' term='Editor Script'/><title type='text'>Open any object from code editor to in AOT node(Editor script)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EIbjOk8Ynb4/S9ZmmTTQtHI/AAAAAAAABTs/p30nNKZHWBk/s1600/SSSSS.JPG"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 278px;" src="http://2.bp.blogspot.com/_EIbjOk8Ynb4/S9ZmmTTQtHI/AAAAAAAABTs/p30nNKZHWBk/s320/SSSSS.JPG" alt="" id="BLOGGER_PHOTO_ID_5464668006062797938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have posted a editor script method earlier that can open and browse table for code editor.using below code  developer will have ease of opening any object from AX code editor to AOT node&lt;br /&gt;&lt;br /&gt;TO USE THIS CODE COPY AND PASTE THE METHOD IN EDITOR SCRIPT CLASS&lt;br /&gt;&lt;br /&gt;void AX_OpenInAOT(Editor e)&lt;br /&gt;{&lt;br /&gt;  #AOT&lt;br /&gt;  TreeNode        treeNode;&lt;br /&gt;  FreeText        selectedLine;&lt;br /&gt;  str 1           curSymbol;&lt;br /&gt;  int             iCopyFrom;&lt;br /&gt;  int             iCopyTo;&lt;br /&gt;  Set             selectedNodesSet = new Set(Types::Class);&lt;br /&gt;  SetIterator     setIterator;&lt;br /&gt;  Map             map;&lt;br /&gt;&lt;br /&gt;  void add2Set(TreeNodePath _path)&lt;br /&gt;  {&lt;br /&gt;      ;&lt;br /&gt;      treeNode = TreeNode::findNode(_path + #AOTRootPath + selectedLine);&lt;br /&gt;      if (treeNode)&lt;br /&gt;          selectedNodesSet.add(treeNode);&lt;br /&gt;  }&lt;br /&gt;  ;&lt;br /&gt;  if (e.markMode() != MarkMode::NoMark &amp;amp;&amp;amp; e.selectionStartCol() != e.selectionEndCol())&lt;br /&gt;  {&lt;br /&gt;      selectedLine = strLRTrim(subStr(e.currentLine(), e.selectionStartCol(), e.selectionEndCol() - e.selectionStartCol()));&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;      selectedLine = e.currentLine();&lt;br /&gt;      for (iCopyFrom = e.columnNo()+1; iCopyFrom &gt;= 0; iCopyFrom--)&lt;br /&gt;      {&lt;br /&gt;          curSymbol = subStr(selectedLine, iCopyFrom, 1);&lt;br /&gt;          if (!strAlpha(curSymbol))&lt;br /&gt;              break;&lt;br /&gt;      }&lt;br /&gt;      for (iCopyTo = e.columnNo()+1; iCopyTo &lt;= strLen(selectedLine); iCopyTo++)         {             curSymbol = subStr(selectedLine, iCopyTo, 1);             if (!strAlpha(curSymbol))                 break;         }         selectedLine = (iCopyFrom &lt;&gt; 0)&lt;br /&gt;      {&lt;br /&gt;          setIterator = new SetIterator(selectedNodesSet);&lt;br /&gt;          setIterator.begin();&lt;br /&gt;          if (selectedNodesSet.elements() == 1)&lt;br /&gt;          {&lt;br /&gt;              treeNode = setIterator.value();&lt;br /&gt;          }&lt;br /&gt;          else&lt;br /&gt;          {&lt;br /&gt;              map = new Map(Types::String, Types::String);&lt;br /&gt;              while (setIterator.more ())&lt;br /&gt;              {&lt;br /&gt;                  treeNode = setIterator.value();&lt;br /&gt;                  map.insert(treeNode.treeNodePath(), treeNode.AOTparent().treeNodeName());&lt;br /&gt;                  setIterator.next();&lt;br /&gt;              }&lt;br /&gt;              treeNode = TreeNode::findNode(pickList(map, "Location", "Select element type"));&lt;br /&gt;          }&lt;br /&gt;          if (treeNode &amp;amp;&amp;amp; treeNode.treeNodePath() != TreeNode::rootNode().treeNodePath())&lt;br /&gt;          {&lt;br /&gt;              if (SysTreeNode::hasSource(treeNode))&lt;br /&gt;              {&lt;br /&gt;                  if (treeNode.AOTparent().treeNodePath() == #macrosPath &amp;amp;&amp;amp; subStr(e.currentLine(), e.selectionStartCol () - 1, 1) != '#')&lt;br /&gt;                      return;&lt;br /&gt;                  treeNode.AOTedit();&lt;br /&gt;              }&lt;br /&gt;              else&lt;br /&gt;              {&lt;br /&gt;                  treeNode.AOTnewWindow();&lt;br /&gt;              }&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-9214236480894665934?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/9214236480894665934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=9214236480894665934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/9214236480894665934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/9214236480894665934'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2010/04/open-any-object-from-code-editor-to-in.html' title='Open any object from code editor to in AOT node(Editor script)'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_EIbjOk8Ynb4/S9ZmmTTQtHI/AAAAAAAABTs/p30nNKZHWBk/s72-c/SSSSS.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-3570196624280785147</id><published>2010-04-26T00:26:00.000-07:00</published><updated>2010-04-26T00:34:38.872-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><title type='text'>String function class</title><content type='html'>While working on string function i have found an nice code on &lt;a href="http://greg.agiletortoise.com/2007/01/12/dynamix-ax-axapta-string-class/%20"&gt;Greg Pierce's blog&lt;/a&gt; extending existing AX string function functionality to construct newer method above post is in AX 3.0 and 4.0 below code is in AX 2009&lt;br /&gt;&lt;br /&gt;COPY PASTE THE CODE IN NOTE PAD AND SAVE AS XPO.&lt;br /&gt;&lt;br /&gt;Exportfile for AOT version 1.0 or later&lt;br /&gt;Formatversion: 1&lt;br /&gt;&lt;br /&gt;***Element: CLS&lt;br /&gt;&lt;br /&gt;; Microsoft Dynamics AX Class: String_Func unloaded&lt;br /&gt;; --------------------------------------------------------------------------------&lt;br /&gt;CLSVERSION 1&lt;br /&gt;&lt;br /&gt;CLASS #String_Func&lt;br /&gt;  Id 30211&lt;br /&gt;  PROPERTIES&lt;br /&gt;    Name                #String_Func&lt;br /&gt;    Extends             #&lt;br /&gt;    RunOn               #Called from&lt;br /&gt;  ENDPROPERTIES&lt;br /&gt;&lt;br /&gt;  METHODS&lt;br /&gt;    Version: 3&lt;br /&gt;    SOURCE #trimToLength&lt;br /&gt;      #/* trim a string to a length, optionally add ellipsis if string is truncated.*/&lt;br /&gt;      #public static str trimToLength( str _s, int _length, str _trimStr = "" )&lt;br /&gt;      #{&lt;br /&gt;      # str s;&lt;br /&gt;      #&lt;br /&gt;      # if( strlen( _s ) &lt; s =" strdel(" exceptions =" [" fl =" true;" s =" strltrim(" ix =" 1;" s1 =" strdel(" s1 =" strdel(" fl =" true;" s =" strpoke(" s =" strpoke(" fl =" false;" pos =" strscan(" fname =" strdel(" lastname =" strdel(" s =" _s," pos =" 1," loc ="  strscan(" loc ="=" c =" conins("&gt; 0 )&lt;br /&gt;      # {&lt;br /&gt;      #     _value = strdel( s, loc, strlen(s) - loc + 1 );&lt;br /&gt;      #&lt;br /&gt;      #     if( _value &amp;amp;&amp;amp; _value != _delimeter )&lt;br /&gt;      #     {&lt;br /&gt;      #         c = conins( c, pos, _value );&lt;br /&gt;      #         pos++;&lt;br /&gt;      #     }&lt;br /&gt;      #     s = strdel( s, 1, loc );&lt;br /&gt;      #&lt;br /&gt;      #     loc =  strscan( s, _delimeter, 1, strlen( s ) );&lt;br /&gt;      # }&lt;br /&gt;      # if( s &amp;amp;&amp;amp; s != _delimeter )&lt;br /&gt;      #     c = conins( c, pos, s );&lt;br /&gt;      #&lt;br /&gt;      # return c;&lt;br /&gt;      #&lt;br /&gt;      #}&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #rSplit&lt;br /&gt;      #/*  split item of right of string, trimmed at delimiter*/&lt;br /&gt;      #static str rSplit( str _s, str _delimeter )&lt;br /&gt;      #&lt;br /&gt;      #{&lt;br /&gt;      # str s = "";&lt;br /&gt;      # int pos;&lt;br /&gt;      # int len = strlen( _s );&lt;br /&gt;      #&lt;br /&gt;      # pos = strfind( _s, _delimeter, len, -len );&lt;br /&gt;      # s = strdel( _s, 0, pos );&lt;br /&gt;      #&lt;br /&gt;      #&lt;br /&gt;      # return s;&lt;br /&gt;      #}&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #replaceAll&lt;br /&gt;      #/*  replace the all occurances of "findStr" with "replStr" in "s"*/&lt;br /&gt;      #&lt;br /&gt;      #         static str replaceAll( str s, str findStr, str replStr )&lt;br /&gt;      #         {&lt;br /&gt;      #             int pos = strscan( s, findStr, 1, strlen( s ) );&lt;br /&gt;      #&lt;br /&gt;      #             while( pos &gt; 0 )&lt;br /&gt;      #&lt;br /&gt;      #             {&lt;br /&gt;      #                 s = strdel( s, pos, strlen( findStr ) );&lt;br /&gt;      #                 s = strins( s, replStr, pos );&lt;br /&gt;      #&lt;br /&gt;      #                 pos = strscan( s, findStr, pos + strlen( replStr ), strlen( s ) );&lt;br /&gt;      #&lt;br /&gt;      #             }&lt;br /&gt;      #&lt;br /&gt;      #             return s;&lt;br /&gt;      #         }&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #replace&lt;br /&gt;      #/*  replace the first occurance of "findStr" with "replStr" in "s"*/&lt;br /&gt;      #&lt;br /&gt;      #static str replace( str s, str findStr, str replStr )&lt;br /&gt;      #&lt;br /&gt;      #{&lt;br /&gt;      # int pos = strscan( s, findStr, 1, strlen( s ) );&lt;br /&gt;      #&lt;br /&gt;      # if( pos &gt; 0 )&lt;br /&gt;      # {&lt;br /&gt;      #     s = strdel( s, pos, strlen( findStr ) );&lt;br /&gt;      #     s = strins( s, replStr, pos );&lt;br /&gt;      #&lt;br /&gt;      # }&lt;br /&gt;      #&lt;br /&gt;      # return s;&lt;br /&gt;      #}&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #randomString&lt;br /&gt;      #/*  build a random string of length passed*/&lt;br /&gt;      #public static str randomString( int _length = 6 )&lt;br /&gt;      #{&lt;br /&gt;      #     str s;&lt;br /&gt;      #     int ix = 0;&lt;br /&gt;      #     str nxt;&lt;br /&gt;      #     RandomGenerate random = new RandomGenerate();&lt;br /&gt;      #     ;&lt;br /&gt;      #&lt;br /&gt;      #     for( ix = 0; ix &lt; nxt =" int2str(" random =" new" s = ""&gt; " + ( String_Func::beginsWith( "abcdef", "abc" ) ? "true" : "false" ) );&lt;br /&gt;      #&lt;br /&gt;      #&lt;br /&gt;      #     info( "String_Func::endsWith( \"abcdef\", \"def\" ) -&gt; " + ( String_Func::endsWith( "abcdef", "def" ) ? "true" : "false" ) );&lt;br /&gt;      #&lt;br /&gt;      #&lt;br /&gt;      #     info( "String_Func::fillString( 10, \"a\" ) -&gt; " + String_Func::fillString( 10, "a" ) );&lt;br /&gt;      #&lt;br /&gt;      #     info( "String_Func::replace( \"abc123abc123\", \"abc\", \"def\" ) -&gt; " + String_Func::replace( "abc123abc123", "abc", "def" ) );&lt;br /&gt;      #&lt;br /&gt;      #&lt;br /&gt;      #     info( "String_Func::replaceAll( \"abc123abc123\", \"abc\", \"def\" ) -&gt; " + String_Func::replaceAll( "abc123abc123", "abc", "def" ) );&lt;br /&gt;      #&lt;br /&gt;      #&lt;br /&gt;      #     info( "String_Func::randomString( 8 ) -&gt; " + String_Func::randomString() );&lt;br /&gt;      #&lt;br /&gt;      #     info( "String_Func::rSplit( \"abc|def\", \"|\" ) -&gt; " + String_Func::rSplit( "abc|def", "|" ) );&lt;br /&gt;      #&lt;br /&gt;      #&lt;br /&gt;      #}&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #fillString&lt;br /&gt;      #/*  build a repeating string of length ct&lt;br /&gt;      #             */&lt;br /&gt;      #&lt;br /&gt;      #public static str fillString( int ct, str char = " " )&lt;br /&gt;      #&lt;br /&gt;      #{&lt;br /&gt;      #    int ix;&lt;br /&gt;      #    str s = "";&lt;br /&gt;      #    ;&lt;br /&gt;      #&lt;br /&gt;      #    for( ix = 0; ix &lt; trim =" strdel(" trim ="="&gt; 0 )&lt;br /&gt;      #                 return true;&lt;br /&gt;      #&lt;br /&gt;      #             return false;&lt;br /&gt;      #&lt;br /&gt;      #         }&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #cleanString&lt;br /&gt;      #/*  use to do multiple string manipulations on the string passed, including case forcing and substitutions */&lt;br /&gt;      #&lt;br /&gt;      #         static str cleanString( str s, container forceLower, container forceUpper, container subst, boolean flFixDoubleSpaces = true )&lt;br /&gt;      #         {&lt;br /&gt;      #             int ix;&lt;br /&gt;      #&lt;br /&gt;      #&lt;br /&gt;      #             // FIX LOWER CASE LIST&lt;br /&gt;      #             for( ix = 1; ix &lt;= conlen( forceLower ); ix++ )&lt;br /&gt;      #             {&lt;br /&gt;      #                 s = String_Func::replaceAll( s, conpeek( forceLower, ix ), strlwr( conpeek( forceLower, ix ) ) );&lt;br /&gt;      #&lt;br /&gt;      #             }&lt;br /&gt;      #&lt;br /&gt;      #             // FIX UPPER CASE LIST&lt;br /&gt;      #             for( ix = 1; ix &lt;= conlen( forceUpper ); ix++ )&lt;br /&gt;      #             {&lt;br /&gt;      #                 s = String_Func::replaceAll( s, conpeek( forceUpper, ix ), strupr( conpeek( forceUpper, ix ) ) );&lt;br /&gt;      #&lt;br /&gt;      #             }&lt;br /&gt;      #&lt;br /&gt;      #             // DO SUBSTITUTIONS&lt;br /&gt;      #             for( ix = 1; ix &lt;= conlen( subst ); ix++ )&lt;br /&gt;      #             {&lt;br /&gt;      #                 s = String_Func::replaceAll( s, conpeek( conpeek( subst, ix ), 1 ), conpeek( conpeek( subst, ix ), 2 ) );&lt;br /&gt;      #&lt;br /&gt;      #             }&lt;br /&gt;      #&lt;br /&gt;      #             // FIX double spaces&lt;br /&gt;      #             if( flFixDoubleSpaces )&lt;br /&gt;      #             {&lt;br /&gt;      #                 while( String_Func::contains( s, "  " ) )&lt;br /&gt;      #                 {&lt;br /&gt;      #                     s = String_Func::replaceAll( s, "  ", " " );&lt;br /&gt;      #&lt;br /&gt;      #                 }&lt;br /&gt;      #             }&lt;br /&gt;      #&lt;br /&gt;      #             return s;&lt;br /&gt;      #&lt;br /&gt;      #         }&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #beginsWith&lt;br /&gt;      #/*return true if "findStr" is the inital character match for "s" */&lt;br /&gt;      #&lt;br /&gt;      #         static boolean beginsWith( str s, str findStr )&lt;br /&gt;      #&lt;br /&gt;      #         {&lt;br /&gt;      #             if( strscan( s, findStr, 1, strlen( s ) ) == 1 )&lt;br /&gt;      #                 return true;&lt;br /&gt;      #&lt;br /&gt;      #             return false;&lt;br /&gt;      #         }&lt;br /&gt;    ENDSOURCE&lt;br /&gt;    SOURCE #classDeclaration&lt;br /&gt;      #public class String_Func&lt;br /&gt;      #{&lt;br /&gt;      #}&lt;br /&gt;    ENDSOURCE&lt;br /&gt;  ENDMETHODS&lt;br /&gt;ENDCLASS&lt;br /&gt;&lt;br /&gt;***Element: END&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-3570196624280785147?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/3570196624280785147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=3570196624280785147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3570196624280785147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3570196624280785147'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2010/04/string-function-class.html' title='String function class'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-3168058993530961727</id><published>2010-02-23T21:46:00.001-08:00</published><updated>2010-02-23T22:06:37.177-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Create formated Excel reports from Ax 2009</title><content type='html'>Extracting Excel reports from Dynamics AX 2009 is easier task but client ask for formatted reports developers face a problem in generating a report directly in excel as per client requirement as: &lt;br /&gt;1. Borders&lt;br /&gt;2. interiors&lt;br /&gt;3. Bold/Italicheader&lt;br /&gt;4. image in excel&lt;br /&gt;5. Fonts&lt;br /&gt;6. Underline&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_EIbjOk8Ynb4/S4TBtV9VGNI/AAAAAAAABTk/-XN-dYEzqQQ/s1600-h/untitled.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 114px;" src="http://1.bp.blogspot.com/_EIbjOk8Ynb4/S4TBtV9VGNI/AAAAAAAABTk/-XN-dYEzqQQ/s320/untitled.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5441687234503055570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Below class can be used to generate the reports copy the code in text file and save in xpo import the file in  Dynamcis AX 2009&lt;br /&gt;&lt;br /&gt;Exportfile for AOT version 1.0 or later&lt;br /&gt;Formatversion: 1&lt;br /&gt;&lt;br /&gt;***Element: CLS&lt;br /&gt;&lt;br /&gt;; Microsoft Dynamics AX Class: ExcelReporter unloaded&lt;br /&gt;; --------------------------------------------------------------------------------&lt;br /&gt;  CLSVERSION 1&lt;br /&gt;  &lt;br /&gt;  CLASS #ExcelReporter&lt;br /&gt;    Id 30095&lt;br /&gt;    PROPERTIES&lt;br /&gt;      Name                #ExcelReporter&lt;br /&gt;      Extends             #&lt;br /&gt;      RunOn               #Called from&lt;br /&gt;    ENDPROPERTIES&lt;br /&gt;    &lt;br /&gt;    METHODS&lt;br /&gt;      Version: 3&lt;br /&gt;      SOURCE #classDeclaration&lt;br /&gt;        #class ExcelReporter&lt;br /&gt;        #{&lt;br /&gt;        #    COM     excelApplication;&lt;br /&gt;        #    COM     excelWorkBooks;&lt;br /&gt;        #    COM     excelWorkBook;&lt;br /&gt;        #    COM     excelWorkSheets;&lt;br /&gt;        #    COM     excelWorkSheet;&lt;br /&gt;        #    COM     excelCell;&lt;br /&gt;        #    COM     Module;&lt;br /&gt;        #    COM     range;&lt;br /&gt;        #    COM     Borders;&lt;br /&gt;        #    COM     Border;&lt;br /&gt;        #    COM     font;&lt;br /&gt;        #    COM     styles;&lt;br /&gt;        #    COM     style;&lt;br /&gt;        #    COM     interior;&lt;br /&gt;        #    COM     entireColumn;&lt;br /&gt;        #    COM     formula;&lt;br /&gt;        #&lt;br /&gt;        #    COM     AutoFilter;&lt;br /&gt;        #    COM     EnableAutoFilter ;&lt;br /&gt;        #&lt;br /&gt;        #    COM     excelCharts;&lt;br /&gt;        #    COM     excelChart;&lt;br /&gt;        #&lt;br /&gt;        #    COM     ActiveChart;&lt;br /&gt;        #    COM     ChartObjects;&lt;br /&gt;        #    COM     WrapText;&lt;br /&gt;        #    COM     ColoumnWidth;&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #    int lineNum;&lt;br /&gt;        #&lt;br /&gt;        #    Array arr;&lt;br /&gt;        #&lt;br /&gt;        #    str     sCode;&lt;br /&gt;        #    int     ColNameLen;&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #ColoumnWidth&lt;br /&gt;        #void ColoumnWidth(COM _range,int Value)&lt;br /&gt;        #{&lt;br /&gt;        #    ColoumnWidth = _range.ColoumnWidth(value);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #companyLogo&lt;br /&gt;        #display Bitmap companyLogo()&lt;br /&gt;        #{&lt;br /&gt;        #    CompanyInfo companyInfo = CompanyInfo::find();&lt;br /&gt;        #    ;&lt;br /&gt;        #&lt;br /&gt;        #    return CompanyImage::find(companyInfo.DataAreaId, companyInfo.TableId, companyInfo.RecId).Image;&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #getColChar&lt;br /&gt;        #str getColChar(int _num)&lt;br /&gt;        #{&lt;br /&gt;        #   int basePosition = 0;&lt;br /&gt;        #   int Counts;&lt;br /&gt;        #   str char;&lt;br /&gt;        #   int expo;&lt;br /&gt;        #   boolean flagfound;&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #   if(_num &gt; 16384)&lt;br /&gt;        #   throw error('Not Supported by the system');&lt;br /&gt;        #&lt;br /&gt;        #   ColNameLen = 1;&lt;br /&gt;        #   while(_num &gt; power(26,ColNameLen))&lt;br /&gt;        #   {&lt;br /&gt;        #        ColNameLen = ColNameLen + 1;&lt;br /&gt;        #   }&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #   while(!flagfound)&lt;br /&gt;        #   {&lt;br /&gt;        #    switch(_num)&lt;br /&gt;        #    {&lt;br /&gt;        #        case 1+basePosition :&lt;br /&gt;        #            char =  'A';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 2+basePosition :&lt;br /&gt;        #            char =  'B';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 3+basePosition :&lt;br /&gt;        #            char =  'C';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 4+basePosition :&lt;br /&gt;        #            char =  'D';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 5+basePosition :&lt;br /&gt;        #            char =  'E';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 6+basePosition :&lt;br /&gt;        #            char =  'F';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 7+basePosition :&lt;br /&gt;        #            char =  'G';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 8+basePosition :&lt;br /&gt;        #            char =  'H';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 9+basePosition :&lt;br /&gt;        #            char =  'I';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 10+basePosition :&lt;br /&gt;        #            char =  'J';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 11+basePosition :&lt;br /&gt;        #            char =  'K';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 12+basePosition :&lt;br /&gt;        #            char =  'L';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 13+basePosition :&lt;br /&gt;        #            char =  'M';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 14+basePosition :&lt;br /&gt;        #            char =  'N';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 15+basePosition :&lt;br /&gt;        #            char =  'O';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 16+basePosition :&lt;br /&gt;        #            char =  'P';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 17+basePosition :&lt;br /&gt;        #            char =  'Q';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 18+basePosition :&lt;br /&gt;        #            char =  'R';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 19+basePosition :&lt;br /&gt;        #            char =  'S';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 20+basePosition :&lt;br /&gt;        #            char =  'T';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 21+basePosition :&lt;br /&gt;        #            char =  'U';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 22+basePosition :&lt;br /&gt;        #            char =  'V';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 23+basePosition :&lt;br /&gt;        #            char =  'W';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 24+basePosition :&lt;br /&gt;        #            char =  'X';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 25+basePosition :&lt;br /&gt;        #            char =  'Y';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 26+basePosition :&lt;br /&gt;        #            char =  'Z';&lt;br /&gt;        #        break;&lt;br /&gt;        #    }&lt;br /&gt;        #    if(char)&lt;br /&gt;        #    flagfound = true;&lt;br /&gt;        #&lt;br /&gt;        #    if(basePosition)&lt;br /&gt;        #    counts = counts + 1;&lt;br /&gt;        #&lt;br /&gt;        #    basePosition = basePosition + 26;&lt;br /&gt;        #   }&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #   if(strlen(char) &lt; ColNameLen)&lt;br /&gt;        #   char =  this.getColChar(counts) + char;&lt;br /&gt;        #&lt;br /&gt;        #   return char;&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #/*    switch(_num)&lt;br /&gt;        #    {&lt;br /&gt;        #        case 1 :&lt;br /&gt;        #            return 'A';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 2 :&lt;br /&gt;        #            return 'B';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 3 :&lt;br /&gt;        #            return 'C';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 4 :&lt;br /&gt;        #            return 'D';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 5 :&lt;br /&gt;        #            return 'E';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 6 :&lt;br /&gt;        #            return 'F';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 7 :&lt;br /&gt;        #            return 'G';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 8 :&lt;br /&gt;        #            return 'H';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 9 :&lt;br /&gt;        #            return 'I';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 10 :&lt;br /&gt;        #            return 'J';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 11 :&lt;br /&gt;        #            return 'K';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 12 :&lt;br /&gt;        #            return 'L';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 13 :&lt;br /&gt;        #            return 'M';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 14 :&lt;br /&gt;        #            return 'N';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 15 :&lt;br /&gt;        #            return 'O';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 16 :&lt;br /&gt;        #            return 'P';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 17 :&lt;br /&gt;        #            return 'Q';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 18 :&lt;br /&gt;        #            return 'R';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 19 :&lt;br /&gt;        #            return 'S';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 20 :&lt;br /&gt;        #            return 'T';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 21 :&lt;br /&gt;        #            return 'U';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 22 :&lt;br /&gt;        #            return 'V';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 23 :&lt;br /&gt;        #            return 'W';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 24 :&lt;br /&gt;        #            return 'X';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 25 :&lt;br /&gt;        #            return 'Y';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #        case 26 :&lt;br /&gt;        #            return 'Z';&lt;br /&gt;        #        break;&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #    }&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;        #*/&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #insertHeader&lt;br /&gt;        #void insertHeader(Types _types,&lt;br /&gt;        #                  int   _idx,&lt;br /&gt;        #                  str   _xlRowCol,&lt;br /&gt;        #                  str   _value)&lt;br /&gt;        #{&lt;br /&gt;        #     arr    = new Array(_types);&lt;br /&gt;        #     arr.value(_idx,_value);&lt;br /&gt;        #     range  = excelWorkSheet.Range(_xlRowCol);&lt;br /&gt;        #     range.value2(COMVariant::createFromArray(arr));&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #insertImage&lt;br /&gt;        #void insertImage(int   _idx,&lt;br /&gt;        #                 str   _xlRowCol,&lt;br /&gt;        #                 Bitmap   _value)&lt;br /&gt;        #{&lt;br /&gt;        #     ;&lt;br /&gt;        #     range  = excelWorkSheet.Range(_xlRowCol);&lt;br /&gt;        #     range.value(_value);&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #new&lt;br /&gt;        #void new()&lt;br /&gt;        #{&lt;br /&gt;        #    ;&lt;br /&gt;        #    excelApplication    = new COM("excel.application");&lt;br /&gt;        #    excelWorkBooks      = excelApplication.workBooks();&lt;br /&gt;        #    excelWorkBook       = excelWorkBooks.add();&lt;br /&gt;        #    excelWorkSheets     = excelWorkBook.worksheets();&lt;br /&gt;        #    excelWorkSheet      = excelWorkSheets.add();&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #variant2COM&lt;br /&gt;        #void variant2COM(COM _COM, COMVariant _variant)&lt;br /&gt;        #&lt;br /&gt;        #    {&lt;br /&gt;        #&lt;br /&gt;        #        _COM.attach(_variant.iDispatch());&lt;br /&gt;        #&lt;br /&gt;        #    }&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlAllBorder&lt;br /&gt;        #void xlAllBorder(COM _range,int _weight)&lt;br /&gt;        #{&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(2);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(1);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(8);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(9);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlAutoFilter&lt;br /&gt;        #void xlAutoFilter(str       _xlRowCol,&lt;br /&gt;        #                  boolean   _Filter)&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #{&lt;br /&gt;        #   ;&lt;br /&gt;        #      range = excelWorkSheet.Range(_xlRowCol);&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlAutoFit&lt;br /&gt;        #void xlAutoFit(COM _range)&lt;br /&gt;        #{&lt;br /&gt;        #    entireColumn = _range.entireColumn();&lt;br /&gt;        #    entirecolumn.autofit();&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlBotBorder&lt;br /&gt;        #void xlBotBorder(COM _range)&lt;br /&gt;        #{&lt;br /&gt;        #        Borders = _range.Borders();&lt;br /&gt;        #        Border  = Borders.Item(9);&lt;br /&gt;        #        Border.lineStyle(7);&lt;br /&gt;        #        Border.Weight(3);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlBoxBorder&lt;br /&gt;        #void xlBoxBorder(str _row,str _coll,int _weight)&lt;br /&gt;        #{&lt;br /&gt;        #            int rowNum  = any2int(strdel(_row,1,1));&lt;br /&gt;        #            int collNum = any2int(strdel(_coll,1,1));&lt;br /&gt;        #            str row     = strdel(_row,2,strlen(_row));&lt;br /&gt;        #            str coll    = strdel(_coll,2,strlen(_coll));&lt;br /&gt;        #&lt;br /&gt;        #            Com     _range;&lt;br /&gt;        #            // top&lt;br /&gt;        #            _range  = excelWorkSheet.Range(strfmt("%1%2",row,rownum),strfmt("%1%2",coll,rownum));&lt;br /&gt;        #&lt;br /&gt;        #            Borders = _range.Borders();&lt;br /&gt;        #            Border  = Borders.Item(8);&lt;br /&gt;        #            Border.lineStyle(7);&lt;br /&gt;        #            Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #            Borders = null;&lt;br /&gt;        #            border  = null;&lt;br /&gt;        #            _range =  null;&lt;br /&gt;        #&lt;br /&gt;        #            //  left&lt;br /&gt;        #            _range  = excelWorkSheet.Range(strfmt("%1%2",row,rownum),strfmt("%1%2",row,collnum));&lt;br /&gt;        #&lt;br /&gt;        #            Borders = _range.Borders();&lt;br /&gt;        #            Border  = Borders.Item(1);&lt;br /&gt;        #            Border.lineStyle(7);&lt;br /&gt;        #            Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #            Borders = null;&lt;br /&gt;        #            border  = null;&lt;br /&gt;        #            _range =  null;&lt;br /&gt;        #&lt;br /&gt;        #            //  right&lt;br /&gt;        #            _range  = excelWorkSheet.Range(strfmt("%1%2",num2char(char2num(coll,1)+1),rownum),strfmt("%1%2",num2char(char2num(coll,1)+1),collnum));&lt;br /&gt;        #&lt;br /&gt;        #            Borders = _range.Borders();&lt;br /&gt;        #            Border  = Borders.Item(1);&lt;br /&gt;        #            Border.lineStyle(7);&lt;br /&gt;        #            Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #            Borders = null;&lt;br /&gt;        #            border  = null;&lt;br /&gt;        #            _range =  null;&lt;br /&gt;        #&lt;br /&gt;        #            //  bottom&lt;br /&gt;        #            _range  = excelWorkSheet.Range(strfmt("%1%2",row,collnum+1),strfmt("%1%2",coll,collnum+1));&lt;br /&gt;        #&lt;br /&gt;        #            Borders = _range.Borders();&lt;br /&gt;        #            Border  = Borders.Item(8);&lt;br /&gt;        #            Border.lineStyle(7);&lt;br /&gt;        #            Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #            Borders = null;&lt;br /&gt;        #            border  = null;&lt;br /&gt;        #            _range =  null;&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlChart&lt;br /&gt;        #void xlChart(str       _xlRowCol,&lt;br /&gt;        #             str    _Text)&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #{&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlClose&lt;br /&gt;        #void xlClose()&lt;br /&gt;        #{&lt;br /&gt;        #    excelApplication.quit();&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlCreateHeader&lt;br /&gt;        #Array xlCreateHeader(Array _arr,&lt;br /&gt;        #                     int   _idx,&lt;br /&gt;        #                     str   _value)&lt;br /&gt;        #{&lt;br /&gt;        #      _arr.value(_idx,_value);&lt;br /&gt;        #     return _arr;&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlFormatCell&lt;br /&gt;        #void xlFormatCell(str       _xlRowCol,&lt;br /&gt;        #                  int       _fontSize,&lt;br /&gt;        #                  boolean   _bold,&lt;br /&gt;        #                  boolean   _italic,&lt;br /&gt;        #                  boolean    _strikethrough,&lt;br /&gt;        #                  int       _underline,&lt;br /&gt;        #                  boolean    _Subscript,&lt;br /&gt;        #                  boolean    _Superscript,&lt;br /&gt;        #                  str        _fontname)&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #{&lt;br /&gt;        #      ;&lt;br /&gt;        #      range = excelWorkSheet.Range(_xlRowCol);&lt;br /&gt;        #      font = range.Font();&lt;br /&gt;        #      font.Size(_fontSize);&lt;br /&gt;        #      font.bold(_bold);&lt;br /&gt;        #      font.italic(_italic);&lt;br /&gt;        #      font.underline(_underline);&lt;br /&gt;        #      font.strikethrough(_strikethrough);&lt;br /&gt;        #      font.Subscript(_Subscript);&lt;br /&gt;        #      font.Superscript(_Superscript);&lt;br /&gt;        #      font.name(_fontname);&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlFormula&lt;br /&gt;        #void xlFormula(str       _xlRowCol)&lt;br /&gt;        #{&lt;br /&gt;        #      ;&lt;br /&gt;        #      range = excelWorkSheet.Range(_xlRowCol);&lt;br /&gt;        #&lt;br /&gt;        #      formula   =   range.formula();&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlFormulan&lt;br /&gt;        #COM xlFormulan()&lt;br /&gt;        #{&lt;br /&gt;        #      ;&lt;br /&gt;        #      formula   =   range.formula();&lt;br /&gt;        #    return formula;&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlGridBorder&lt;br /&gt;        #void xlGridBorder(COM _range,int _weight)&lt;br /&gt;        #{&lt;br /&gt;        #        Borders = _range.Borders();&lt;br /&gt;        #        Border  = Borders.Item(2);&lt;br /&gt;        #        Border.lineStyle(7);&lt;br /&gt;        #        Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #        Borders = null;&lt;br /&gt;        #        border  = null;&lt;br /&gt;        #&lt;br /&gt;        #        Borders = _range.Borders();&lt;br /&gt;        #        Border  = Borders.Item(1);&lt;br /&gt;        #        Border.lineStyle(7);&lt;br /&gt;        #        Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #        Borders = null;&lt;br /&gt;        #        border  = null;&lt;br /&gt;        #&lt;br /&gt;        #        Borders = _range.Borders();&lt;br /&gt;        #        Border  = Borders.Item(8);&lt;br /&gt;        #        Border.lineStyle(7);&lt;br /&gt;        #        Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #        Borders = null;&lt;br /&gt;        #        border  = null;&lt;br /&gt;        #&lt;br /&gt;        #        Borders = _range.Borders();&lt;br /&gt;        #        Border  = Borders.Item(9);&lt;br /&gt;        #        Border.lineStyle(7);&lt;br /&gt;        #        Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #        Borders = null;&lt;br /&gt;        #        border  = null;&lt;br /&gt;        #&lt;br /&gt;        #        Borders = _range.Borders();&lt;br /&gt;        #        Border  = Borders.Item(3);&lt;br /&gt;        #        Border.lineStyle(7);&lt;br /&gt;        #        Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlHorizontaltBorder&lt;br /&gt;        #void xlHorizontaltBorder(str _row,str _coll,int _weight)&lt;br /&gt;        #{&lt;br /&gt;        #    int rowNum  = any2int(strdel(_row,1,1));&lt;br /&gt;        #    int collNum = any2int(strdel(_coll,1,1));&lt;br /&gt;        #    str row     = strdel(_row,2,strlen(_row));&lt;br /&gt;        #    str coll    = strdel(_coll,2,strlen(_coll));&lt;br /&gt;        #&lt;br /&gt;        #    Com     _range;&lt;br /&gt;        #    // top&lt;br /&gt;        #    _range  = excelWorkSheet.Range(strfmt("%1%2",row,rownum),strfmt("%1%2",coll,rownum));&lt;br /&gt;        #&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(8);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #   _range =  null;&lt;br /&gt;        #&lt;br /&gt;        #    //  left&lt;br /&gt;        #    _range  = excelWorkSheet.Range(strfmt("%1%2",row,rownum),strfmt("%1%2",row,collnum));&lt;br /&gt;        #&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(1);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #    _range =  null;&lt;br /&gt;        #&lt;br /&gt;        #    //  right&lt;br /&gt;        #    _range  = excelWorkSheet.Range(strfmt("%1%2",num2char(char2num(coll,1)+1),rownum),strfmt("%1%2",num2char(char2num(coll,1)+1),collnum));&lt;br /&gt;        #&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(1);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #    _range =  null;&lt;br /&gt;        #&lt;br /&gt;        #    //  bottom&lt;br /&gt;        #    _range  = excelWorkSheet.Range(strfmt("%1%2",row,collnum+1),strfmt("%1%2",coll,collnum+1));&lt;br /&gt;        #&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(8);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #    _range =  null;&lt;br /&gt;        #&lt;br /&gt;        #    _range  = excelWorkSheet.Range(strfmt("%1%2",row,rownum),strfmt("%1%2",coll,collnum));&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(8);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #&lt;br /&gt;        #    _range  = excelWorkSheet.Range(strfmt("%1%2",row,rownum),strfmt("%1%2",coll,collnum));&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(9);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #    Borders = null;&lt;br /&gt;        #    border  = null;&lt;br /&gt;        #&lt;br /&gt;        #    _range  = excelWorkSheet.Range(strfmt("%1%2",row,rownum),strfmt("%1%2",coll,collnum));&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(3);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(_weight);&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlInsert&lt;br /&gt;        #void xlInsert(Types     _types,&lt;br /&gt;        #              int       _row,&lt;br /&gt;        #              int       _col,&lt;br /&gt;        #              str       _value)&lt;br /&gt;        #{&lt;br /&gt;        #    excelcell = excelworksheet.cells();&lt;br /&gt;        #    this.variant2COM(excelcell, excelcell.item(_row,_col));&lt;br /&gt;        #    excelcell.value2(_value);&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlInsertArr&lt;br /&gt;        #void xlInsertArr(Array     _arr,&lt;br /&gt;        #                 str       _xlRowCol)&lt;br /&gt;        #{&lt;br /&gt;        #     ;&lt;br /&gt;        #     range  = excelWorkSheet.Range(_xlRowCol);&lt;br /&gt;        #     range.value2(COMVariant::createFromArray(_arr));&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlInsertss&lt;br /&gt;        #void xlInsertss(Types     _types,&lt;br /&gt;        #              int       _row,&lt;br /&gt;        #              int       _col,&lt;br /&gt;        #              str       _value)&lt;br /&gt;        #{&lt;br /&gt;        #     str xlcol =  this.getColChar(_col);;&lt;br /&gt;        #     arr    = new Array(_types);&lt;br /&gt;        #     arr.value(1,_value);&lt;br /&gt;        #     range  = excelWorkSheet.Range(strfmt("%1%2",xlcol,_row));&lt;br /&gt;        #     range.value2(COMVariant::createFromArray(arr));&lt;br /&gt;        #}&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;        #&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlInsertTblArr&lt;br /&gt;        #Array  xlInsertTblArr(Common    _common,&lt;br /&gt;        #                     int       _refFieldId,&lt;br /&gt;        #                     Array     _arr,&lt;br /&gt;        #                     int       _idx)&lt;br /&gt;        #{&lt;br /&gt;        #   dictIndex  dictIndex ;&lt;br /&gt;        #   ;&lt;br /&gt;        #&lt;br /&gt;        #   dictIndex   = new DictIndex(_common.tableId,_refFieldId);&lt;br /&gt;        #   _arr.value(_idx,_common.(dictIndex.field(_refFieldId)));&lt;br /&gt;        #&lt;br /&gt;        #   return _arr;&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlInterior&lt;br /&gt;        #void xlInterior(str       _xlRowCol,&lt;br /&gt;        #                int      _Index)&lt;br /&gt;        #{&lt;br /&gt;        #&lt;br /&gt;        #     ;&lt;br /&gt;        #     range = excelWorkSheet.Range(_xlRowCol);&lt;br /&gt;        #     interior   =   range.interior();&lt;br /&gt;        #&lt;br /&gt;        #     interior.colorIndex(_Index);&lt;br /&gt;        #&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlLeftBorder&lt;br /&gt;        #void xlLeftBorder(COM _range)&lt;br /&gt;        #{&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(2);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(3);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlRange&lt;br /&gt;        #com xlRange(str _row, str _col)&lt;br /&gt;        #{&lt;br /&gt;        #    ;&lt;br /&gt;        #    range  = excelWorkSheet.Range(_row,_col);&lt;br /&gt;        #    return range;&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlrightBorder&lt;br /&gt;        #void xlrightBorder(COM _range)&lt;br /&gt;        #{&lt;br /&gt;        #    Borders = _range.Borders();&lt;br /&gt;        #    Border  = Borders.Item(1);&lt;br /&gt;        #    Border.lineStyle(7);&lt;br /&gt;        #    Border.Weight(3);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlShow&lt;br /&gt;        #void xlShow()&lt;br /&gt;        #{&lt;br /&gt;        #    excelApplication.visible(true);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlStyle&lt;br /&gt;        #void xlStyle(Com _range,Int _color,str _styleName)&lt;br /&gt;        #{&lt;br /&gt;        #    styles =  null;&lt;br /&gt;        #    style  = null;&lt;br /&gt;        #    interior = null;&lt;br /&gt;        #    styles      = excelWorkBook.styles();&lt;br /&gt;        #    style       = styles.add(_styleName);&lt;br /&gt;        #    interior    = style.interior();&lt;br /&gt;        #    interior.color(_color);//WinApi::RGB2int(246, 233, 206));&lt;br /&gt;        #    _range.style(_styleName);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlTopBorder&lt;br /&gt;        #void xlTopBorder(COM _range)&lt;br /&gt;        #{&lt;br /&gt;        #        Borders = _range.Borders();&lt;br /&gt;        #        Border  = Borders.Item(8);&lt;br /&gt;        #        Border.lineStyle(7);&lt;br /&gt;        #        Border.Weight(3);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlWorkSheetName&lt;br /&gt;        #void xlWorkSheetName(str _name)&lt;br /&gt;        #{&lt;br /&gt;        #    excelWorkSheet.name(_name);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;      SOURCE #xlWrap&lt;br /&gt;        #void xlWrap(COM _range)&lt;br /&gt;        #{&lt;br /&gt;        #    wrapText = _range.wraptext(true);&lt;br /&gt;        #}&lt;br /&gt;      ENDSOURCE&lt;br /&gt;    ENDMETHODS&lt;br /&gt;  ENDCLASS&lt;br /&gt;&lt;br /&gt;***Element: END&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-3168058993530961727?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/3168058993530961727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=3168058993530961727' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3168058993530961727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3168058993530961727'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2010/02/create-formated-excel-reports-from-ax.html' title='Create formated Excel reports from Ax 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_EIbjOk8Ynb4/S4TBtV9VGNI/AAAAAAAABTk/-XN-dYEzqQQ/s72-c/untitled.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-6596517376748039642</id><published>2010-02-23T21:42:00.000-08:00</published><updated>2010-02-23T21:45:53.435-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>X++ Code to restrict user login multiple times in ax2009</title><content type='html'>Copy Paste the Following Code in startupPost method of info class in AOT&lt;br /&gt;&lt;br /&gt;void startupPost()&lt;br /&gt;{&lt;br /&gt;// To restrict user login form second login&lt;br /&gt;    xSession            session;&lt;br /&gt;    SysClientSessions   SysClientSessions;&lt;br /&gt;    UserId              currentUserId;&lt;br /&gt;    int                 counter;&lt;br /&gt;&lt;br /&gt;    ;&lt;br /&gt;&lt;br /&gt;    currentUserId = curUserId();&lt;br /&gt;&lt;br /&gt; if(currentUserId!="Admin")// Allow Admin User to login multiple time&lt;br /&gt;  {&lt;br /&gt;   while select SysClientSessions&lt;br /&gt;    where SysClientSessions.userId == currentUserId &amp;&amp;&lt;br /&gt;          SysClientSessions.Status == 1 // 1 : Login 0 : Logout&lt;br /&gt;    {&lt;br /&gt;        session = new xSession(SysClientSessions.SessionId, true);&lt;br /&gt;        if (session &amp;&amp; session.userId())&lt;br /&gt;        {&lt;br /&gt;            counter++;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if(counter&gt;=2)&lt;br /&gt;      {&lt;br /&gt;        Box::stop("Already Logged-in : The same user id can't log in twice.");&lt;br /&gt;        infolog.shutDown(true);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please take backup of your application before copying code&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-6596517376748039642?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/6596517376748039642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=6596517376748039642' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/6596517376748039642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/6596517376748039642'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2010/02/x-code-to-restrict-user-login-multiple.html' title='X++ Code to restrict user login multiple times in ax2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-3650018554770578843</id><published>2008-12-01T03:02:00.000-08:00</published><updated>2008-12-01T03:07:15.373-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Integration Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='AIF'/><title type='text'>Microsoft Dynamics AX 2009 Application Integration Framework(AIF) Benchmark</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Microsoft Dynamics AX 2009 Application Integration Framework Benchmark&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Microsoft Dynamics AX Application Integration Framework Benchmark exercises Core Sales Order processing thru Invoicing and GL Creation thru posting with high degree of scale&lt;br /&gt;&lt;br /&gt;In June 2008, Microsoft Corporation conducted the Microsoft Dynamics® AX 2009 Application Integration Framework (AIF) benchmark to measure the performance and scalability characteristics of Microsoft Dynamics® AX 2009 in a simulated distribution scenario.  This benchmark exercised core Accounts Receivables scenario involving sales order creation thru AIF and invoicing of sales orders thru batch jobs.  It also exercised core General Ledger scenario involving journal creation thru AIF and posting of journals thru batch jobs. The scenarios generated load on Application Object Server (AOS)—in this benchmark, each AOS instance was hosted on a separate server.  In a Microsoft Dynamics® AX system, the AOS processes business logic in communication with clients and the database; the database server provides data to the AOS.&lt;br /&gt;&lt;br /&gt;For more information and download please check the following link &lt;a href="https://mbs.microsoft.com/partnersource/deployment/documentation/benchmarks/AX2009AIFBenchmark"&gt;AX 2009 Application Integration Framework Benchmark&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-3650018554770578843?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/3650018554770578843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=3650018554770578843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3650018554770578843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3650018554770578843'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/12/microsoft-dynamics-ax-2009-application.html' title='Microsoft Dynamics AX 2009 Application Integration Framework(AIF) Benchmark'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-3466224212112499708</id><published>2008-12-01T02:38:00.000-08:00</published><updated>2008-12-01T02:56:46.557-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Ax 2009 Snap'/><title type='text'>Microsoft Dynamics Snap sample applications for Microsoft Dynamics AX 2009</title><content type='html'>Release of Microsoft Dynamics Snap sample applications for use with Microsoft Dynamics AX 2009&lt;br /&gt;&lt;br /&gt;These samples show the potential of integrating the 2007 Microsoft® Office system with Microsoft Dynamics® AX by providing functioning end-to-end capabilities in source code form. Partners and customers can build on these samples and use the techniques they employ to build solutions that access the data and processes in Microsoft Dynamics AX from the productivity and collaboration tools of the Microsoft Office system. Two snap applications are now available with Microsoft Dynamics AX 2009:&lt;br /&gt;&lt;br /&gt;This release contains the following snap-in applications for use with Microsoft Dynamics AX 2009 and Microsoft Office 2007. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Offline Expense &lt;/span&gt;- This snap-in enables expenses to be entered in Excel while disconnected from the corporate network, and then posted to Dynamics AX at a later time. This snap-in uses WCF-based services and LINQ to retrieve data from Dynamics AX, and uses the Application Integration Framework, or AIF to send business documents to Dynamics AX.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Business Data Lookup (BDL)&lt;/span&gt; - This snap-in enables information workers to access data from Dynamics AX from within Excel, Word and Outlook. This snap-in is an upgrade of the BDL snap-in that was distributed with Microsoft Dynamics AX 4.0. &lt;br /&gt;&lt;br /&gt;These applications require .Net 3.5, Microsoft Office 2007, Microsoft Visual Studio 2008 and Microsoft Dynamics AX 2009. Each snap-in contains a document describing the basic architecture, functional footprint, and deployment steps for exploring the sample code. &lt;br /&gt;&lt;br /&gt;For more information and download please check the following link &lt;a href="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=axsnap&amp;DownloadId=46286"&gt;Microsoft Dynamics Snap for Dynamics AX 2009&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-3466224212112499708?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/3466224212112499708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=3466224212112499708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3466224212112499708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3466224212112499708'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/12/microsoft-dynamics-snap-sample.html' title='Microsoft Dynamics Snap sample applications for Microsoft Dynamics AX 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-2439864300453195601</id><published>2008-12-01T02:19:00.000-08:00</published><updated>2008-12-01T02:21:05.434-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009 SP1'/><title type='text'>Microsoft Dynamics AX 2009 Service Pack 1</title><content type='html'>&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Verdana; font-size: 12px; line-height: 14px; "&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;During EMEA Convergence, the release of Microsoft Dynamics AX 2009 SP1 was announced. You can see the announcement of SP1 availability on the &lt;a href="https://mbs.microsoft.com/partnersource/solutions/AX/" style="text-decoration: none; color: rgb(120, 121, 138); "&gt;Microsoft Dynamics AX Landing Page on PartnerSource&lt;/a&gt;.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;Similarly, you can see the announcement on the &lt;a href="https://mbs.microsoft.com/customersource/default_axapta.htm" style="text-decoration: none; color: rgb(120, 121, 138); "&gt;Microsoft Dynamics AX Landing Page on CustomerSource&lt;/a&gt;.&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;With the download of Microsoft Dynamics AX 2009 SP1 the following materials will be made available:&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;– Service Pack 1 Downloadable Package&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;– Downloadable Package for Updated Help Files*&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;– Release Notes (List of known issues)&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;– Updated What’s New Document – A section on SP1 is added&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;- Service Pack 1 Install Guide&lt;/p&gt;&lt;p style="margin-top: 1em; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; "&gt;For further details on SP1 please take the links to PartnerSource and CustomerSource announcements.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-2439864300453195601?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/2439864300453195601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=2439864300453195601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/2439864300453195601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/2439864300453195601'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/12/microsoft-dynamics-ax-2009-service-pack.html' title='Microsoft Dynamics AX 2009 Service Pack 1'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-3782412655610028956</id><published>2008-08-10T22:28:00.000-07:00</published><updated>2008-08-10T22:40:29.441-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Rapid Configuration Tool for AX 2009</title><content type='html'>The new release of Rapid Configuration Tool (RCT) for Dynamics AX2009 is now available for download at &lt;a href="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/AX2009RCT.htm"&gt;Partner Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Rapid Configuration Tool is integrated into Microsoft Dynamics® AX and provides key assistance to partners and customers during implementation by providing project management features, easier configuration access, communication support and documentation on how to successfully configure Microsoft Dynamics® AX.&lt;br /&gt;&lt;br /&gt;Click &lt;a href="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/AX2009RCT.htm"&gt;here&lt;/a&gt; to download. (Requires Partnersource Login Access)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-3782412655610028956?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/3782412655610028956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=3782412655610028956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3782412655610028956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/3782412655610028956'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/08/rapid-configuration-tool-for-ax-2009.html' title='Rapid Configuration Tool for AX 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-33898454387638905</id><published>2008-07-28T00:32:00.000-07:00</published><updated>2008-07-28T01:16:34.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Upgrade from AX 3.0 , AX4.0 to AX 2009</title><content type='html'>&lt;p&gt;&lt;strong&gt;The steps below provide a high-level overview of the tasks that you must complete to upgrade from Microsoft Dynamics AX 3.0 to Microsoft Dynamics AX 2009.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;•Back up your existing database and application files. &lt;/p&gt;&lt;p&gt;•Import two .xpo files from the installation media to assist with data upgrade.&lt;/p&gt;&lt;p&gt;• UpgradeColumnList.xpo, for 32-bit to 64-bit RecId field conversion.&lt;/p&gt;&lt;p&gt;• LeftJustified.xpo, for removing any trailing spaces from fields.&lt;/p&gt;&lt;p&gt;* Note: To help improve performance, you can apply the LeftJustified.xpo on the database that you create in step 4 after you’ve used the Microsoft Dynamics AX DB Upgrade Preparation tool but before you start the Microsoft Dynamics AX 2009 AOS.&lt;/p&gt;&lt;p&gt;•(Optional) To help improve performance, remove all user data and logs of Microsoft Dynamics AX 3.0. For example, clean up the SysDatabaseLog table. &lt;/p&gt;&lt;p&gt;•Create an empty database for Microsoft Dynamics AX 2009 in SQL Server 2005. &lt;/p&gt;&lt;p&gt;•(Optional) To help improve performance, set initial data and log file sizes so that they don’t increase while you perform the data upgrade process. &lt;/p&gt;&lt;p&gt;•(Optional) To help improve performance, set the recovery model to Simple for the Microsoft Dynamics AX 2009 Database. &lt;/p&gt;&lt;p&gt;•Run AXDBUpgrade.exe (The Microsoft Dynamics AX DB Upgrade Preparation tool). Note: To help improve performance, you can run this tool in Multithreaded mode. For example, to run this tool in 10 threads, enter AxDbUpgrade.exe P/10 at a command prompt. &lt;/p&gt;&lt;p&gt;•(Optional) Apply the LeftJustify file imported in step 2 to the Microsoft Dynamics AX 2009 database created in step 4.&lt;/p&gt;&lt;p&gt;•Back up your Microsoft Dynamics AX database. Your database is ready to be upgraded. •Run the Microsoft Dynamics AX 2009 Setup file from the installation media. During installation, select the database that you created in step 4.&lt;/p&gt;&lt;p&gt;•Copy your upgraded customized file into the correct application directory. &lt;/p&gt;&lt;p&gt;•Start the AOS. &lt;/p&gt;&lt;p&gt;•Start the Microsoft Dynamics AX 2009 client. The Upgrade checklist is displayed automatically. &lt;/p&gt;&lt;p&gt;•Complete the steps in the Upgrade checklist to finish upgrading.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The steps below provide a high-level overview of the tasks that you must complete to upgrade from Microsoft Dynamics AX 4.0 to Microsoft Dynamics AX 2009.&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- Back up your existing database and application files. - (Optional) To help improve performance, remove all user data and logs of Microsoft Dynamics AX 4.0. For example, clean up the SysDatabaseLog table. &lt;/p&gt;&lt;p&gt;- (Optional) To help improve performance, set initial data and log file sizes so that they don’t increase while you perform the data upgrade process. &lt;/p&gt;&lt;p&gt;- (Optional) To help improve performance, set the recovery model to Simple for the Microsoft Dynamics AX 2009 Database. - Back up your Microsoft Dynamics AX database. Your database is ready to be upgraded. &lt;/p&gt;&lt;p&gt;- Run the Microsoft Dynamics AX 2009 Setup file from the installation media. During installation, select your existing Microsoft Dynamics AX database. &lt;/p&gt;&lt;p&gt;- Start the Microsoft Dynamics AX 2009 client. The Upgrade checklist is displayed automatically. &lt;/p&gt;&lt;p&gt;- Complete the steps in the Upgrade checklist to finish upgrading. &lt;/p&gt;&lt;p&gt;Upgrading to Microsoft Dynamics AX 4.0 and Microsoft Dynamics AX 2009 -convergence session please check following link &lt;a href="http://blogs.msdn.com/mfp/archive/2008/03/14/upgrading-to-microsoft-dynamics-ax-4-0-and-microsoft-dynamics-ax-2009.aspx" target="_blank"&gt;Click Here&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-33898454387638905?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/33898454387638905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=33898454387638905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/33898454387638905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/33898454387638905'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/07/upgrade-from-ax-30-to-ax-2009.html' title='Upgrade from AX 3.0 , AX4.0 to AX 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-8714818975747928904</id><published>2008-07-11T04:24:00.000-07:00</published><updated>2008-07-11T05:00:52.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><title type='text'>Web Service Basic</title><content type='html'>&lt;span style="color:#3366ff;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;We all talk about webservices, webservices can do this and webservices can do that. But when we are asked to make one, we hesitate. Maybe it's because we never made a webservice before, and all the time playing with Webforms and Windows Forms or even Console Applications. By the way, I love Console applications. In this article, I will show you how to create a simple webservice that is consumed by a Console application client.&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Making the WebService:&lt;/span&gt;&lt;br /&gt;First, start your Visual Studio .NET, and in the project type, select ASP.NET WebService. In the left pane, choose the language of your choice. In this example, I will be using Visual C#.NET. Once you select the project, a page will appear which will be more like a design page, switch to its code view. In the code view, you can see lot of comments and C# code already written for you. You will also see that at the bottom, there is a method HelloWorld which is written for you by default, so you can test your service and of course say hello to the world. After removing the unwanted code and comments, your code will look like this:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Diagnostics;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Services;&lt;br /&gt;namespace WebServiceExample&lt;br /&gt;{&lt;br /&gt;public class Service1 : System.Web.Services.WebService&lt;br /&gt;{&lt;br /&gt;public Service1()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;InitializeComponent();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Add the Description Attribute so you&lt;br /&gt;// will know the purpose of your WebService&lt;br /&gt;[WebMethod(Description="This Method prints HelloWorld")]&lt;br /&gt;public string HelloWorld()&lt;br /&gt;{&lt;br /&gt;return "Hello World";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Let's dig into this small code. [WebMethod] Attribute denotes that this method will be used by the clients, also this method has to be public in order for a client to use it. Description inside the WebMethod Attribute just gives the method more meaning. Don't worry about the InitializeComponent() method since it's written by default.&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Running the WebService:&lt;/span&gt;&lt;br /&gt;OK, now you have made your first kick ass WebService (without even writing a single line of code). Let's run it and check whether it gives the correct result or not. In the Solution Explorer, right click on the .asmx file, and select View in Browser &lt;/div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_EIbjOk8Ynb4/SHdJ9murvdI/AAAAAAAAADQ/_p0y1EIBYQM/s1600-h/Image1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5221723615676579282" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_EIbjOk8Ynb4/SHdJ9murvdI/AAAAAAAAADQ/_p0y1EIBYQM/s320/Image1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Once you click on "View in Browser", the next screen you will see will be something like this:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_EIbjOk8Ynb4/SHdKdMa4BsI/AAAAAAAAADY/n8dTccfG6Pk/s1600-h/Image2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5221724158369990338" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_EIbjOk8Ynb4/SHdKdMa4BsI/AAAAAAAAADY/n8dTccfG6Pk/s320/Image2.jpg" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;I have erased most of the stuff, so you can only see the method that you need in this example. Below, you can see the method HelloWorld and the description you wrote for the method.&lt;br /&gt;Now, click on the HelloWorld method. I don't want to scare you with all the SOAP and HTTP code produced, so I am only going to paste the screen shot which will be relevant to this example.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_EIbjOk8Ynb4/SHdKeOU6I9I/AAAAAAAAADg/yOfEfEv1a5Q/s1600-h/Image3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5221724176061703122" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_EIbjOk8Ynb4/SHdKeOU6I9I/AAAAAAAAADg/yOfEfEv1a5Q/s320/Image3.jpg" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Alright, so far so good. Now, just press the Invoke button to see the result of your method named HelloWorld().&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_EIbjOk8Ynb4/SHdKeRFQEWI/AAAAAAAAADo/MZExvicAtM0/s1600-h/Image4.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5221724176801337698" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_EIbjOk8Ynb4/SHdKeRFQEWI/AAAAAAAAADo/MZExvicAtM0/s320/Image4.jpg" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;This is cool. You have just tested your first webservice and it ran since you didn't coded it. I know what you are thinking right now. Is the client going to see the result like this strange format (this is XML format). Well, of course not. That's why you need to make a Proxy class which consumes this service.&lt;br /&gt;&lt;span style="color:#3366ff;"&gt;Making a Proxy Client:&lt;/span&gt;&lt;br /&gt;Let's make a Console application which consumes this service. You can use any language and platform to consume this service, that's the purpose of XML WebService. Now, this procedure requires some mouse clicking :). So I will write down the steps instead of pasting the screen shots.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Start a new project which will be a Console Application in Visual C#.NET.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Once you see the code view in the Console application, right click on the project name from the Solution Explorer. Remember that project name will be written in bold.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click on "Add Web Reference".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Paste the URL of your WebService. You can get the URL of your WebService when you view your webservice in IE or any other browser.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click GO.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Your webservice will be loaded. In the Web Reference Name textbox, write "MyService" and click Add Reference.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You will see that the web reference has been added in your Solution Explorer, meaning that webservice is ready to kick some butt.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now, all you have to do is to make the instance of the WebService class using the reference name that you provided, which is "MyService".&lt;/p&gt;&lt;p&gt;using System;&lt;br /&gt;namespace MyClient&lt;br /&gt;{&lt;br /&gt;class Class1&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;[STAThread]&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;// Make an instance of the WebService Class&lt;br /&gt;// using the Web Reference you provided&lt;br /&gt;MyService.Service1 service = new MyService.Service1();&lt;br /&gt;// Assign message what ever is returned&lt;br /&gt;// from HelloWorld in this case "HelloWorld"&lt;br /&gt;string message = service.HelloWorld();&lt;br /&gt;// Prints out the message on the screen&lt;br /&gt;Console.WriteLine(message);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;And that's it. You use the webservice class just like any other class. Something you need to keep in mind is that if you decide to make a new method in your webservice and want to make it available to the client, then always remember to build your webservice solution so that the assembly can be updated. If you don't build your webservice, you won't be able to see the methods on the client side.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-8714818975747928904?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/8714818975747928904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=8714818975747928904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8714818975747928904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8714818975747928904'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/07/web-service-basic.html' title='Web Service Basic'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_EIbjOk8Ynb4/SHdJ9murvdI/AAAAAAAAADQ/_p0y1EIBYQM/s72-c/Image1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-2948768315401606605</id><published>2008-07-09T00:26:00.000-07:00</published><updated>2008-07-09T00:27:30.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Demo Data for Microsoft Dynamics AX 2009</title><content type='html'>The demo data for Dynamics AX 2009 has been released. Its "Contoso Entertainment Systems (CES)" . Now the Demo data comes in 2 flavours... standard dat/def &amp;amp; a SQL backup.&lt;br /&gt;&lt;br /&gt;The Demo Data set for Microsoft Dynamics® AX 2009 is no longer based on the Global Trade and Manufacturing Company. Based on market feedback we have created a new Contoso Entertainment systems group of companies. It comes with 2 fiscal years of transactional data that enable us to demo our stronger Business Intelligence story and Role Center pages, while allowing us to easily expand the demo data story in future releases as we expand Microsoft Dynamics® AX’s functionality footprint.&lt;br /&gt;Click the link below to download.&lt;br /&gt;&lt;a href="https://mbs.microsoft.com/partnersource/support/selfsupport/productreleases/ax2009demodata.htm?printpage=false"&gt;Demo Data for Microsoft Dynamics AX 2009&lt;/a&gt; [Requires Partnersource Logon]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-2948768315401606605?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/2948768315401606605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=2948768315401606605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/2948768315401606605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/2948768315401606605'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/07/demo-data-for-microsoft-dynamics-ax.html' title='Demo Data for Microsoft Dynamics AX 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-8474388834574301253</id><published>2008-07-09T00:18:00.000-07:00</published><updated>2008-07-09T00:25:04.081-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>How Do I” Videos — Dynamics AX</title><content type='html'>On this page you will find videos designed for all Microsoft Dynamics AX developers, from the novice to the professional. New videos are added regularly, so check back often. &lt;a href="http://msdn.microsoft.com/en-us/dynamics/ax/cc507280.aspx"&gt;(click here)&lt;/a&gt;&lt;br /&gt;Microsoft has added following Videos&lt;br /&gt;1. Forms Series &lt;a id="ctl00_mainContentContainer_ctl04" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl04',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc507279.aspx"&gt;#1 How Do I: Link Parent and Child Forms by Using Dynamic Links?&lt;/a&gt;(6 minutes, 47 seconds)&lt;br /&gt;2. Enterprise Portal Series&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl06" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl06',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc678971.aspx"&gt;#1 How Do I: Use Record Context in Enterprise Portal?&lt;/a&gt;(14 minutes, 51 seconds)&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl07" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl07',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc707016.aspx"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl08" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl08',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc707016.aspx"&gt;#2 How Do I: Create a Simple List Page in Enterprise Portal?&lt;/a&gt;(4 minutes, 52 seconds)&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl09" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl09',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc707045.aspx"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl10" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl10',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc707045.aspx"&gt;#3 How Do I: Create a Simple Task Page in Enterprise Portal?&lt;/a&gt;(4 minutes, 39 seconds)&lt;br /&gt;&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl12" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl12',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc730480.aspx"&gt;#4 How Do I: Create a Simple Wizard Page in Enterprise Portal?&lt;/a&gt;(7 minutes, 39 seconds)&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl13" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl13',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc730487.aspx"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl14" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl14',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc730487.aspx"&gt;#5 How Do I: Call an X++ Class From an EP User Control?&lt;/a&gt;(7 minutes, 26 seconds)&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl15" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl15',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc730505.aspx"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a id="ctl00_mainContentContainer_ctl16" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl16',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc730505.aspx"&gt;#6 How Do I: Add a Range to a Dataset in an EP List Page?&lt;/a&gt;(5 minutes, 13 seconds)&lt;br /&gt;3. User Interface Series &lt;a id="ctl00_mainContentContainer_ctl18" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl18',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc664634.aspx"&gt;#1 How Do I: Navigate the Client User Interface?&lt;/a&gt;(8 minutes, 53 seconds)&lt;br /&gt;4. Application Integration Framework (AIF) Series &lt;a id="ctl00_mainContentContainer_ctl20" onclick="javascript:Track('ctl00_mainContentContainer_ctl00ctl00_mainContentContainer_ctl20',this);" href="http://msdn.microsoft.com/en-us/dynamics/ax/cc664615.aspx"&gt;#1 How Do I: Create a Custom AIF Pipeline Component?&lt;/a&gt;(7 minutes, 28 seconds)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-8474388834574301253?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/8474388834574301253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=8474388834574301253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8474388834574301253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8474388834574301253'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/07/how-do-i-videos-dynamics-ax.html' title='How Do I” Videos — Dynamics AX'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-562598608717225902</id><published>2008-07-07T00:53:00.000-07:00</published><updated>2008-07-07T22:18:58.434-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>Installing Ax 2009</title><content type='html'>&lt;p&gt;Installing Microsoft Dynamics AX 2009 requires more than the installation DVD. This post will provide you with an overview of the software components and their download sources to get you better prepared for the installation.&lt;/p&gt;&lt;p align="left"&gt;&lt;a href="https://mbs.microsoft.com/partnersource/marketing/campaigns/prospect/microsoftdynamicsax2009launch.htm"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Following Components are required to install Ax 2009&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Microsoft Dynamics AX 2009&lt;/strong&gt; Release DVD ISO which You may download from &lt;a href="http://axassociate.blogspot.com/2008/05/download-microsoft-dynamics-ax-2009.html"&gt;download the Microsoft Dynamics 2009 Release May Edition DVD ISO&lt;/a&gt; file (1.7 GB in size) from &lt;a href="https://mbs.microsoft.com/partnersource/support/selfsupport/productreleases/dynamicsax2009release.htm"&gt;PartnerSource&lt;/a&gt; Since it is in ISO format, you may use any Virtual DVD software to mount it as a DVD disc to use it directly or to extract the files to a physical location. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Microsoft .NET Framework 3.5&lt;/strong&gt; Microsoft Dynamics AX 2009 utilized the latest features from Windows Presentation Foundation, etc. You need to install &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&amp;amp;DisplayLang=en"&gt;Microsoft .NET Framework 3.5&lt;/a&gt; before you are able to install Microsoft Dynamics AX 2009. The table bellow shows the options you have to get the .NET Framework 3.5 installed. Pick one that suits your need best&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://download.microsoft.com/download/7/0/3/703455ee-a747-4cc8-bd3e-98a615c3aedb/dotNetFx35setup.exe"&gt;Microsoft .NET Framework 3.5 Live Installer&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://download.microsoft.com/download/6/0/f/60fc5854-3cb8-4892-b6db-bd4f42510f28/dotnetfx35.exe"&gt;Microsoft .NET Framework 3.5 Full Package&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Service Pack 2 for Microsoft SQL Server 2005&lt;/strong&gt; If you are hosting your Dynamics AX 2009 data with Microsoft SQL Server 2005, you will need Service Pack 2 or later. This service pack has been released for over a year. In case you have not updated your Microsoft SQL Server 2005 to SP2, you may download the update at &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d07219b2-1e23-49c8-8f0c-63fa18f26d3a&amp;amp;DisplayLang=en"&gt;Microsoft Download: SQL Server 2005 SP2&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Dynamics AX 2009 Demo Data&lt;/strong&gt; Microsoft has not realeased any official demo data for Dynamics AX 2009 Release yet. but you can download and use &lt;a href="https://mbs.microsoft.com/fileexchange/?fileID=15baac83-09d3-4065-85d5-abad3e97e718"&gt;Demo data AX 2009 CTP3 VPC Ver02&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Microsoft Windows Sharepoint Services 3.0 with Service Pack 1&lt;/strong&gt; Sharepoint Services 3.0 SP1 is required to host the Role Centers and Enterprise Portal. It is not included in the Dynamics AX 2009 Installation DVD. You have an option to use Microsoft Office Sharepoint Server 2007 or Microsoft Windows Sharepoint Services 3.0. It is available for download at Microsoft Download. &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ef93e453-75f1-45df-8c6f-4565e8549c2a&amp;amp;DisplayLang=en"&gt;Windows SharePoint Services 3.0 with Service Pack 1&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Microsoft Visual Studio 2008 Shell (isolated mode) Redistributable Package&lt;/strong&gt; This package is required for the Reporting Extension to work. There are two Microsoft Visual Studio 2008 Shell redistributable package; isolated and integrated. Make sure you are having the isolated package. When you install this package, please note that the executable &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=aca38719-f449-4937-9bac-45a9f8a73822&amp;amp;DisplayLang=en"&gt;Microsoft Visual Studio 2008 Shell (isolated mode) Redistributable Package&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-562598608717225902?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/562598608717225902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=562598608717225902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/562598608717225902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/562598608717225902'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/07/installing-ax-2009.html' title='Installing Ax 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-8448074143414434978</id><published>2008-06-26T02:10:00.000-07:00</published><updated>2008-06-26T02:13:41.209-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><category scheme='http://www.blogger.com/atom/ns#' term='AX 2009'/><title type='text'>The Enterprise Portal team introduces new blog for Microsoft Dynamics AX 2009</title><content type='html'>The EP team has just created a blog about their stuff. These guys know their stuff, and are heavy users of managed code interoperability with X++.&lt;br /&gt;Check it out &lt;a href="http://blogs.msdn.com/epblog/"&gt;http://blogs.msdn.com/epblog/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-8448074143414434978?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/8448074143414434978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=8448074143414434978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8448074143414434978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8448074143414434978'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/enterprise-portal-team-introduces-new.html' title='The Enterprise Portal team introduces new blog for Microsoft Dynamics AX 2009'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-8517262935347660346</id><published>2008-06-12T02:22:00.000-07:00</published><updated>2008-06-12T02:25:40.760-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EP'/><title type='text'>Microsoft Dynamics AX 2009 SDK</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_EIbjOk8Ynb4/SFDrWeUM1OI/AAAAAAAAACg/-aoGlfUSJAM/s1600-h/msdn_1inch_rgb_3.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_EIbjOk8Ynb4/SFDrWeUM1OI/AAAAAAAAACg/-aoGlfUSJAM/s320/msdn_1inch_rgb_3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5210923540195103970" /&gt;&lt;/a&gt;&lt;br /&gt;Microsoft Dynamics AX 2009 SDK&lt;br /&gt;Together with the release of the actual product, documentation for the &lt;a href="http://msdn.microsoft.com/en-us/library/aa496071.aspx"&gt;Microsoft Dynamics AX 2009 SDK&lt;/a&gt; has been released on MSDN. There is a lot stuff there including lots of info on the new EP 2009 framework &lt;a href="http://msdn.microsoft.com/en-us/library/aa855178.aspx"&gt;here&lt;/a&gt;. Check it out. Also check out the &lt;a href="http://msdn.microsoft.com/en-us/dynamics/ax/default.aspx"&gt;Microsoft Dynamics AX Developer Center&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-8517262935347660346?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/8517262935347660346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=8517262935347660346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8517262935347660346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8517262935347660346'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/microsoft-dynamics-ax-2009-sdk-together.html' title='Microsoft Dynamics AX 2009 SDK'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_EIbjOk8Ynb4/SFDrWeUM1OI/AAAAAAAAACg/-aoGlfUSJAM/s72-c/msdn_1inch_rgb_3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-5637868414142076851</id><published>2008-06-12T01:20:00.000-07:00</published><updated>2008-06-12T02:10:15.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><category scheme='http://www.blogger.com/atom/ns#' term='Editor Script'/><title type='text'>Open table or browse from editor code</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_EIbjOk8Ynb4/SFDnwApTGBI/AAAAAAAAACY/vErZXH5kf-0/s1600-h/OpenBrowseExample.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_EIbjOk8Ynb4/SFDnwApTGBI/AAAAAAAAACY/vErZXH5kf-0/s320/OpenBrowseExample.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5210919580860618770" /&gt;&lt;/a&gt;&lt;br /&gt;Many times Developer needs to open the table or browse while coding. Developer has to go to AOT then search for that table. To ease of this situation by following code  developer can easily open the table or browse from Editor windows itself.&lt;br /&gt;&lt;br /&gt;Copy paste the following methods in EditorScript Class of axapta&lt;br /&gt;//------------------------&lt;br /&gt;void AX_openTable(Editor e)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    #AOT&lt;br /&gt;    TreeNode tr;&lt;br /&gt;    XInfo xInfo = new xInfo();&lt;br /&gt;    str selection;&lt;br /&gt;    ;&lt;br /&gt;    selection= strltrim((strrtrim(Editorscripts::getSelectedText_n(e))));     // modified standard method getSelectedText&lt;br /&gt;    tr = TreeNode::findNode(#TablesPath + '\\'+selection);&lt;br /&gt;    if(tr)&lt;br /&gt;     tr.AOTnewWindow();&lt;br /&gt;    else&lt;br /&gt;       Throw error(strfmt("Table %1 not found",selection));&lt;br /&gt;   &lt;br /&gt;   return;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//----------&lt;br /&gt;static str getSelectedText_n(Editor e)&lt;br /&gt;{&lt;br /&gt;    int i;&lt;br /&gt;    str text;&lt;br /&gt;    str line;&lt;br /&gt;    int startLine = e.selectionStartLine()+1;&lt;br /&gt;    int endLine   = e.selectionEndLine()+1;&lt;br /&gt;    int startCol  = e.selectionStartCol();&lt;br /&gt;    int endCol    = e.selectionEndCol();&lt;br /&gt;&lt;br /&gt;    if (startLine == endLine &amp;&amp; startCol == endCol)&lt;br /&gt;    {&lt;br /&gt;        e.firstLine();&lt;br /&gt;        while (e.moreLines())&lt;br /&gt;        {&lt;br /&gt;            text += e.getLine();&lt;br /&gt;            e.nextLine();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        e.firstSelectedLine();&lt;br /&gt;        for (i = startLine; i &lt;= endLine; i++)&lt;br /&gt;        {&lt;br /&gt;            line = e.getLine();&lt;br /&gt;            if (i == startLine &amp;&amp; i == endLine)&lt;br /&gt;            {&lt;br /&gt;                line = substr(line, startcol, endCol-startCol);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            if (i == endLine)&lt;br /&gt;            {&lt;br /&gt;                line = substr(line, 1, endCol-1);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            if (i == startLine)&lt;br /&gt;            {&lt;br /&gt;                line = strrep(' ', startCol-1)+substr(line, startCol, strlen(line));&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            text += line;&lt;br /&gt;            e.nextSelectedLine();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return text;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//---------&lt;br /&gt;To Browse the Table Add&lt;br /&gt;//-------&lt;br /&gt;void AX_browseTable(Editor e)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    #AOT&lt;br /&gt;    TreeNode tr;&lt;br /&gt;    TableId  TableId;&lt;br /&gt;    XInfo xInfo = new xInfo();&lt;br /&gt;    str selection;&lt;br /&gt;    SysTableBrowser SysTableBrowser;&lt;br /&gt;    ;&lt;br /&gt;    selection= strltrim((strrtrim(Editorscripts::getSelectedText_n(e))));     // modified standard method getSelectedText&lt;br /&gt;    tr = TreeNode::findNode(#TablesPath + '\\'+selection);&lt;br /&gt;    if(tr)&lt;br /&gt;        {&lt;br /&gt;            TableId = tablename2id(selection);&lt;br /&gt;            if(TableId)&lt;br /&gt;                new SysTableBrowser().run(tableID);&lt;br /&gt;          }&lt;br /&gt;    else&lt;br /&gt;       Throw error(strfmt("Table %1 not found",selection));&lt;br /&gt;&lt;br /&gt;   return;&lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-5637868414142076851?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/5637868414142076851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=5637868414142076851' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/5637868414142076851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/5637868414142076851'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/open-table-or-browse-from-editor-code.html' title='Open table or browse from editor code'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_EIbjOk8Ynb4/SFDnwApTGBI/AAAAAAAAACY/vErZXH5kf-0/s72-c/OpenBrowseExample.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-778449998488828809</id><published>2008-06-11T04:26:00.000-07:00</published><updated>2008-06-11T04:30:09.427-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><title type='text'>Data Authorization in axapta through coding</title><content type='html'>Data authorization in Microsoft Dynamics AX is performed in three ways: &lt;br /&gt;1.Implicit Authorization &lt;br /&gt;Implicit authorization means that the kernel performs the check. An example of this would be when you are accessing a data source from a form or report. Record level security is used to determine whether the user has access to run the form or report. &lt;br /&gt;2.Checks Done by Setting Security Properties on AOT Objects &lt;br /&gt;An example of this is setting the security key and needed access level properties on menu items and on form or report controls. &lt;br /&gt;3.Checks done in X++ &lt;br /&gt;Examples:&lt;br /&gt;if (hasSecurityKeyAccess(securitykeyNum(mySecurityKey), AccessType::View))&lt;br /&gt;{&lt;br /&gt;    myMethod();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (hasMenuItemAccess(menuItemDisplayStr(myMenuItem), MenuItemType::Display)))&lt;br /&gt;{&lt;br /&gt;    myMethod();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DictTable dictTable = new DictTable(tablenum(myTable));&lt;br /&gt;if (dictTable.rights &gt;= AccessType::Insert))&lt;br /&gt;{&lt;br /&gt;    myMethod();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (isConfigurationkeyEnabled(configurationkeyNum(myConfigurationKey))&lt;br /&gt;{&lt;br /&gt;    myMethod();&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-778449998488828809?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/778449998488828809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=778449998488828809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/778449998488828809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/778449998488828809'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/data-authorization-in-axapta-through.html' title='Data Authorization in axapta through coding'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-7781315229290300407</id><published>2008-06-11T04:16:00.000-07:00</published><updated>2008-06-11T04:18:14.348-07:00</updated><title type='text'>How to print a query name on a report in Axapta</title><content type='html'>The sysQueryForm form is used to create multiple queries for a report. This form is used by most reports in Microsoft Axapta.&lt;br /&gt;&lt;br /&gt;The sysQueryForm form contains a name field. The contents of this name field are printed on the report. However, there is no direct relation between the contents of this name field and the query name. &lt;br /&gt;&lt;br /&gt;You can customize Microsoft Axapta to print the query name on the report. To do this, follow these steps: &lt;br /&gt;1. Modify a method to capture the value of the name field. This value holds the query name.&lt;br /&gt;2. Create a method to perform the following tasks: &lt;br /&gt;• Obtain the value of the name field.&lt;br /&gt;• Print this value on the report.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following code applies to the QueryLoad method. This example code indicates how to modify a method to perform the following tasks: &lt;br /&gt;• Capture the query name.&lt;br /&gt;• Set this variable to a global variable.&lt;br /&gt;switch (_name)&lt;br /&gt; {&lt;br /&gt;  case sysQueryForm.queryLastUsedLabel():&lt;br /&gt;   saveBtn.enabled(false);&lt;br /&gt;   deleteBtn.enabled(true);&lt;br /&gt;   break;&lt;br /&gt;  case sysQueryForm.queryActiveLabel():&lt;br /&gt;   saveBtn.enabled(false);&lt;br /&gt;   deleteBtn.enabled(false);&lt;br /&gt;   break;&lt;br /&gt;  default:&lt;br /&gt;   saveBtn.enabled(true);&lt;br /&gt;   deleteBtn.enabled(true);&lt;br /&gt;   &lt;br /&gt;   // Add the following two lines to display the query name value.&lt;br /&gt;   globalCache = classfactory.globalCache();&lt;br /&gt;   globalCache.set("Query","ReportQuery",_name);&lt;br /&gt;   &lt;br /&gt;   break;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;The following code applies to the Display method. This example code indicates how to create a method to perform the following tasks: &lt;br /&gt;• Obtain the value of the name field.&lt;br /&gt;• Print this value on the report.&lt;br /&gt;Display custAccount Queryname()&lt;br /&gt;{&lt;br /&gt; SysGlobalCache  globalCache;&lt;br /&gt; Name      queryName;&lt;br /&gt; ;&lt;br /&gt; &lt;br /&gt; globalCache = classfactory.globalCache();&lt;br /&gt; queryName = globalCache.get("Query","ReportQuery",null);&lt;br /&gt;&lt;br /&gt; return queryName;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-7781315229290300407?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/7781315229290300407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=7781315229290300407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/7781315229290300407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/7781315229290300407'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/how-to-print-query-name-on-report-in.html' title='How to print a query name on a report in Axapta'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-6902416769059142672</id><published>2008-06-11T03:49:00.000-07:00</published><updated>2008-06-11T03:50:39.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>How to call Axapta methods from .net</title><content type='html'>Using .NET Business Connector, you can access Microsoft Dynamics AX data or business logic from a .NET-connected application.&lt;br /&gt;To add a reference to .NET Business Connector&lt;br /&gt;•Open Visual Studio. &lt;br /&gt;•In Solution Explorer, right-click References and select Add Reference. &lt;br /&gt;•In the Add Reference window, select the Browse tab. &lt;br /&gt;•Specify the location of Microsoft.Dynamics.BusinessConnectorNet.dll, and then click Add. &lt;br /&gt;Add code to call a Microsoft Dynamics AX method in Visual Studio C#.&lt;br /&gt;using System;&lt;br /&gt;using Microsoft.Axapta.BusinessConnector;&lt;br /&gt;namespace AXMethodCall&lt;br /&gt;{&lt;br /&gt;     class Class1&lt;br /&gt;    {&lt;br /&gt;          static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            // Create the .NET Business Connector objects.&lt;br /&gt;            Axapta ax;&lt;br /&gt;             object o;&lt;br /&gt;            bool b;&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                // Login to Microsoft Dynamics Ax.&lt;br /&gt;                ax = new Axapta();&lt;br /&gt;                ax.Logon(null, null, null, null);&lt;br /&gt;            }&lt;br /&gt;            catch (Exception e)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine("An error occurred in object creation  or Axapta logon: {0}", e.Message);&lt;br /&gt;                return;&lt;br /&gt;            }&lt;br /&gt;            // Logon was successful.&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                // Call a static class method.&lt;br /&gt;                o = ax.CallStaticClassMethod("Class Name ",  "Method Name",Argument);&lt;br /&gt;            }&lt;br /&gt;            catch (Exception e)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine("An error has been encountered during  CallStaticClassMethod: {0}", e.Message);&lt;br /&gt;                b = ax.Logoff();&lt;br /&gt;                return;&lt;br /&gt;            }&lt;br /&gt;            // Log off from Microsoft Dynamics AX.&lt;br /&gt;            b = ax.Logoff();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-6902416769059142672?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/6902416769059142672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=6902416769059142672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/6902416769059142672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/6902416769059142672'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/how-to-call-axapta-methods-from-net.html' title='How to call Axapta methods from .net'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-8704375253022790588</id><published>2008-06-11T03:22:00.001-07:00</published><updated>2008-06-12T01:20:21.386-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><category scheme='http://www.blogger.com/atom/ns#' term='Editor Script'/><title type='text'>Block Comment in axapta Editor Script(class)</title><content type='html'>To Comment a code axpta in a Block Like&lt;br /&gt;/*&lt;br /&gt;Some Code&lt;br /&gt;*/&lt;br /&gt;Add the Below Code in Editor Scripit Class in Axapta&lt;br /&gt;&lt;br /&gt;void AX_BlockComment(Editor e)&lt;br /&gt;{&lt;br /&gt;   int FLine,Eline;&lt;br /&gt;   int FCol,ECol;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   FLine =   e.selectionStartLine();&lt;br /&gt;   FCol  =   e.selectionStartCol();&lt;br /&gt;&lt;br /&gt;   ECol  =   e.selectionEndCol();&lt;br /&gt;   Eline =   e.selectionEndLine();&lt;br /&gt;   e.unmark();&lt;br /&gt;&lt;br /&gt;   e.gotoLine(FLine-1);&lt;br /&gt;   e.gotoCol(1);&lt;br /&gt;   e.insertLines('//'+' Commented by ' + curUserId()+', on '+date2str(today(),123,2,1,3,1,4 ) + ',' +time2str(timeNow(), 1, 2)+'\n');&lt;br /&gt;&lt;br /&gt;   e.gotoLine(FLine);&lt;br /&gt;   e.gotoCol(FCol);&lt;br /&gt;   e.insertString('/*');&lt;br /&gt;&lt;br /&gt;   e.gotoLine(Eline+1);&lt;br /&gt;   e.gotoCol(1);&lt;br /&gt;   e.insertString('*/');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-8704375253022790588?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/8704375253022790588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=8704375253022790588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8704375253022790588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/8704375253022790588'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/block-comment-in-axapta.html' title='Block Comment in axapta Editor Script(class)'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7473360666294928991.post-1908754484572648139</id><published>2008-06-11T03:11:00.000-07:00</published><updated>2008-06-11T03:12:54.305-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='X++'/><title type='text'>Send Alert to user from code in AX 4.0</title><content type='html'>// To send Alert to User From Code&lt;br /&gt;void sendAlertToUsers()&lt;br /&gt;{&lt;br /&gt;    SysMailer           mail;&lt;br /&gt;    UserInfo            UserInfo;&lt;br /&gt;    EventInbox          inbox;&lt;br /&gt;    EventInboxId        inboxId;&lt;br /&gt;    ;&lt;br /&gt;    &lt;br /&gt;    select UserInfo where UserInfo.id == CurUserId();&lt;br /&gt;    inboxId = EventInbox::nextEventId();&lt;br /&gt;    &lt;br /&gt;    inbox.initValue();&lt;br /&gt;    inbox.ShowPopup     = NoYes::Yes;           // To show Pop up&lt;br /&gt;    inbox.Subject       = "Aleart Message Through Code";&lt;br /&gt;    inbox.Message       = "Testing Alerts";&lt;br /&gt;    inbox.AlertedFor    = "This alert is just for information(Testing)";&lt;br /&gt;    inbox.SendEmail     = false;&lt;br /&gt;    inbox.UserId        = UserInfo.Id;&lt;br /&gt;    inbox.TypeId        = classnum(EventType);&lt;br /&gt;    //Enter Table and Field Details&lt;br /&gt;    inbox.AlertTableId  = TableNum(EmplTable); // Table for which Alert is Generated&lt;br /&gt;    inbox.AlertFieldId  = fieldNum(Empltable ,Name); // Field for which Alert is Generated&lt;br /&gt;    inbox.TypeTrigger   = EventTypeTrigger::FieldChanged;&lt;br /&gt;    inbox.CompanyId     = CurExt();&lt;br /&gt;    inbox.InboxId       = inboxId;&lt;br /&gt;    inbox.AlertCreatedDate = systemdateget();&lt;br /&gt;    inbox.AlertCreateTime  = timeNow();&lt;br /&gt;    inbox.insert();&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7473360666294928991-1908754484572648139?l=axgeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axgeek.blogspot.com/feeds/1908754484572648139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7473360666294928991&amp;postID=1908754484572648139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/1908754484572648139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7473360666294928991/posts/default/1908754484572648139'/><link rel='alternate' type='text/html' href='http://axgeek.blogspot.com/2008/06/send-alert-to-user-from-code-in-ax-40.html' title='Send Alert to user from code in AX 4.0'/><author><name>Deepankar Sahdev</name><uri>http://www.blogger.com/profile/06124433531111423559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
