<?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:blogger='http://schemas.google.com/blogger/2008' 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-2164233235692955316</id><updated>2024-10-05T11:00:58.880+07:00</updated><category term="Axapta"/><category term="Axapta Articles"/><category term="Axapta 3.0 and SQL Server 2005"/><category term="Axapta Form"/><category term="Axapta Model"/><category term="Debug"/><category term="Enterprise Portal"/><category term="Visual studio 2008"/><category term="coder in Vietnam"/><category term="install"/><category term="security"/><category term="utility"/><title type='text'>Microsoft Dynamics AX</title><subtitle type='html'>This blog is about my experiences in Microsoft AX. &#xa;I collect and write these articles to share my knowledge with people who love ERP, especially Axapta.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-6443854881864509758</id><published>2010-11-15T14:22:00.005+07:00</published><updated>2010-11-15T14:32:04.762+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise Portal"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual studio 2008"/><title type='text'>First experience in develop Enterprise portal for AX 2009</title><content type='html'>Create new website base on Dynamics AX Enterprise Portal template causes error: &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;&quot;Unable to connect to Microsoft Dynamics AX. The Dynamics AX Enterprise Portal Tools are not available&quot;.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Solutions:&lt;br /&gt;&lt;br /&gt;+ Make sure your AOS is running.&lt;br /&gt;+ Make sure your BC connection is configured correctly.&lt;br /&gt;+ If you have AX 4.0 and AX 5.0 in the same box, check the PATH variable to make sure that the path to AX 5.0 bin folder is before AX 4.0.&lt;br /&gt;http://blogs.msdn.com/b/emeadaxsupport/archive/2009/04/24/side-by-side-installation-of-dynamcis-ax-4-0-client-and-dynamics-ax-2009-client.aspx&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Visual studio is hang out when you switch from development mode to design mode. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;+ If your VS is 2008 and your MS office is 2000, refer to http://blogs.msdn.com/b/mikhailarkhipov/archive/2007/12/14/compatibility-problem-between-vs-2008-and-office-2000-and-how-to-fix-it.aspx&lt;br /&gt;&lt;br /&gt;+ If your VS is 2008 and your MS office is 2010, refer to http://blogs.msdn.com/b/webdevtools/archive/2008/10/03/troubleshooting-visual-studion-2008-design-view-hangs-issues.aspx</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/6443854881864509758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/6443854881864509758' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6443854881864509758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6443854881864509758'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2010/11/first-experience-in-develop-enterprise.html' title='First experience in develop Enterprise portal for AX 2009'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-2548237077304676588</id><published>2010-10-29T10:41:00.002+07:00</published><updated>2010-10-29T10:43:37.928+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="utility"/><title type='text'>Utility tool for my daily work</title><content type='html'>One of my favorite tool is Winmerge!!! I cannot imagine what my life should be without Winmerge. Thanks a lot Winmerge team!!!</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/2548237077304676588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/2548237077304676588' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/2548237077304676588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/2548237077304676588'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2010/10/utility-tool-for-my-daily-work.html' title='Utility tool for my daily work'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-3476654152712171112</id><published>2010-09-09T11:05:00.004+07:00</published><updated>2010-09-09T11:19:19.055+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>setup security for Axapta</title><content type='html'>Following is just my draft article to summarize my idea/ experience about how to setup security for AX. &lt;br /&gt;&lt;br /&gt;One of the pain point of deploying solution to client is to setup security. The reason is that there is no template in security for different companies.&lt;br /&gt;In order to setup security for Axapta, consultant has to know:&lt;br /&gt;• Company  Departments/subsidiaries and who to do what: for ex: manager and his assistant have a right to setup a new discount amount for a item, other member in that department has right to create new sales order (1)&lt;br /&gt;• Company business workflow: The business workflow determines how documents are moving/ transferring between departments. For ex: a sales order can be created/confirmed by Commercial team but the packing slip  is done by warehousing team, and the sales invoice is posted by accounting team (2)&lt;br /&gt;&lt;br /&gt;As its difficulties, a consultant who setup AX security should to know: (3)&lt;br /&gt;o All information above (1),(2)&lt;br /&gt;o Technical design underneath application: (license code, configuration key, security key, company domain in AX, record level security, field security, tables, menu items,….). In addition, when new modules/ functions are added into AX, the security should take into consideration. It includes (4):&lt;br /&gt; Require new configuration key? If yes, the license purchase from Microsoft should take into consideration, add new configuration key is required&lt;br /&gt; Require new security key? If yes, the license purchase from Microsoft should take into consideration, add new security key is required. If no,  which security key will be the parent key for new modules/functions&lt;br /&gt; Security in added code.&lt;br /&gt;&lt;br /&gt;So security should take into consider at the first phase as much as possible.&lt;br /&gt;&lt;br /&gt;In my opinion technical consultant (that understand buz workflow + has training manual from functional consultant) is a suitable person to setup AX security&lt;br /&gt;So before start to setup AX security, consultant has to:&lt;br /&gt;• Has enough information about (1), (2): requisition&lt;br /&gt;• Has knowledge about (3)&lt;br /&gt;• Good design/documents about (4)&lt;br /&gt;&lt;br /&gt;Best practice for AX security setup:&lt;br /&gt;• Define domain.&lt;br /&gt;• Turn configuration key on/off&lt;br /&gt;• Setup access level for parent key&lt;br /&gt;• Disable unnecessary features/forms by using security keys&lt;br /&gt;• Turn on features that are going to be used&lt;br /&gt;&lt;br /&gt;How to test security?&lt;br /&gt;One of the first idea comes out is that we add a test user account in to AX system and login a workstation to test.There are not such tools to test it automatically at this moment. To save time we can reate a new user account, assign user to a member group and test manually. By using  runas command we can setup and test in the same PC. &lt;br /&gt;&lt;br /&gt;Enjoy!!!</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/3476654152712171112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/3476654152712171112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3476654152712171112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3476654152712171112'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2010/09/setup-security-for-axapta.html' title='setup security for Axapta'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-8086453505298373603</id><published>2010-04-26T20:50:00.006+07:00</published><updated>2010-04-27T10:17:08.776+07:00</updated><title type='text'>Display Inventory onhand in Sales order line</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAHay_nQ52_wwiQrEkI8vgwQHqpgsDsWIjmFBrUQO31_V6eP-ChtCZxSslPJpr_lnVzqFISU1LO-aUmuYafv_bIw-pPMxOwm7Jad0BOF8WTaBri_CCLsr_9SNde8CjMIS2QV8sT9vhBec/s1600/1.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 125px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAHay_nQ52_wwiQrEkI8vgwQHqpgsDsWIjmFBrUQO31_V6eP-ChtCZxSslPJpr_lnVzqFISU1LO-aUmuYafv_bIw-pPMxOwm7Jad0BOF8WTaBri_CCLsr_9SNde8CjMIS2QV8sT9vhBec/s320/1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5464443971074046658&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Rquirement: to display inventory on- hand in sales line.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Solution:&lt;/div&gt;&lt;div&gt;-Add a new method into SalesLine datasource:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;//BP Deviation documented&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;display inventQty availPhysical(SalesLine _SalesLine)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    InventOnhand InventOnhand;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    InventDimParm   inventDimParm;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    ;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.configId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.ConfigIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.inventBatchId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.InventBatchIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.InventColorId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.InventColorIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.InventLocationId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.InventLocationIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.inventSerialId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.InventSerialIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.InventSiteId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.InventSiteIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.InventSizeId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.InventSizeIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.wMSLocationId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.WMSLocationIdFlag = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    if (inventDim.wMSPalletId != &#39;&#39;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;        inventDimParm.WMSPalletIdFlag   = NoYes::Yes;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    InventOnhand =&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    InventOnhand::newParameters(_salesLine.ItemId,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;                                _salesLine.inventDim(),&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;                                inventDimParm);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;    return inventOnHand.availPhysical();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 204, 204);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;-Customize modified method of inventdim&#39;s fields datasource :&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;public void modified()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;  &lt;b&gt;  SalesLine   salesLineFind;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;    super();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;    salesLine.modifyItemDim(inventDim,fieldnum(InventDim,InventBatchId),InventTable::find(salesLine.ItemId).DimGroupId);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;    if (salesLine.DeliveryDateControlType)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;        SalesCalcAvailableDlvDates::modifiedField(salesLine,0,false,false,inventDim);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;    &lt;b&gt;// finds the current selected sales line&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;b&gt;    salesLineFind = SalesLine::find(salesLine.SalesId, salesLine.LineNum);&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;b&gt;    // syncs sales table with db&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;b&gt;    salesLine_ds.research();&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;b&gt;    // updates table ui&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;b&gt;    salesLine_DS.reread();&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;b&gt;    // finds the current selected sales line&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;&lt;b&gt;    salesLine_ds.findRecord(salesLineFind);&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(51, 153, 153);&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;-Add a Real field into SaleLine grid with display method is set to the method created in step 1.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enjoy!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/8086453505298373603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/8086453505298373603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8086453505298373603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8086453505298373603'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2010/04/display-inventtory-onhand-in-sales.html' title='Display Inventory onhand in Sales order line'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAHay_nQ52_wwiQrEkI8vgwQHqpgsDsWIjmFBrUQO31_V6eP-ChtCZxSslPJpr_lnVzqFISU1LO-aUmuYafv_bIw-pPMxOwm7Jad0BOF8WTaBri_CCLsr_9SNde8CjMIS2QV8sT9vhBec/s72-c/1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-6749348401591446679</id><published>2009-03-06T11:21:00.002+07:00</published><updated>2009-03-06T11:22:55.232+07:00</updated><title type='text'>Helpful Purchase Order and Sales order info</title><content type='html'>When working with a client, and doing data imports of their data into the new Ax instance you might have to bring in open purchase orders or sales orders. The great thing about this is that both of these are very similar in how they function, look, act, etc. One of the key things to understand when bringing in, for example, purchase orders is the Quantity tab and the data that lives there. The easiest peice about this is the actual Quantity or Purchase Quantity. The thing to keep in mind here when mapping and filling this field with data, is that in reality it&#39;s two fields: QtyOrdered, PurchQtyThis is a key peice of data that you must first fill to build everything in the Quantity tab from. The next field that needs to be explained and understood is the Deliver Remainder field on the Qty tab. This field specifys how much of the purchase qty is left to be delivered to the specified delivery address. As long as there is data in this field then the given purchase order is still marked as Open. This field, is actually two fields in the table: RemainInventPhysical, RemainPurchPhysicalOur next field to look at is the Invoice Remainder. This field tells you how much of the purchase qty, that has been recieved, but not yet been invoiced. This field is actually one field called: RemainPurchFinancial.The next two fields we are going to talk about is the Invoiced and Recieved fields in the tab. These fields are actual not fields in the PurchLine database, but rather are driven from Display methods off of the PurchLine Table itself. These display methods are called: Recieved = PurchLine.receivedInTotal(), Invoiced = PurchLine.invoicedInTotal(). What you need to keep in mind here is that these fields are acutally built off of the vendPackingSlipTrans table (Recieved) and the vendInvoiceTrans table (Invoiced). These tables must have values in them, as they represent actual receiving actions doen to the given purchase order line, and invoicing done. This is something that can be tricky, and must be done correctly, as if done wrong you can have incorrect data in these two tables that can cause reports to be off, etc. A lot of people / companies at this point decide to back out of the recieved and invoiced values and then for each open PO, redo these actions from within axapta in order to make sure all reporting and values are accurate and percise to maintain data integrity. The last field we will review, which happens to be the first field in the tab is the Recieve Now field. This field, when supplied with a value, can be used to mark a given qty for the specified line, during a packing slip update to be marked as recieved. Now we can go further into the details of this and how each field pertains to different actions, etc. What most important to understand is this base knowledge though and from there build upon that during your use of Ax. To Re-cap below is a list of these Field names, and then there actual field name in the table. Also I have included the logic for how Ax determines the status of a given PO or SO:1. Quantity = PurchLine.QtyOrdered, PurchLine.PurchQty2. Deliver Remainder = PurchLine.RemainInventPhysical, PurchLine.RemainPurchPhysical3. Invoice Remainder = PurchLine.RemainPurchFinancial4. Invoiced = PurchLine.invoicedinTotal() [Display Method]5. Recieved = PurchLine.recievedInTotal() [Display Method]Status Logic:If anything exists in the Deliver Remainder then the PO is open.If Nothing exsists in the Deliver Remainder, and all Qty Ordered exist in the Recieved then the PO is recievedIf all qty has been recieved, and all has been invoiced, then the PO is invoiced.&lt;br /&gt;&lt;br /&gt;P/S: There is a bug in Axapta which will be fixed if you know above useful information!!!</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/6749348401591446679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/6749348401591446679' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6749348401591446679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6749348401591446679'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2009/03/helpful-purchase-order-and-sales-order.html' title='Helpful Purchase Order and Sales order info'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-1643948568797562000</id><published>2009-01-04T22:47:00.002+07:00</published><updated>2009-01-04T22:52:17.997+07:00</updated><title type='text'>New year, new HOPES</title><content type='html'>A new year is comming and our real works with Microsoft is come true!!!!&lt;br /&gt;Last Friday, I sent an email to Dynamics Axapta Build team to ask them about our license in Axapta. And out of my supprise, the replied my email quickly. I really appreciate their helps and I also know that right now our new hard challenges is comming too. I like challenge!!!&lt;br /&gt;Our main duties with Microsoft is Axapta bug fixing.</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/1643948568797562000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/1643948568797562000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/1643948568797562000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/1643948568797562000'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2009/01/new-year-new-hopes.html' title='New year, new HOPES'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-4432702570544558510</id><published>2008-09-17T13:32:00.004+07:00</published><updated>2008-09-17T13:43:35.593+07:00</updated><title type='text'>Windows Test Technicque For Axapta</title><content type='html'>Last weeks, I recevied some  resources from our Ukraine about Test Automation. It&#39;s called WTT. Unfortunately, we didn&#39;t understand what  it is about. We just read the document and we was really in a circle. Where could we start? What is the first step to deal with Axapta Test Automation?&lt;div&gt;It were hard questions for me because I never deal with test automation before. (I just know UniTest)&lt;/div&gt;&lt;div&gt;But, lucky me, my dear friend Danang sent us videos to demonstrate how to deal with WTT.&lt;/div&gt;&lt;div&gt;Right now, with all of our Celenia Vietnam mates, I think we are ready for implementing real testcase.&lt;/div&gt;&lt;div&gt;I also hope that we will deal with Axapta 2009 as much as possible.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/4432702570544558510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/4432702570544558510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/4432702570544558510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/4432702570544558510'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/09/windows-test-technicque-for-axapta.html' title='Windows Test Technicque For Axapta'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-2661572544200521722</id><published>2008-07-28T12:18:00.002+07:00</published><updated>2008-07-28T12:46:37.914+07:00</updated><title type='text'>Create an Axapta page on Facebook</title><content type='html'>Today, i have created an Axapta page on facebook. I hope this page will help us easier to share our knowledge.</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/2661572544200521722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/2661572544200521722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/2661572544200521722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/2661572544200521722'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/07/create-axapta-page-on-facebook.html' title='Create an Axapta page on Facebook'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-4292647302293655917</id><published>2008-07-15T23:38:00.000+07:00</published><updated>2008-07-15T23:39:21.623+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta"/><category scheme="http://www.blogger.com/atom/ns#" term="Debug"/><title type='text'>10 tips for debugging in Dynamics Ax</title><content type='html'>&lt;h2 class=&quot;post-title&quot;&gt;&lt;a href=&quot;http://sysdictcoder.com/blog/10-tips-for-debugging-in-dynamics-ax/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: 10 tips for debugging in Dynamics Ax&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/h2&gt;         &lt;p&gt;Fixing bugs requires quite a bit of experience and knowledge of the modules involved, both on a technical and functional level. The first step to fix something is to find the cause of the problem, a.k.a. debugging.&lt;/p&gt; &lt;p&gt;You shouldn’t limit yourself to using the debugger when things go wrong. Debugging can help you understand the system. I often fire up the debugger just to see what happens in a standard application. This helps me to see how modifications can be implemented and what the consequences are. Dynamics is too big and too complex to be able to just dive in and change something.&lt;/p&gt; &lt;p&gt;Here are some tips to help you in the fine art of debugging. Some might be blatantly obvious to experienced developers. These are things I wish I had known when I first started working with Axapta.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Assume you broke it&lt;/b&gt;&lt;br /&gt;This is probably the most important advice. We developers tend to think we write good code. Some of us do, some of us don’t. But nobody does it flawlessly. By default, assume anything you didn’t write yourself works perfectly. This narrows down the search considerably. After careful debugging you may come to a different conclusion. In which case you’ll have a good bug report to file.&lt;/p&gt; &lt;p&gt;If a system has been running fine for a while and it suddenly breaks down after importing new code, those changes are likely to be the root cause of the problem. Try reverting your changes and doing the exact same thing. If the problem remains, you have found an unrelated problem. If not, you know where to start looking for errors.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Get a clear description of the problem&lt;/b&gt;&lt;br /&gt;Unless the error is clear enough and you immediately know how to fix it, you’ll need a detailed description how to trigger this error. Unfortunately this can be very hard. Getting users to tell you exactly what you need to understand a bug isn’t that simple. Keep in mind that users are generally not interested in the program they’re using. They just want to get their job done. They have been taught to use the system in a certain way and unexpected errors confuse them. They might not realize what’s different when things go wrong compared to when everything just works.&lt;/p&gt; &lt;p&gt;You need to ask the right questions. If necessary sit next to them and watch them work. Take notes and try to notice special cases. And don’t forget to ask what the correct behaviour should be. There may be no error message and whatever happens may look correct but the user could be expecting a different result.&lt;/p&gt; &lt;p&gt;Without a good scenario it may be impossible to solve some bugs.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Don’t worry to much about errors that only occur once&lt;/b&gt;&lt;br /&gt;If something goes wrong only once and it doesn’t happen again, don’t worry too much about it. Depending on the risk it may be better to fix the damage and move on. There’s probably a bug lurking somewhere but you have to decide if it’s worth chasing it.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Intercept error messages&lt;/b&gt;&lt;br /&gt;Anything sent to the info log window passes through the add() method on the Info class. Put a breakpoint there if you want to know where a message is triggered. Using the stack trace in the debugger it’s usually not that hard to see which conditions cause it.&lt;/p&gt; &lt;p&gt;Often it turns out to be a missing setting in one of the basic tables.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Intercept data modifications&lt;/b&gt;&lt;br /&gt;Not all bugs come with an easy to intercept error message. Sometimes all you get is bad data. It’s possible to see when and why records are created, modified or deleted by putting breakpoints in insert(), update() or delete() on a table. Create them if necessary. Just being able to look at the stack in the debugger when these are called can be very insightful.&lt;/p&gt; &lt;p&gt;Remember that it is possible to modify data without passing through these methods. Like using doInsert(), doUpdate() or doDelete(), or using direct SQL. It’s not very common but sometimes you can miss something.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Intercept queries&lt;/b&gt;&lt;br /&gt;If you suspect a query is not correct you’ll want to verify its output. A way that doesn’t require much work is using the postLoad() method. It can be overridden on each table and is called for each selected record. It even works with complex joins. Putting an info() in the postLoad() of each table in a query can tell you a lot about what’s happening.&lt;/p&gt; &lt;p&gt;&lt;b&gt;The cross-reference is your friend&lt;/b&gt;&lt;br /&gt;The cross-reference is one of the most important tools when developing and debugging in Dynamics Ax. Always try to have an environment somewhere with an updated cross-reference (not the live environment). You can find the cross-reference in the development tools menu.&lt;/p&gt; &lt;p&gt;Need to know where a field gets its value?  The cross-reference tells you where every read and write happens.&lt;br /&gt;Want to know where an error message is used?  Open the label editor and find the label, then click the Used By button.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Set up a separate environment&lt;/b&gt;&lt;br /&gt;When dealing with complex problems it helps to have a separate environment for debugging. This allows you to freely modify code and data without affecting the live system. This is very important when you have to post invoices or do anything else that is basically irreversible.&lt;/p&gt; &lt;p&gt;It also prevents live users from being blocked if you have breakpoints in the middle of a transaction.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Dealing with large datasets&lt;/b&gt;&lt;br /&gt;Sometimes a problem can only be reproduced in (a copy of) the live environment. You’re often stuck with a lot of data that doesn’t matter but gets in the way. Like when you need to debug the MRP. Using regular breakpoints doesn’t help because it takes too long before you get to the real issue.&lt;/p&gt; &lt;p&gt;In this case you need to have some more tricks up your sleeve to narrow down the search. One option is to work in several passes. Using the cross-reference determine places where something interesting happens and dump data with info() or Debug::printDebug(). This should narrow down the possible suspects. With a bit of luck just looking at the data can be enough to identify the problem.&lt;/p&gt; &lt;p&gt;Another way is implementing your own conditional breakpoints. The debugger doesn’t offer these out of the box but you can roll your own with an if-statement and the breakpoint statement. This is very effective if you have some more or less unique identifier of the problem, like a record ID or a customer account or even a date.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Clean up&lt;/b&gt;&lt;br /&gt;Don’t forget to remove any modifications you made while debugging. You probably don’t want to leave a hardcoded breakpoint in a live system. Been there, done that, very annoying. &lt;/p&gt; &lt;p&gt;Good luck hunting for bugs.&lt;/p&gt; &lt;p&gt;Feel free to share your debugging techniques.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/4292647302293655917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/4292647302293655917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/4292647302293655917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/4292647302293655917'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/07/10-tips-for-debugging-in-dynamics-ax.html' title='10 tips for debugging in Dynamics Ax'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-6464114518916471544</id><published>2008-07-15T19:55:00.006+07:00</published><updated>2008-07-15T20:22:35.183+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta"/><category scheme="http://www.blogger.com/atom/ns#" term="Axapta 3.0 and SQL Server 2005"/><category scheme="http://www.blogger.com/atom/ns#" term="install"/><title type='text'>Install Axapta 3.0 SP5,SP6</title><content type='html'>Last week  i tried to install Axapta 3.0 into my computer and it took me more than one day to finish. I was so tired but actually I got some good experience in setup Axapta. In my opinion, here are steps to install Axapta.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install SQL server. I just used SQL server 2005 version.&lt;/li&gt;&lt;li&gt;Install Axapta 3.0.&lt;/li&gt;&lt;li&gt;Update your Axapta client to kernel rollup 2.If you are planning to upgrade to SP6 you don&#39;t need to update to kernel rollup 2.&lt;/li&gt;&lt;li&gt;Install SP5 or SP6 as needed.&lt;/li&gt;&lt;li&gt;Setup Connection from Axapta server to SQL server by using ODBC connection or SQL server as needed&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/6464114518916471544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/6464114518916471544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6464114518916471544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6464114518916471544'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/07/install-axapta-30-sp5sp6.html' title='Install Axapta 3.0 SP5,SP6'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-7847333805446644270</id><published>2008-03-17T14:54:00.001+07:00</published><updated>2008-03-17T15:00:04.523+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta Articles"/><category scheme="http://www.blogger.com/atom/ns#" term="Axapta Form"/><title type='text'>Lookup Form</title><content type='html'>Axapta usually creates required lookup forms on the fly, but it also allows the developer to create a custom lookup form and assign it as &quot;FormHelp&quot; to an extended datatype, so that it is automatically used. Why would you do that? There might be many reasons. Typically you need to display the data in a non standard order or you want to show only a subset of the data depending on some criteria. Here are the steps needed to create a proper lookup form.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Contents&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; * 1 Assumptions&lt;br /&gt; * 2 Create the form&lt;br /&gt; * 3 Make it selectable&lt;br /&gt; * 4 Make sure the form opens with the previously selected value&lt;br /&gt; * 5 Make lookup react to search by wild card&lt;br /&gt; * 6 Make Form Default lookup for an Extended Data Type&lt;br /&gt;&lt;br /&gt;Assumptions&lt;br /&gt;&lt;br /&gt;In the following example I assume you create a lookup for table &quot;xyz&quot; and the ID field of that table is called &quot;id&quot;.&lt;br /&gt;&lt;br /&gt;Create the form&lt;br /&gt;&lt;br /&gt;First create a basic form. Usually this form contains not much more than a grid. But you might add additional controls. Then set the following properties on the datasource, so that the form can not be used for editing:&lt;br /&gt;&lt;br /&gt;   AllowCheck:    No&lt;br /&gt;   AllowCreate:   No&lt;br /&gt;   AllowDelete:   No&lt;br /&gt;   AllowEdit:     No&lt;br /&gt;   AutoNotify:    No&lt;br /&gt;   InsertAtEnd:   No&lt;br /&gt;   InsertIfEmpty: No&lt;br /&gt;&lt;br /&gt;Additionally set for the design the following properties to make it look like a proper lookup:&lt;br /&gt;&lt;br /&gt;   AlwaysOnTop:   Yes&lt;br /&gt;   Frame:         Border&lt;br /&gt;   HideToolbar:   Yes&lt;br /&gt;   WindowType:    Popup&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[edit] Make it selectable&lt;br /&gt;&lt;br /&gt;Now we need to tell the lookup form, which control will return the selected value. Lets assume you have a form with a grid and in that grid you have a control called &quot;xyz_id&quot;. In this case you overwrite the init method of the form as shown below. Note that if you are using Axapta v3.0 or higher, then you can set the control&#39;s AutoDeclaration property to Yes and use the control name directly in the selectMode() call.&lt;br /&gt;&lt;br /&gt;public void init()&lt;br /&gt;{&lt;br /&gt; FormControl         xyz_id;&lt;br /&gt; ;&lt;br /&gt;&lt;br /&gt; super();&lt;br /&gt;&lt;br /&gt; xyz_id= element.design().control(control::xyz_id);&lt;br /&gt; element.selectMode(xyz_id);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[edit] Make sure the form opens with the previously selected value&lt;br /&gt;&lt;br /&gt;Strange enough the following is missing in most/all custom lookup forms, which you find in Axapta Standard. But it is required, if you want your lookup to mark the previously selected value as active record. Therefore overwrite the ExecuteQuery method of your datasource:&lt;br /&gt;&lt;br /&gt;public void executeQuery()&lt;br /&gt;{&lt;br /&gt; FormStringControl   callerControl   = SysTableLookup::getCallerStringControl(element.args());&lt;br /&gt; ;&lt;br /&gt;&lt;br /&gt; super();&lt;br /&gt;&lt;br /&gt; xyz_ds.findValue(fieldnum(xyz,id),callerControl.text());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;With a lot of pain I had top learn that the above will not work, if you use the standard query, which is automatically created by Axapta. This might be due to existing Dynalinks or other reasons, which I am not aware of. But it will work fine, if you create your own query for example in the Init method of the datasource. Here you can also define your custom sort or range criteria:&lt;br /&gt;&lt;br /&gt;public void init()&lt;br /&gt;{&lt;br /&gt; Query                q = new Query();&lt;br /&gt; QueryBuildDataSource qbds;&lt;br /&gt; ;&lt;br /&gt;&lt;br /&gt; super();&lt;br /&gt;&lt;br /&gt; qbds = q.addDataSource(tablenum(xyz));&lt;br /&gt; qbds.orderMode(OrderMode::OrderBy);&lt;br /&gt; qbds.addSortField(fieldNum(xyz,some_other_field));&lt;br /&gt; this.query(q);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[edit] Make lookup react to search by wild card&lt;br /&gt;&lt;br /&gt;The following you will find in the official documentation and also in a lot of Axapta examples. If you type in a standard Axapta StringEdit Control something like &quot;abc*&quot;, then automatically the lookup will open and only the matching subset of records will be shown. You achieve this by overwriting the run method of the form:&lt;br /&gt;&lt;br /&gt;public void run()&lt;br /&gt;{&lt;br /&gt; FormStringControl   callerControl   = SysTableLookup::getCallerStringControl(element.args());&lt;br /&gt; Boolean             filterLookup    = false;&lt;br /&gt; ;&lt;br /&gt;&lt;br /&gt; // if lookup was called with filter, then supress autoSearch&lt;br /&gt; if (callerControl.text() &amp;amp;&amp;amp; callerControl.hasChanged())&lt;br /&gt; {&lt;br /&gt;     filterLookup = true;&lt;br /&gt;     xyz_ds.autoSearch(false);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; super();&lt;br /&gt;&lt;br /&gt; // after call of super filter search manually by applying past filter&lt;br /&gt; if (filterLookup)&lt;br /&gt; {&lt;br /&gt;     xyz_ds.research();&lt;br /&gt;     xyz_ds.filter(fieldnum(xyz,id),callerControl.text());&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Make Form Default lookup for an Extended Data Type&lt;br /&gt;&lt;br /&gt;To have Axapta use your form by default every time a lookup is performed, you can set your form&#39;s name in the Extended Data Type&#39;s property called &#39;FormHelp&#39;. You do not necessarily need a display menu item, the property is your actual form&#39;s name.&lt;br /&gt;&lt;br /&gt;So that&#39;s it. Now you have a wonderfully working custom lookup.</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/7847333805446644270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/7847333805446644270' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/7847333805446644270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/7847333805446644270'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/03/lookup-form.html' title='Lookup Form'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-8339827323108531414</id><published>2008-03-12T15:19:00.006+07:00</published><updated>2008-12-10T20:30:28.611+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta Articles"/><category scheme="http://www.blogger.com/atom/ns#" term="Axapta Model"/><title type='text'>Dynamics AX 4.0 Meta Model</title><content type='html'>If you are a new developer and is trying to ramp up on AX, this might be a post for you. In MorphX (the IDE for AX) you do model-driven development. This basically means you create new elements of certain concepts, decorate them with properties, and wire them all together. Naturally there will be requirements to your features that cannot be expressed in the model, in these cases you have to resort to writing X++ code.&lt;br /&gt;&lt;br /&gt;Let&#39;s return to modeling. In the AOT (Application Object Tree) you will find a lot of modeling concepts, such as Forms, Tables, Extended Data Types etc. The AOT is quite good as a dictionary of concepts, but how do they relate?   For Inside Dynamics AX 4.0 we created the below overview diagrams to answer this question. After the book has been through editing the diagrams were chopped up. This gives a better details view, but the overview was lost. But not anymore. :-)&lt;br /&gt;&lt;br /&gt;Read each arrow as &quot;using&quot;. For example. A Menu uses Menu Items. A Menu Item uses a Form. A Form uses a Table. A Table uses Extended Data Types. And so on.&lt;br /&gt;&lt;br /&gt;I&#39;ve attach a Microsoft Office Visio version of the diagrams to this post as well for your convenience.&lt;br /&gt;&lt;br /&gt;The win client version:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz_Dm8MK0fH1KXF7uUfq60GkE1CWq9ImXYJcbtSf1pXcGw2T5QMk8Bb3efW_vHDqklh974ENED-FeoIYpC3AcGCQ5Xt4050SKKxSTHHaVchoc-rSXOMnwuJxtOE-YqNvgnH8ZfvJecnQ0/s1600-h/420x375.aspx.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz_Dm8MK0fH1KXF7uUfq60GkE1CWq9ImXYJcbtSf1pXcGw2T5QMk8Bb3efW_vHDqklh974ENED-FeoIYpC3AcGCQ5Xt4050SKKxSTHHaVchoc-rSXOMnwuJxtOE-YqNvgnH8ZfvJecnQ0/s320/420x375.aspx.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5176767605926837794&quot; border=&quot;0&quot; /&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;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The web client version:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibZPYe4Y5bSTWHrAzEeLgF-3ZywHG612X6NT8_nA2wfn9yJCweP8vENxzm9hyphenhyphenCgTDnKShjIIf4bS7s29yyTAgBmxvrqmbsAZToRfXXKkv8ofnk5r7l8PF25MnsFPYg66vobwkX9wUrz4k/s1600-h/472x375.aspx.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibZPYe4Y5bSTWHrAzEeLgF-3ZywHG612X6NT8_nA2wfn9yJCweP8vENxzm9hyphenhyphenCgTDnKShjIIf4bS7s29yyTAgBmxvrqmbsAZToRfXXKkv8ofnk5r7l8PF25MnsFPYg66vobwkX9wUrz4k/s320/472x375.aspx.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5176767425538211346&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/8339827323108531414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/8339827323108531414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8339827323108531414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8339827323108531414'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/03/dynamics-ax-40-meta-model.html' title='Dynamics AX 4.0 Meta Model'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz_Dm8MK0fH1KXF7uUfq60GkE1CWq9ImXYJcbtSf1pXcGw2T5QMk8Bb3efW_vHDqklh974ENED-FeoIYpC3AcGCQ5Xt4050SKKxSTHHaVchoc-rSXOMnwuJxtOE-YqNvgnH8ZfvJecnQ0/s72-c/420x375.aspx.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-8346983190219278186</id><published>2008-03-12T14:27:00.001+07:00</published><updated>2008-03-12T14:32:06.114+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta Articles"/><title type='text'>Temporary tables in Axapta</title><content type='html'>Temporary tables are used for non-persistent storage in Microsoft Axapta.&lt;br /&gt;&lt;br /&gt;They are useful in two common situations&lt;br /&gt;&lt;br /&gt;   1. As the datasource for a form or report, where the original data is too complex to be easily queried.&lt;br /&gt;   2. As temporary storage during complicated processing, to hold the results midway through the process. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Contents&lt;br /&gt;[hide]&lt;br /&gt;&lt;br /&gt;    * 1 Scoping rules for temporary tables&lt;br /&gt;    * 2 Creating temporary tables&lt;br /&gt;          o 2.1 In the AOT&lt;br /&gt;          o 2.2 Making an existing table temporary&lt;br /&gt;    * 3 Temporary tables in forms&lt;br /&gt;    * 4 Temporary tables in reports&lt;br /&gt;    * 5 Temporary table performance&lt;br /&gt;    * 6 Indexes on temporary tables&lt;br /&gt;    * 7 Security on temporary tables&lt;br /&gt;    * 8 Database transactions (tts) on temporary tables&lt;br /&gt;&lt;br /&gt;[edit] Scoping rules for temporary tables&lt;br /&gt;&lt;br /&gt;In general, each instance of a temporary table, and it&#39;s associated data, will only exist while the buffer variable used to access it is in scope.&lt;br /&gt;&lt;br /&gt;You can point multiple buffer variables to the same instance of a temporary table by using either the .setTmpData() method or by directly assigning the buffers to each other, identically to normal tables. In this way, even if your original buffer variable goes out of scope, your data will be retained while one of the other referencing variables remains.&lt;br /&gt;&lt;br /&gt;Be aware that static table methods - such as find() - will not work with temporary tables unless you pass through the buffer variable to the method.&lt;br /&gt;&lt;br /&gt;For example, this method will not work on a temporary table, as the tempTable variable used is newly created and will always contain no records.&lt;br /&gt;&lt;br /&gt;// This won&#39;t work on temporary table&lt;br /&gt;public static TempTable find(AccountNum _accountNum, boolean _forUpdate = false)&lt;br /&gt;{&lt;br /&gt;    TempTable   tempTable;&lt;br /&gt;    ;&lt;br /&gt; &lt;br /&gt;    if (_accountNum)&lt;br /&gt;    {&lt;br /&gt;        tempTable.selectForUpdate(_forUpdate);&lt;br /&gt; &lt;br /&gt;        select firstonly tempTable&lt;br /&gt;        where tempTable.AccountNum      == _accountNum;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    return tempTable;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;If you want to have a find() method on your temporary table, then you will need to modify it slightly to pass through a reference to our populated temporary table.&lt;br /&gt;&lt;br /&gt;// Use this pattern instead&lt;br /&gt;public static TempTable find(AccountNum _accountNum, TempTable _tempTable, boolean _forUpdate = false)&lt;br /&gt;{&lt;br /&gt; &lt;br /&gt;    if (_accountNum)&lt;br /&gt;    {&lt;br /&gt;        _tempTable.selectForUpdate(_forUpdate);&lt;br /&gt; &lt;br /&gt;        select firstonly _tempTable&lt;br /&gt;        where _tempTable.AccountNum      == _accountNum;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    return _tempTable;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Some examples of populating and using temporary tables can be found in Image:TRG TempTablesGeneral.xpo project.&lt;br /&gt;[edit] Creating temporary tables&lt;br /&gt;[edit] In the AOT&lt;br /&gt;&lt;br /&gt;Set the Temporary property to Yes to create a table which will always be temporary.&lt;br /&gt;&lt;br /&gt;Note that any existing data will be permanently deleted if you do this!&lt;br /&gt;&lt;br /&gt;Of course, you can no longer use the Table Browser to check the data, as the data is stored only per scoped instance of this table.&lt;br /&gt;[edit] Making an existing table temporary&lt;br /&gt;&lt;br /&gt;You can convert a normal table to a temporary table in code. For example, if you wish to create a temporary copy of the inventory table:&lt;br /&gt;&lt;br /&gt;InventTable    inventTable;&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;inventTable.setTmp();&lt;br /&gt;&lt;br /&gt;Doing so will remove all data from the temporary copy of the table. If you wish to create a populated temporary copy of a standard table, you can do the following:&lt;br /&gt;&lt;br /&gt;InventTable    inventTable;&lt;br /&gt;InventTable    inventTableTmp;&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;inventTableTmp.setTmp();&lt;br /&gt;while select inventTable&lt;br /&gt;{&lt;br /&gt;   inventTableTmp.data(inventTable.data());&lt;br /&gt;   inventTableTmp.doInsert();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;You can now add, modify or delete data from the table without affecting the real contents stored in the database.&lt;br /&gt;[edit] Temporary tables in forms&lt;br /&gt;&lt;br /&gt;Using temporary tables in forms requires the use of the .setTmpData() method.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;&lt;br /&gt;The temporary table data is populated in a static class method (running server side), which is called from the form and returns the populated table. We could populate a form-level buffer with the temporary data if needed, or else just call the populating method directly from the setTmpData() call as shown below.&lt;br /&gt;&lt;br /&gt;In the form datasource init(), we use .setTmpData() to instruct the datasource query to use our temporary table. Our datasource name in this example is TempTable.&lt;br /&gt;&lt;br /&gt;public void init()&lt;br /&gt; {&lt;br /&gt;     super(); &lt;br /&gt; &lt;br /&gt;     TempTable.setTmpData(tmpTableClass::populateTmpData());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;See Image:TRG TempTablesForm.xpo for an example of a working form based on a temporary table.&lt;br /&gt;&lt;br /&gt;It is also possible to add a table to a form which is not a temporary table, but the data that is shown must be temporary. Compared to the previous example there are not a lot of changes; just make sure the table is made temporary using .setTmp(). As in the previous example the temporary table data is populated in a static class method (running server side), which is called from the form and returns the populated table.&lt;br /&gt;&lt;br /&gt;In the following example the InventTable is used.&lt;br /&gt;&lt;br /&gt;public void init()&lt;br /&gt; {&lt;br /&gt;     super(); &lt;br /&gt; &lt;br /&gt;     InventTable.setTmp();&lt;br /&gt;     InventTable.setTmpData(InventTableClass::populateTmpData());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;[edit] Temporary tables in reports&lt;br /&gt;&lt;br /&gt;The correct method of using temporary tables in reports is slightly different from that of forms.&lt;br /&gt;&lt;br /&gt;The most important difference is the use of .setRecord() instead of .setTmpData(). A simple example follows:&lt;br /&gt;&lt;br /&gt;public boolean fetch()&lt;br /&gt; {&lt;br /&gt;     boolean ret;&lt;br /&gt;     ;&lt;br /&gt;     this.queryRun().setRecord(tmpTableClass::populateTmpData());&lt;br /&gt; &lt;br /&gt;     ret = super();&lt;br /&gt; &lt;br /&gt;     return ret;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;As there is often already a supporting RunBaseReport class being used to run the report, it is easy to integrate the population of the temporary data into that existing class. This is particularly useful if you need the data in the temporary table to be dependent on information entered into the report dialog prompt by the user.&lt;br /&gt;&lt;br /&gt;See Image:TRG TempTablesReports.xpo for an example of using a RunBaseReport class to run a report based on a temporary table.&lt;br /&gt;[edit] Temporary table performance&lt;br /&gt;&lt;br /&gt;Data being stored in temporary tables is stored in a temporary physical file in the file system. The file itself is created when the first record is being inserted in that particular instance of the temporary table. Hence, in a 3 tier environment, the file will be maintained on server or client side, depending on where the first record is inserted. From a performance standpoint this is a concern when using temporary tables.&lt;br /&gt;[edit] Indexes on temporary tables&lt;br /&gt;&lt;br /&gt;As with normal tables, indexes can be created on temporary tables. When a temporary copy of a normal table is used with .setTmp(), then the existing indexes will also be created on the temporary version. For new temporary tables (with the Temporary property set to Yes), you must create any desired indexes through the AOT in the normal way.&lt;br /&gt;&lt;br /&gt;Indexes have a substantial effect on temporary table performance. For temporary tables with a lot of records you will experience major performance limitations when searching on non-indexed fields.&lt;br /&gt;[edit] Security on temporary tables&lt;br /&gt;&lt;br /&gt;You can assign a SecurityKey to a temporary table, like any other. The security key will work well, limiting access. However, temporary tables never show up in the tree for assigning permissions, so it&#39;s not possible to actually enable them for users. Therefore it&#39;s important not to put a security key on any temporary table or users will never be able to use it.&lt;br /&gt;[edit] Database transactions (tts) on temporary tables&lt;br /&gt;&lt;br /&gt;Temporary tables are not included in Dynamics Ax&#39;s normal transaction processing capabilities. If you include population of a temporary table inside a ttsBegin/ttsCommit which then aborts, changes made to the temporary table will not be aborted.&lt;br /&gt;&lt;br /&gt;To activate transaction capabilities on temporary tables, use the local ttsBegin and ttsCommit methods on the temporary table buffer themselves. These work as expected.</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/8346983190219278186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/8346983190219278186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8346983190219278186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8346983190219278186'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/03/temporary-tables-in-axapta.html' title='Temporary tables in Axapta'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-6498932643962834446</id><published>2008-03-12T13:24:00.001+07:00</published><updated>2008-03-12T14:32:35.022+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Axapta Articles"/><title type='text'>Macros - Definitions and Pitfalls</title><content type='html'>The X++ language features a macro expansion facility. With it, you can define macros, use macro values, do conditional compilation etc. In this blog I&#39;ll describe the semantics of the constructs and provide some guidance to resolve some of the problems beginners and experts alike are having with this language feature.&lt;br /&gt;&lt;br /&gt;Macros are unstructured in that they are not defined by the grammar of the language. The handling of macros takes place before the text reaches the compiler.&lt;br /&gt;&lt;br /&gt;Macros may appear inside methods and class declarations anywhere that white space is permitted, and may also appear after the ending } in class definitions.&lt;br /&gt;&lt;br /&gt;The semantics of each of the macro keywords are described below:&lt;br /&gt;Macro constructs&lt;br /&gt;&lt;br /&gt;#define&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#define.MyName(SomeValue)&lt;br /&gt;&lt;br /&gt;This defines a macro called MyName with the value SomeValue. When this definition is in effect, any references to #MyName will be replaced with the character sequence SomeValue. The definition has no other semantics aside from defining the symbol MyName: The text does not reach the compiler itself. When the compilation of the current method is over, the symbol (MyName in this case) is no longer remembered. If the symbol is already defined, the old value is discarded and replaced by the new value.&lt;br /&gt;&lt;br /&gt;#globaldefine&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#globaldefine.MyName(SomeValue)&lt;br /&gt;&lt;br /&gt;This has the same semantics as #define, described above.&lt;br /&gt;&lt;br /&gt;#definc&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#definc.MyName&lt;br /&gt;&lt;br /&gt;This macro construct is used mainly when the value is a integer value. The preprocessor will increment the value of the symbol by one. If the value was not defined before the #definc occurs, an error is issued by the compiler. If the value before the #definc is not an integer, the old value will be overwritten with the value 0 and then incremented, yielding the value 1.&lt;br /&gt;&lt;br /&gt;#defdec&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#defdec.MyName&lt;br /&gt;&lt;br /&gt;This macro construct is used mainly when the value is a integer value. The preprocessor will decrement the value of the symbol by one. If the value was not defined before the #defdec occurs an error is issued by the compiler. If the value before the #defdec is not an integer, the old value will be overwritten with the value 0 and then decremented, yielding the value -1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#undef&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#undef.MyName&lt;br /&gt;&lt;br /&gt;The effect of this is to remove the symbol MyName from the list of current macro definitions. It is not considered an error to remove a symbol that has not previously been #defined.&lt;br /&gt;#if ... #endif&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#if.MySymbol&lt;br /&gt;    …&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;Or&lt;br /&gt;&lt;br /&gt;#if.MySymbol(SomeValue)&lt;br /&gt;    …&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;In the first case the textual content marked with … in the examples above is inserted into the source stream if MySymbol has previously been defined. In the second case, the content is inserted into the source stream if and only if the symbol is defined and has the indicated value.&lt;br /&gt;&lt;br /&gt;The #if constructs may be nested to any level but there is no #else construct.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#ifnot ... #endif&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#ifnot.MySymbol&lt;br /&gt;    …&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;Or&lt;br /&gt;&lt;br /&gt;#ifnot.MySymbol(SomeValue)&lt;br /&gt;    …&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;In the first case the textual content marked with … in the examples above is inserted into the source stream if MySymbol has not been defined. In the second case, the content is inserted into the source stream if the symbol is not defined or is defined but does not have the indicated value.&lt;br /&gt;&lt;br /&gt;The #if constructs may be nested to any level. There is no #else construct.&lt;br /&gt;#macrolib&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#macrolib.MyName&lt;br /&gt;&lt;br /&gt;The name must denote a node in the macros branch of the AOT. The text in that node is processed by the preprocessor. The net effect is to insert the content of the named macro in the source text where the directive appears. It is an error if the node is not found in the macros branch in the AOT.&lt;br /&gt;&lt;br /&gt;#macro / #localmacro&lt;br /&gt;&lt;br /&gt;The keywords #macro and #localmacro are interchangeable; there is no difference in the semantics of the two. This construct is used to define a symbol to denote textual content possibly spanning several lines.&lt;br /&gt;&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#localmacro.MySymbol&lt;br /&gt;    ….&lt;br /&gt;#endmacro&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;class MyBaseClass extends Runbase&lt;br /&gt;{&lt;br /&gt;     int v1;&lt;br /&gt;     #define.myMacro(“Hello world”)&lt;br /&gt;     #localmacro.currentlist&lt;br /&gt;        v1&lt;br /&gt;     #endmacro&lt;br /&gt;&lt;br /&gt;     public container pack()&lt;br /&gt;     {&lt;br /&gt;         return [#currentlist];  // #currentlist expands to v1&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     public void run()&lt;br /&gt;     {&lt;br /&gt;         print #myMacro;   // #myMacro expands to “Hello world”&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class MyDerivedClass extends myBaseClass&lt;br /&gt;{&lt;br /&gt;    int v2;&lt;br /&gt;    #localmacro.currentlist&lt;br /&gt;       v2&lt;br /&gt;    #endmacro&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public container pack()&lt;br /&gt;    {&lt;br /&gt;        return [super(), #currentlist];  // #currentlist expands to v2&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void run()&lt;br /&gt;    {&lt;br /&gt;        print #myMacro;  // #myMacro expands to “Hello world”&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#MySymbol&lt;br /&gt;The syntax is&lt;br /&gt;&lt;br /&gt;#MySymbol&lt;br /&gt;&lt;br /&gt;This inserts the value of the symbol into the source stream. It is an error to refer to a symbol that has not been defined.&lt;br /&gt;If the name denotes a node in the macros branch of the AOT, the text in that node is processed by the preprocessor (in this case #MySymbol is a shorthand for #macrolib.MySymbol).&lt;br /&gt;Common Problems&lt;br /&gt;In this part of the blog post, I&#39;d like to describe some of the problems programmers have when dealing with macros.&lt;br /&gt;Macro parameters&lt;br /&gt;It seems to be a little known fact and a source of some confusion that macros can be parametrized: Values can be given to the %&lt;n&gt; placeholders at the macro expansion site. Simple textual substitution of the positional parameter with the given, actual parameter then takes place. If no parameter is supplied, the empty string is used. So&lt;br /&gt;&lt;br /&gt;#define.MyString(&quot;Hello World from %1&quot;)&lt;br /&gt;&lt;br /&gt;will define a named macro (MyString) with one parameter. If that macro is expanded as shown below:&lt;br /&gt;&lt;br /&gt;#MyString(X++)&lt;br /&gt;&lt;br /&gt;the resulting string will be&lt;br /&gt;&lt;br /&gt;&quot;Hello World from X++&quot;&lt;br /&gt;&lt;br /&gt;Note that the place of expansion did not supply the letters X++ inside quotes. That would have generated a compiletime error:&lt;br /&gt;&lt;br /&gt;#MyString(&quot;X++&quot;)&lt;br /&gt;&lt;br /&gt;would have generated&lt;br /&gt;&lt;br /&gt;&quot;Hello World from &quot;X++&quot;&quot;&lt;br /&gt;&lt;br /&gt;That is what is meant by simple string substitution.&lt;br /&gt;&lt;br /&gt;The confusion can also occur because the % notation is also used for parameter substitution in the strFmt string formatting function. As you know, this function has a variable length parameter list, and each reference of %n in the first argument (a string) will be expanded to contain a textual representation of the n&#39;th argument, as shown below:&lt;br /&gt;&lt;br /&gt;print strfmt(&quot;The value is %1&quot;, theValue);&lt;br /&gt;&lt;br /&gt;Now, some programmers have been known to want to specify the first argument, i.e. the string containing the substitutions, with a macro symbol:&lt;br /&gt;&lt;br /&gt;#define.TheText(&quot;The value is %1&quot;)&lt;br /&gt;print strfmt(#TheText, theValue);&lt;br /&gt;&lt;br /&gt;But, the macro substition kicks in before the compiler sees the source code. The macro substition engive will not find a parameter to place where the %1 is, so the compiler will see:&lt;br /&gt;&lt;br /&gt;print strfmt(&quot;The value is &quot;, theValue);&lt;br /&gt;&lt;br /&gt;which is probably not what the programmer intended.&lt;br /&gt;Macros in class declarations&lt;br /&gt;&lt;br /&gt;Some confusion stems from the situation where macros are defined in class declarations. In order to understand how this is handled it is useful to review what the compiler does when it compiles a method. It starts by calculating the sequence of class derivations that the class is part of. It then parses each of the class declarations with the least derived one first, filling its internal symbol table with the macros as it goes along. After compiling the most local class declaration (the most derived one) the compiler compiles the method itself. Any symbol defined in any of the class declarations will subsequently be available for use in the methods. Symbols defined in a class declaration may be replaced by values defined in more derived class declarations.&lt;br /&gt;Parenthesis in macro strings&lt;br /&gt;&lt;br /&gt;The scanner dealing with macro strings is quite simple minded. It will not handle the situation where closing parenthesis characters are included in the string. So,&lt;br /&gt;&lt;br /&gt;#define.Another(&quot;(This is text in parenthesis)&quot;)&lt;br /&gt;&lt;br /&gt;will generate a compiler lexical error. If you need to do this, you should use the #localmacro directive instead:&lt;br /&gt;&lt;br /&gt;#localmacro.Another&lt;br /&gt;    &quot;(This is text in parenthesis)&quot;&lt;br /&gt;#endmacro&lt;br /&gt;&lt;br /&gt;In this context the end of the macro is signalled by the #endmacro string, not a right parenthesis.</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/6498932643962834446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/6498932643962834446' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6498932643962834446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6498932643962834446'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2008/03/macros-definitions-and-pitfalls.html' title='Macros - Definitions and Pitfalls'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-4179607076560757109</id><published>2007-10-06T23:34:00.000+07:00</published><updated>2007-10-06T23:44:10.529+07:00</updated><title type='text'>Facebook</title><content type='html'>At this time, my leader tell me do a research to write an application using Facebook framework. So interesting but i face with a problem that in order to write an facebook app you must has one server public in internet. Ohh. This is my big problem, I in a circle with a question that &quot;how to display&quot; your data in your canvas. All the things i&#39;ve done is just in local webserver which call service from Facebook :D. &lt;br /&gt;Haha</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/4179607076560757109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/4179607076560757109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/4179607076560757109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/4179607076560757109'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/10/facebook.html' title='Facebook'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-5342913776779407047</id><published>2007-07-27T11:46:00.001+07:00</published><updated>2007-07-27T11:46:20.114+07:00</updated><title type='text'>Enable and Disable Ubuntu Root Password</title><content type='html'>Ubuntu is one of the few Linux distributions out there that will not enable the root account.If you want to do something with root permission on the console you have to type sudo before the command.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sudo” means superuser do. “sudo” will prompt for “Password:”. Please specify user password&lt;br /&gt;&lt;br /&gt;As you have noticed during the Ubuntu installation there was no question about the root password, as you might have been used to see during other Linux distribution installation process.Because of this your root accout is inactive.&lt;br /&gt;&lt;br /&gt;If you want to enable root account (which is not recommended) enter the following command.&lt;br /&gt;&lt;br /&gt;$sudo passwd root&lt;br /&gt;&lt;br /&gt;This will prompt for a new root password and once you confirm it, you can start using the root account to login.&lt;br /&gt;&lt;br /&gt;If you want to disable root account in ubuntu you need to lock the root account by using the following command&lt;br /&gt;&lt;br /&gt;$sudo passwd -l root&lt;br /&gt;&lt;br /&gt;If you want to work on a root console you’d better use the following command&lt;br /&gt;&lt;br /&gt;$sudo -i</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/5342913776779407047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/5342913776779407047' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/5342913776779407047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/5342913776779407047'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/enable-and-disable-ubuntu-root-password.html' title='Enable and Disable Ubuntu Root Password'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-6543326208954547351</id><published>2007-07-27T10:37:00.000+07:00</published><updated>2007-07-27T11:45:56.779+07:00</updated><title type='text'>Install .rpm Files in Ubuntu</title><content type='html'>Some time you might find some applications are having only .rpm files but you want a .deb package for your debian,Ubuntu and other debian derived ditributions.If you can’t find .deb debian package in any of the debian,ubuntu repositories or elsewhere, you can use the alien package converter to install the .rpm file.&lt;br /&gt;&lt;br /&gt;Alien is a program that converts between the rpm, dpkg, stampede slp, and slackware tgz file formats. If you want to use a package from another distribution than the one you have installed on your system, you can use alien to convert it to your preferred package format and install it.&lt;br /&gt;&lt;br /&gt;Despite the large version number, alien is still (and will probably always be) rather experimental software. It has been used by many people for many years, but there are still many bugs and limitations.&lt;br /&gt;&lt;br /&gt;Alien should not be used to replace important system packages, like sysvinit, shared libraries, or other things that are essential for the functioning of your system. Many of these packages are set up differently by Debian and Red Hat, and packages from the different distributions cannot be used interchangably. In general, if you can’t uninstall the package without breaking your system, don’t try to replace it with an alien version.&lt;br /&gt;&lt;br /&gt;Install alien in Ubuntu&lt;br /&gt;&lt;br /&gt;sudo apt-get install alien&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;(In order to use apt-get command to install a program into your computer, your computer must has an internet connection.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will install all the required packages.Now you can start converting your .rpm files to .deb packages.&lt;br /&gt;&lt;br /&gt;Available Options for alien&lt;br /&gt;&lt;br /&gt;Convert the package.rpm into a package.deb&lt;br /&gt;&lt;br /&gt;sudo alien -d package-name.rpm&lt;br /&gt;&lt;br /&gt;Convert the package.rpm into a package.deb, and install the generated package.&lt;br /&gt;&lt;br /&gt;sudo alien -i package-name.rpm&lt;br /&gt;&lt;br /&gt;If you want to keeps alien from changing the version number use the following command&lt;br /&gt;&lt;br /&gt;sudo alien -k rpm-package-file.rpm&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;br /&gt;Suppose we have a avg antivirus avg71lms-r30-a0782.i386.rpm file&lt;br /&gt;&lt;br /&gt;To convert .rpm to debian&lt;br /&gt;&lt;br /&gt;sudo alien -k avg71lms-r30-a0782.i386.rpm&lt;br /&gt;&lt;br /&gt;Now you should be having avg71lms-r30-a0782.i386.deb file&lt;br /&gt;&lt;br /&gt;To install .deb file&lt;br /&gt;&lt;br /&gt;sudo dpkg -i avg71lms-r30-a0782.i386.deb&lt;br /&gt;&lt;br /&gt;If you don’t use -k option you should see avg71lms_r30-1_i386.deb file the difference is it will add 1&lt;br /&gt;&lt;br /&gt;Source: http://www.ubuntugeek.com</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/6543326208954547351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/6543326208954547351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6543326208954547351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6543326208954547351'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/install-rpm-files-in-ubuntu.html' title='Install .rpm Files in Ubuntu'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-5654065560659211505</id><published>2007-07-25T12:04:00.000+07:00</published><updated>2008-12-10T20:30:29.348+07:00</updated><title type='text'>Password vulnerability in Firefox 2.0.0.5</title><content type='html'>By Joe Barr  on July 23, 2007 (2:45:00 PM)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;According to a message posted over the weekend on the Full-Disclosure mailing list, the latest version of Firefox, 2.0.0.5, contains a password management vulnerability that can allow malicious Web sites to steal user passwords. If you have JavaScript enabled and allow Firefox to remember your passwords, you are at risk from this flaw.&lt;br /&gt;&lt;br /&gt;The Mozilla team fixed a similar flaw last November, one which did not require JavaScript. The heise Security Web site contains a demo/proof of concept of the vulnerability risk that you can use to determine your vulnerability.&lt;br /&gt;&lt;br /&gt;The original flaw was referred to as reverse cross-site scripting and was reportedly widely used on Myspace.com.&lt;br /&gt;&lt;br /&gt;Note: A reader has pointed out that MySpace.com does not allow Javascript, as originally reported. The reader is correct, although there do seem to be workarounds which result in Javascript executing on some browsers.&lt;br /&gt;&lt;br /&gt;Discussions between heise Security and Mozilla developers describe a debate among Mozilla developers over removing this feature, since &quot;evil&quot; server pages can steal passwords from browsers whether the user has opted for password management by Firefox or not.&lt;br /&gt;&lt;br /&gt;Apple&#39;s Safari is vulnerable in the same way. Current workarounds include disabling JavaScript in Firefox or avoiding the use of Firefox password management on sites where users are allowed to post JavaScript pages. &lt;br /&gt;(Source:http://www.linux.com/feature/118166)&lt;br /&gt;Here is my test:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUOGgV7THl5Om72ch5ekTPmkN840rjvHuVVgWSeLqc9vJ2Dv0EjMk6RqEwkE7bE1hDtzgU7qfON3AXzfHCpnsfCzskkAQgrEkf_7qRR9JGkeZ5aT-oGO4ELntjIHwZRJM7nW9JLWN6_e8/s1600-h/test1.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUOGgV7THl5Om72ch5ekTPmkN840rjvHuVVgWSeLqc9vJ2Dv0EjMk6RqEwkE7bE1hDtzgU7qfON3AXzfHCpnsfCzskkAQgrEkf_7qRR9JGkeZ5aT-oGO4ELntjIHwZRJM7nW9JLWN6_e8/s320/test1.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5090997000132110066&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Tqb7PmNeavDD2z9dyr-KQohaoPHKTNbeoyKc4n5Skvmu1aCmwLIhYsrI7RoyAbwDsH7u8x8cgW7UivP-jL_94RBitJQoa-4E76qaXQhvoukVsaGmEHiiUTLdasqmaR57pFD2yvUeODQ/s1600-h/test2.JPG&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Tqb7PmNeavDD2z9dyr-KQohaoPHKTNbeoyKc4n5Skvmu1aCmwLIhYsrI7RoyAbwDsH7u8x8cgW7UivP-jL_94RBitJQoa-4E76qaXQhvoukVsaGmEHiiUTLdasqmaR57pFD2yvUeODQ/s320/test2.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5090997167635834626&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/5654065560659211505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/5654065560659211505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/5654065560659211505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/5654065560659211505'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/password-vulnerability-in-firefox-2005.html' title='Password vulnerability in Firefox 2.0.0.5'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUOGgV7THl5Om72ch5ekTPmkN840rjvHuVVgWSeLqc9vJ2Dv0EjMk6RqEwkE7bE1hDtzgU7qfON3AXzfHCpnsfCzskkAQgrEkf_7qRR9JGkeZ5aT-oGO4ELntjIHwZRJM7nW9JLWN6_e8/s72-c/test1.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-3684649760488356583</id><published>2007-07-25T12:00:00.000+07:00</published><updated>2007-07-25T12:01:08.039+07:00</updated><title type='text'>Linux Foundation names new CTO</title><content type='html'>By Joe &#39;Zonker&#39; Brockmeier  on July 25, 2007 (12:00:00 AM)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The Linux Foundation today announced Markus Rex will become its new Chief Technology Officer (CTO) and lead its Linux Standard Base (LSB) initiative and other standardization and technical initiatives for the foundation.&lt;br /&gt;&lt;br /&gt;In an email interview, Rex said that he began using Linux in 1992. He joined SUSE in 1999 and ran engineering for five years before SUSE was purchased by Novell. After the acquisition, he served as vice president and general manager for SUSE Linux, and as CTO for Novell&#39;s Open Platform Solutions Group.&lt;br /&gt;&lt;br /&gt;Rex has been involved with the foundation for some time. &quot;For the last three years I was a member of the board of directors for both predecessor organizations, the Free Standards Group and OSDL, and up to today also a board member for the Linux Foundation. For many years I followed the standardization efforts in Linux, also by actively directing SUSE and Novell to always certify its products and make successful LSB certification a product requirement.&quot;&lt;br /&gt;&lt;br /&gt;The primary job facing Rex is heading up the LSB. When asked about his plans for the LSB, Rex says one of his goals is &quot;to increase the adoption of LSB by application vendors.&quot; He says that adoption by Linux vendors is &quot;solid,&quot; but &quot;ISVs are still looking for broader scope. I plan to provide that to allow more applications to be LSB-compliant.&quot;&lt;br /&gt;&lt;br /&gt;To do that, Rex says that the foundation needs to &quot;include additional libraries and interfaces, so more application use-cases are covered by the LSB.&lt;br /&gt;&lt;br /&gt;&quot;Our tools and documentation for developers need to increase in volume and scope, and we have to make it really easy to validate conformance. Our project with the Russian Academy of Science to create a sophisticated test framework is an important step in that direction and lays the foundation for other improvements.&quot;&lt;br /&gt;&lt;br /&gt;Rex says that the LSB is vitally important. &quot;We have to prevent Linux from fragmenting like Unix did, and the LSB is a critical component to help with that.&quot;&lt;br /&gt;&lt;br /&gt;As CTO, Rex says that his job will be to lead &quot;all technical initiatives for the Linux Foundation,&quot; which includes the LSB as well as efforts like the open printing workgroup. He also says he will be &quot;the primary technical interface to LF members and the LF&#39;s Technical Advisory Board who represent the kernel community.&quot;&lt;br /&gt;&lt;br /&gt;The CTO position has a limited tenure. Rex is slated to end his term in 2008 and return to Novell at that time, according to the release from the Linux Foundation.&lt;br /&gt;&lt;br /&gt;Previous CTO Ian Murdock joined Sun Microsystems in March, and has been working on Project Indiana -- an objective to make Sun&#39;s OpenSolaris more like Linux.&lt;br /&gt;(Source:http://www.linux.com/feature/118212)</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/3684649760488356583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/3684649760488356583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3684649760488356583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3684649760488356583'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/linux-foundation-names-new-cto.html' title='Linux Foundation names new CTO'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-8613844103232122330</id><published>2007-07-21T12:48:00.000+07:00</published><updated>2008-12-10T20:30:29.689+07:00</updated><title type='text'>Who will be the winner?</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFs0AGZvZc6N_0VDbPNWqbOrlYitiHfCJk3tlpYjHRM1skItr-4bdv0dRVYv8q2ZtzhJXJ6ILC4eyi0pukFFVHQgV78Hx_onYwj0txSUwPfKbVQxrUPM1wPYoWcbjfV_-MlMk59FCju5s/s1600-h/set.jpg&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFs0AGZvZc6N_0VDbPNWqbOrlYitiHfCJk3tlpYjHRM1skItr-4bdv0dRVYv8q2ZtzhJXJ6ILC4eyi0pukFFVHQgV78Hx_onYwj0txSUwPfKbVQxrUPM1wPYoWcbjfV_-MlMk59FCju5s/s320/set.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5089526175696692962&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Who will be the winner of the Vietnam-Iraq match?&lt;br /&gt;Last day, my answer was Vietnam, but today, after reading the article about Iraq, I don&#39;t care the result. If our team win, our country will very happy. But if Iraq win, they do a great thing. All of them come from a country in war. The war destroy  their country day by day. And they play football but they don&#39;t know whenever they alive or die. &lt;br /&gt;FIFA goal program help Iraq construct their sports infrastructure, but the values of 300.000 USD each year is not enough. Iraq was a reach country. But war destroyed all. So sad.&lt;br /&gt;I hope the result will be 1-1 and Vietnam win with a gold score of Cong Vinh at extra time.</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/8613844103232122330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/8613844103232122330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8613844103232122330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/8613844103232122330'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/who-will-be-winner.html' title='Who will be the winner?'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFs0AGZvZc6N_0VDbPNWqbOrlYitiHfCJk3tlpYjHRM1skItr-4bdv0dRVYv8q2ZtzhJXJ6ILC4eyi0pukFFVHQgV78Hx_onYwj0txSUwPfKbVQxrUPM1wPYoWcbjfV_-MlMk59FCju5s/s72-c/set.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-3778687371344461275</id><published>2007-07-19T16:29:00.000+07:00</published><updated>2008-12-10T20:30:29.869+07:00</updated><title type='text'>VietNam v Iraq at Asian 2007 quarter-final.</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPd065Le4xsMvfFG6V7WA8lTM85loTsuBTbBRHx2MPv_41g4vLcFPGiZvKXD4jRzFv_OPk9JVgxnpIKu6-Wt3hJ6hgQEL9ywJYQCCcbO3hif5JbHH4IUqUB179MI8LILJHP0Im0-agpIg/s1600-h/vnteam.jpg&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPd065Le4xsMvfFG6V7WA8lTM85loTsuBTbBRHx2MPv_41g4vLcFPGiZvKXD4jRzFv_OPk9JVgxnpIKu6-Wt3hJ6hgQEL9ywJYQCCcbO3hif5JbHH4IUqUB179MI8LILJHP0Im0-agpIg/s320/vnteam.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5088845121646521330&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Iraq has showed their strong before Australia, Thailand. They are a big team. I wonder how they play football as their country is in war. It&#39;s  suprised, very suprised. I did  not watch their match against Australia, but they won 2-0, a result which i couldn&#39;t believe. Australia has a wonderful World Cup and at this time, they have many stars in their team. Tim Cahill, Viduka, Kewell,...has many years playing football in EU. They has experience in Champions League. But Iraq beat them. This result with the win of Vietnam against U.A.E are two wonderful things of this Asian Cup.&lt;br /&gt;At 21.07, our team, Vietnam, will play a match which Tai Em, an important mid-field player of our team, absent. He will get married with his girl friend, Mai Thi Khanh Van, my beautiful girl classmate. :D. But that&#39;s not a problem, missing him, Minh Chuyen, a young Olympic player,will got a good chance to show his ability.&lt;br /&gt;I think next match our team will draw Iraq 0-0 after the first haft and we will score a goal a the beginning of the second haft, and the scorer will be Minh Phuong  or Vu Phong with a long shoot. After that, we will play the defense- attack strategy. :D. Hehe, and 1-0 will be the final result for our team.</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/3778687371344461275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/3778687371344461275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3778687371344461275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3778687371344461275'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/vietnam-v-iraq-at-asian-2007-quarter.html' title='VietNam v Iraq at Asian 2007 quarter-final.'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPd065Le4xsMvfFG6V7WA8lTM85loTsuBTbBRHx2MPv_41g4vLcFPGiZvKXD4jRzFv_OPk9JVgxnpIKu6-Wt3hJ6hgQEL9ywJYQCCcbO3hif5JbHH4IUqUB179MI8LILJHP0Im0-agpIg/s72-c/vnteam.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-6146204229010100228</id><published>2007-07-19T07:14:00.000+07:00</published><updated>2007-07-25T13:11:41.543+07:00</updated><title type='text'>Deal with Google</title><content type='html'>&lt;span style=&quot;font-family: courier new;&quot;&gt;Last week, I searched in internet for something new to apply it in my new website. I&#39;m so interesting in features Google supply, especially Google map and Ajax search. At this time, I use ASP.net Ajax. It&#39;s cool too. And I wonder which one is better? So hard to answer. But I&#39;ll answer that question after next one or two month.&lt;br /&gt;Two day ago, i managed to find out all cool feature of Goolgle. Oh,Haha, geat. I like that. And I will use these Google tools in my new next project. &lt;br /&gt;(I just use Google &lt;span style=&quot;font-weight:bold;&quot;&gt;money &lt;/span&gt;in this blog, the other feature are not. ;)) )&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/6146204229010100228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/6146204229010100228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6146204229010100228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/6146204229010100228'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/deal-with-google.html' title='Deal with Google'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-5159038286910649263</id><published>2007-07-18T13:48:00.000+07:00</published><updated>2007-07-18T14:43:01.712+07:00</updated><title type='text'>How do you manage your future?</title><content type='html'>&lt;span style=&quot;font-family: courier new;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Have you ever ask you some question about you future?&lt;br /&gt;I think you have. But do you find the answer? If yes, you so lucky.&lt;br /&gt;With me, there are many things to worry about.&lt;br /&gt;The first thing, It is always in my mind, how is your current job? Sometime I wonder it is better if I change my job?&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/5159038286910649263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/5159038286910649263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/5159038286910649263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/5159038286910649263'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/how-do-you-manage-your-future.html' title='How do you manage your future?'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-3290206258325331834</id><published>2007-07-17T08:51:00.000+07:00</published><updated>2008-12-10T20:30:30.097+07:00</updated><title type='text'>Vietnam has a position in Asian cup 2007 quater-final challenge</title><content type='html'>&lt;a style=&quot;font-family: courier new;&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihsgKziHx81zqeNGs9OwA0JGk6v_bb6sWCxGqE0yXg_uCXrGFGgovrUtOTAghX_GNH2Z-CkzxxuAjDGtr2CEN-R6-3J08dEfVDRPSGlfhItZTDzfzV90-2TclvaM9zpBOdulHO4WOiDM8/s1600-h/VN+flag.jpeg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihsgKziHx81zqeNGs9OwA0JGk6v_bb6sWCxGqE0yXg_uCXrGFGgovrUtOTAghX_GNH2Z-CkzxxuAjDGtr2CEN-R6-3J08dEfVDRPSGlfhItZTDzfzV90-2TclvaM9zpBOdulHO4WOiDM8/s320/VN+flag.jpeg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5087979191815138082&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;So great.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Despite our team loss 1-4 Japan but the win 2-1 of UAE between Quatar help us has a position in the quarter-final of Asian cup 2007 (we are co-host). At the time Quatar score the last goal, we so happy and before that we always hope that 1-1 will be the result of the game but UAE did better than that. Thank you UAE.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/3290206258325331834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/3290206258325331834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3290206258325331834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/3290206258325331834'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/vietnam-has-position-in-asian-cup-2007.html' title='Vietnam has a position in Asian cup 2007 quater-final challenge'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihsgKziHx81zqeNGs9OwA0JGk6v_bb6sWCxGqE0yXg_uCXrGFGgovrUtOTAghX_GNH2Z-CkzxxuAjDGtr2CEN-R6-3J08dEfVDRPSGlfhItZTDzfzV90-2TclvaM9zpBOdulHO4WOiDM8/s72-c/VN+flag.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2164233235692955316.post-2954813402650593160</id><published>2007-07-16T15:11:00.000+07:00</published><updated>2007-07-19T17:07:17.294+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="coder in Vietnam"/><title type='text'>Keeping you on the go.</title><content type='html'>&lt;span style=&quot;font-family:courier new;&quot;&gt;How to keep you on the go?&lt;br /&gt;That is a big question for me.&lt;br /&gt;I&#39;m reading the book with title &quot;The world is flat&quot;. That book is great. It open a viewpoint for me about our Vietnam country in the future. I know that we have to hard working to keep our country on the go. India and China have years in opening their market, and they become  developed countries. How about our Vietnam country? We open our market step by step. But, let&#39;s thinking about IT field. Nowadays, VietNam is known as an excellent outsource in the world. In our country, the salary for a professor in IT is very cheap but the quality of the job he done is the same as the other in China, India!!!&lt;br /&gt;I hope our country, after become a member of WTO, will be known as a destination of outsource.&lt;br /&gt;Why?&lt;br /&gt;Because i&#39;m a coder. :D&lt;br /&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://truongcongda.blogspot.com/feeds/2954813402650593160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2164233235692955316/2954813402650593160' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/2954813402650593160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2164233235692955316/posts/default/2954813402650593160'/><link rel='alternate' type='text/html' href='http://truongcongda.blogspot.com/2007/07/keeping-you-on-go.html' title='Keeping you on the go.'/><author><name>Truong Cong Da</name><uri>http://www.blogger.com/profile/12990134151248020396</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaE2vwwGLnduK7zSYbNm3VHygzzJRXco5pXyIeVP4CpzgN4kOQJumv8LVG1qg9ZPYCtnDPv8L_0cCm9ezUKJVv-AbOIoCV8UFY1-8dt5jsbhoRVUMdxisx_U5LVnGWQg/s220/144622.jpg'/></author><thr:total>1</thr:total></entry></feed>