<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-36582435</id><updated>2012-02-17T04:32:44.537+01:00</updated><category term='WTSFreeMemory'/><category term='RunBuf'/><category term='extendedDataType'/><category term='OpenProcess'/><category term='Evaluate'/><category term='connection'/><category term='WinAPI'/><category term='GetCurrentProcessId'/><category term='GetProcessMemoryInfo'/><category term='Terminalserver'/><category term='WTSQuerySessionInformation'/><title type='text'>axapta development</title><subtitle type='html'>Something about Axapta/Dynamics AX programming.   Topics: Program code or also only ideas!


Wissenswertes zum Thema Axapta/Dynamics AX - Programmierung. 
Themen: Programmcode oder auch nur Ideen!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://axadev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://axadev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Franz Aigner</name><uri>http://www.blogger.com/profile/15889150570096137540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://photos1.blogger.com/blogger/7864/4089/1600/franz.1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36582435.post-2939787369271528850</id><published>2006-12-21T15:10:00.000+01:00</published><updated>2006-12-21T16:07:14.724+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='GetProcessMemoryInfo'/><category scheme='http://www.blogger.com/atom/ns#' term='GetCurrentProcessId'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenProcess'/><title type='text'>Memory usage of axapta task</title><content type='html'>&lt;span style="font-size:85%;"&gt;On a job client we had some troubles with memory wastage.&lt;br /&gt;The reason was an external application with which we communicate across an OCX.&lt;br /&gt;On each call the application needs more and more memory.&lt;br /&gt;Our experience shows, on about 100MB Axapta crashed.&lt;br /&gt;To solve this problem, our idea was, to monitor the used memory and if axapta reaches an defined limit, to shut down the axapta client.&lt;br /&gt;With windows task manager it should be restartet automatic.  &lt;/span&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:85%;"&gt;Now, after approximately  three weeks in production system, we can say it works without problems, it works marvelously.&lt;/span&gt;&lt;/p&gt;   &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Solution:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Three new WinAPI-functions:&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-style: italic; font-weight: bold;font-size:85%;" &gt;getProcessMemoryInfo&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Retrieves information about the memory usage of the specified process.&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocessmemoryinfo.asp"&gt;Link to ms... &lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;static container getProcessMemoryInfo(int _processHandle)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;{&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    #define.structSize(4*10)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    DLLFunction _getProcessMemoryInfo ;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    Binary struct = new Binary(#structSize);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    DLL _dLL = new DLL(#PSAPIDLL);&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;br /&gt;_getProcessMemoryInfo = new DLLFunction(_DLL, 'GetProcessMemoryInfo');&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;br /&gt;_getProcessMemoryInfo.returns(ExtTypes::DWord);&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;   &lt;br /&gt;_getProcessMemoryInfo.arg(ExtTypes::DWord, &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;ExtTypes::Pointer, &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;ExtTypes::DWord);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    struct.dWord (#offset0, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    struct.dWord (#offset4, #structSize );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    struct.dWord (#offset8, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    struct.dWord (#offset12, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    struct.dWord (#offset16, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    struct.dWord (#offset20, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord (#offset24, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord (#offset28, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord (#offset32, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord (#offset36, 0 );&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;if (_getProcessMemoryInfo.call(_processHandle, struct, #structSize))&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;{&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-style: italic;font-size:85%;" &gt;return [struct.dWord(#offset0),&lt;br /&gt;              &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord(#offset4), &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;&lt;br /&gt;              struct.dWord(#offset8),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;               &lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord(#offset12),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;               &lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord(#offset16),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;               &lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord(#offset20),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;               &lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord(#offset24),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;                  struct.dWord(#offset28),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;               &lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord(#offset32),&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;               &lt;span style="font-style: italic;font-size:85%;" &gt;struct.dWord(#offset36)];&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;    }&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="font-style: italic;font-size:85%;" &gt;&lt;br /&gt;return conNull();&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;getCurrentProcessId&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Retrieves the process identifier of the calling process.&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getcurrentprocessid.asp"&gt;Link to ms...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;client server static int getCurrentProcessId()&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;{&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;//The return value is the process identifier of the calling process.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;DLL winApiDLL = new DLL(#KERNELDLL);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;DLLFunction getCurrentProcessId = new DLLFunction(winApiDLL, 'GetCurrentProcessId');&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;getCurrentProcessId.returns(ExtTypes::DWord);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;return getCurrentProcessId.call();&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;OpenProcess&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Opens an existing local process object.&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/openprocess.asp"&gt;Link to ms...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;static int openProcess(boolean _openForQuery = true, int _processId = winapi::getCurrentProcessId())&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;{&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;//If the function succeeds, the return value is an open handle of the specified process.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;#define.PROCESS_QUERY_INFORMATION (1024) //&amp;h400&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;#define.PROCESS_VM_READ (16) //&amp;h10&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;#define.PROCESS_ALL_ACCESS (2035711) //&amp;H1F0FFF&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;DLL _winApiDLL = new DLL('KERNEL32');&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;DLLFunction _openProcess = new DLLFunction(_winApiDLL, 'OpenProcess');&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;int call = _openForQuery ? #PROCESS_QUERY_INFORMATION : #PROCESS_ALL_ACCESS;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;_openProcess.returns(ExtTypes::DWord);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;_openProcess.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;return _openProcess.call(call, 0, _processId);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;Usage:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Simple job:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;static int getCurrentMemoryUsage(boolean _kiloByte = true)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;{&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;hwnd curhwnd = winapi::openProcess();&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;container memInfo;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;memInfo = winapi::getProcessMemoryInfo(curhwnd);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;winapi::closeHandle(curhwnd);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;if(_kiloByte)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;return conpeek(memInfo, 4) / 1024;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;else&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;return conpeek(memInfo, 4);&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36582435-2939787369271528850?l=axadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axadev.blogspot.com/feeds/2939787369271528850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36582435&amp;postID=2939787369271528850' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/2939787369271528850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/2939787369271528850'/><link rel='alternate' type='text/html' href='http://axadev.blogspot.com/2006/12/memory-usage-of-axapta-task.html' title='Memory usage of axapta task'/><author><name>Franz Aigner</name><uri>http://www.blogger.com/profile/15889150570096137540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://photos1.blogger.com/blogger/7864/4089/1600/franz.1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36582435.post-2129685417798483429</id><published>2006-12-07T20:26:00.000+01:00</published><updated>2006-12-07T21:09:34.132+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Evaluate'/><category scheme='http://www.blogger.com/atom/ns#' term='RunBuf'/><title type='text'>RunBuf (Evaluate), a wonderful function</title><content type='html'>&lt;span style="font-size:85%;"&gt;"RunBuf" or in other development environment "evaluate" is a very nice function,&lt;br /&gt;it helps me to save a lot of time for to develop a complex parameter table stucture&lt;br /&gt;&lt;br /&gt;Call the function below with something like this&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;    evaluateFormularWithCommon(SalesTable::find("252"), "SalesTable::find(_common.(fieldnum(SalesTable, SalesId))).SalesName")&lt;/blockquote&gt;&lt;/span&gt;you get the value of the field "Name" of the salesTable!&lt;br /&gt;&lt;br /&gt;This looks like an stupid idea, but in some situation it could be very helpfully!&lt;br /&gt;In our situation i have an common as table variable and an string which comes from an parameter table.&lt;br /&gt;So the function returns the value of the formular-string in the Parameter-table. Very Nice!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;static container evaluateFormularWithCommon(Common          _common,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                                            str             _formular)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    /*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    franz aigner 20061127&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    returnvalue:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    [Result (str), ReturnState (boolean)]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ReturnState: False --&gt; Error, True --&gt; OK&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Instruction:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Sampleformula:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    SalesTable::find(_common.(fieldnum(SalesTable, SalesId))).SalesName&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    in this sample, in the formula the reference of the source table must be the string '_common'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    no semicolon at the end of the formular&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    the return value must be a string&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    XPPCompiler                 comp = new XPPCompiler();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    str                         formular;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    str toStr(AnyType _value)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        if(typeOf(_value)==Types::String || typeOf(_value)==Types::VarString)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            return strFmt("%1", _value);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        return strFmt("%1", _value);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    formular = 'AnyType evaluateFormularWithCommon(Common _common){return '+_formular+";}";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    if(comp.compile(formular))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        return [tostr(runbuf(formular, _common)), True];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        return ["", false];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Navison Axapta Help:&lt;br /&gt;RunBuf&lt;br /&gt;&lt;br /&gt;Anytype RunBuf(str job, ...)&lt;br /&gt;&lt;br /&gt;Description&lt;br /&gt;RunBuf executes the X++ job represented as text in job.&lt;br /&gt;Job is a complete piece of X++ code and arguments can be specified by&lt;br /&gt;appending them as arguments to RunBuf.&lt;br /&gt;If the job returns a value, this value is the return value from RunBuf.&lt;br /&gt;Otherwise RunBuf returns 0 (zero).&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;str myjob = "int myfunc(int i){ return i+7;}";&lt;br /&gt;print runbuf(myjob,5);&lt;br /&gt;will print the number 12 when executed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Info:&lt;br /&gt;This idea comes from &lt;a href="http://www.axaptapedia.com/Tabax"&gt;tabax X++calculator&lt;/a&gt;!!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36582435-2129685417798483429?l=axadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axadev.blogspot.com/feeds/2129685417798483429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36582435&amp;postID=2129685417798483429' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/2129685417798483429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/2129685417798483429'/><link rel='alternate' type='text/html' href='http://axadev.blogspot.com/2006/12/runbuf-evaluate-wonderful-function.html' title='RunBuf (Evaluate), a wonderful function'/><author><name>Franz Aigner</name><uri>http://www.blogger.com/profile/15889150570096137540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://photos1.blogger.com/blogger/7864/4089/1600/franz.1.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36582435.post-116319190294553763</id><published>2006-11-10T21:47:00.000+01:00</published><updated>2006-12-07T21:58:37.877+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WTSQuerySessionInformation'/><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><category scheme='http://www.blogger.com/atom/ns#' term='WTSFreeMemory'/><category scheme='http://www.blogger.com/atom/ns#' term='Terminalserver'/><title type='text'>WTSQuerySessionInformation</title><content type='html'>&lt;span style="font-size:85%;"&gt;The &lt;b&gt;WTSQuerySessionInformation&lt;/b&gt;      function retrieves session information for the specified session on the specified terminal server.&lt;br /&gt;&lt;br /&gt;With the function below you can find out the ip-Address of the client-computer if they logged in on a terminal server!&lt;br /&gt;Under it, there is a function to get the client machine name!&lt;br /&gt;&lt;br /&gt;Take a look to&lt;br /&gt;&lt;a href="http://www.microsoft.com/Businesssolutions/Community/NewsGroups/dgbrowser/en-us/default.mspx?dg=microsoft.public.axapta&amp;tid=99f246d6-32ce-463c-85fa-41bc23778658&amp;amp;amp;amp;amp;amp;amp;cat=%C3%A2%C2%8C%C2%A9=en&amp;cr=US&amp;amp;sloc=en-us&amp;m=1&amp;amp;p=1"&gt;http://www.microsoft.com/Businesssolutions.....&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/wtsquerysessioninformation.asp"&gt;http://msdn.microsoft.com/library/...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#define.WTSClientIP(14)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#define.WTS_CURRENT_SESSION(-1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#define.WTS_CURRENT_SERVER_HANDLE(0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#define.structSize(256)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;client server static str getRDPIPAddress()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DLL _winApiDLL = new DLL('WTSAPI32');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DLLFunction _getRDPName = new DLLFunction(_winApiDLL, 'WTSQuerySessionInformationA');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Binary dwPointer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Binary structPointer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Binary structAccess;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;int spRet;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;int dwret;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;str rdpIP = "";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;structpointer = new Binary(4); // will receive the pointer to result struc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;dwPointer = new Binary(4); // wiil receive the length of reult struc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;_getRDPName.returns(ExtTypes::DWORD);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;_getRDPName.arg(ExtTypes::DWORD,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ExtTypes::DWORD,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ExtTypes::DWORD,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ExtTypes::POINTER,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ExtTypes::POINTER);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;if(_getRDPName.call(#WTS_CURRENT_SERVER_HANDLE, #WTS_CURRENT_SESSION,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#WTSClientIP, structpointer, dwpointer) != 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;spRet = structpointer.dWord(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;dwRet = dwPointer.dWord(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;structAccess = new Binary(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;structAccess.attach(spRet,dwRet);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;rdpIP = strfmt("%1", structAccess.byte(6));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;rdpIP = rdpip + "." + strfmt("%1", structAccess.byte(7));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;rdpIP = rdpip + "." + strfmt("%1", structAccess.byte(8));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;rdpIP = rdpip + "." + strfmt("%1", structAccess.byte(9));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;WinAPI::WTSFreeMemory(spRet);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;return rdpIP;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;client static void WTSFreeMemory(int _buffer)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DLL wtsapi32DLL = new DLL('wtsapi32.dll');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;DLLFunction wtsfm = new DLLFunction(wtsapi32DLL, 'WTSFreeMemory');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;wtsfm.arg(ExtTypes::DWord);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;wtsfm.call(_buffer);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To get the client machine name:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;#define.WTSClientName(10)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;client server static str getRDPComputerName()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Franz Aigner 20050922&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    DLL         _winApiDLL = new DLL('WTSAPI32');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    DLLFunction _getRDPName = new DLLFunction(_winApiDLL, 'WTSQuerySessionInformationA');&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Binary      dwPointer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Binary      structPointer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    Binary      structAccess;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    int         spRet;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    int         dwret;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    str         rdpName         =   "";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    structpointer   = new Binary(4); // will receive the pointer to result struc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    dwPointer       = new Binary(4); // wiil receive the length of reult struc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    _getRDPName.returns(ExtTypes::DWORD);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    _getRDPName.arg(ExtTypes::DWORD,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                    ExtTypes::DWORD,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                    ExtTypes::DWORD,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                    ExtTypes::POINTER,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                    ExtTypes::POINTER);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    if(_getRDPName.call(#WTS_CURRENT_SERVER_HANDLE, #WTS_CURRENT_SESSION,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;                        #WTSClientName, structpointer, dwpointer) != 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        spRet           = structpointer.dWord(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        dwRet           = dwPointer.dWord(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        structAccess    = new Binary(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        structAccess.attach(spRet,dwRet);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        rdpName         = structAccess.string(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    WinAPI::WTSFreeMemory(spRet);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    return rdpName;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36582435-116319190294553763?l=axadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axadev.blogspot.com/feeds/116319190294553763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36582435&amp;postID=116319190294553763' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116319190294553763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116319190294553763'/><link rel='alternate' type='text/html' href='http://axadev.blogspot.com/2006/11/wtsquerysessioninformation.html' title='WTSQuerySessionInformation'/><author><name>Franz Aigner</name><uri>http://www.blogger.com/profile/15889150570096137540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://photos1.blogger.com/blogger/7864/4089/1600/franz.1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36582435.post-116281126406674517</id><published>2006-11-06T12:07:00.000+01:00</published><updated>2006-12-07T21:15:30.707+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='connection'/><category scheme='http://www.blogger.com/atom/ns#' term='extendedDataType'/><title type='text'>Find out the string length of an extendedDataType!</title><content type='html'>&lt;span style="font-size:85%;"&gt;Find out the string length of an extendedDataType --&gt; was necessary for me as i wrote an select-statement with the connection-class.&lt;br /&gt;&lt;br /&gt;static void TestJob(Args _args)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;Dictionary&lt;/span&gt;&lt;span style="font-size:85%;"&gt;          &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dict;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;DictType&lt;/span&gt;&lt;span style="font-size:85%;"&gt;            &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dict&lt;/span&gt;&lt;span style="font-size:85%;"&gt;        &lt;/span&gt;&lt;span style="font-size:85%;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;   &lt;/span&gt;&lt;span style="font-size:85%;"&gt;new Dictionary();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType&lt;/span&gt;&lt;span style="font-size:85%;"&gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;=&lt;/span&gt;&lt;span style="font-size:85%;"&gt;   &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dict.typeObject(dict.typeName2Id(extendedtypestr(AccountName)));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;                  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;    &lt;/span&gt;&lt;span style="font-size:85%;"&gt;info(strfmt("Name : %1 \nId: %2 \nStringLength: %3 \nAdjustment: %4 \nLabel: %5 \nHelp: %6 \nBasetype: %7",&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType.name(),&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType.id(),&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType.stringLen(),&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType.stringRight() ? "Right" : "Left",&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType.label(),&lt;o:p&gt;&lt;/o:p&gt; &lt;/span&gt;&lt;span style="font-size:85%;"&gt;dictType.help(),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; int2str(dictType.baseType()) + " - " + enum2Value(dictType.baseType())));&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36582435-116281126406674517?l=axadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axadev.blogspot.com/feeds/116281126406674517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36582435&amp;postID=116281126406674517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116281126406674517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116281126406674517'/><link rel='alternate' type='text/html' href='http://axadev.blogspot.com/2006/11/find-out-string-length-of.html' title='Find out the string length of an extendedDataType!'/><author><name>Franz Aigner</name><uri>http://www.blogger.com/profile/15889150570096137540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://photos1.blogger.com/blogger/7864/4089/1600/franz.1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36582435.post-116246646922262407</id><published>2006-11-02T12:19:00.000+01:00</published><updated>2006-12-07T21:16:28.043+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinAPI'/><title type='text'>MakeSureDirectoryPathExists</title><content type='html'>The powerfully WinApi-Function 'MakeSureDirectoryPathExists' implementet in X++!&lt;br /&gt;&lt;br /&gt;The MakeSureDirectoryPathExists function creates all the directories in the specified _filePath, beginning with the root.&lt;br /&gt;&lt;br /&gt;This function resides in imagehlp.dll, but also in&lt;br /&gt;dbghelp.dll.&lt;br /&gt;Take a look to &lt;a href="http://msdn2.microsoft.com/en-us/library/ms680352.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms680352.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;static int MakeSureDirectoryPathExits(FilePath         _filePath)&lt;br /&gt;{&lt;br /&gt;  /*&lt;br /&gt;  fa 20061102&lt;br /&gt;  Returnvalue:&lt;br /&gt;      0... OK&lt;br /&gt;      &gt;0.. Error&lt;br /&gt;  */&lt;br /&gt;&lt;br /&gt;  #define.imagehlp('imagehlp.dll')&lt;br /&gt;  DLL         winApiDLL      = new DLL(#imagehlp);&lt;br /&gt;  DLLFunction pathExits      = new DLLFunction(winApiDLL, 'MakeSureDirectoryPathExists');&lt;br /&gt;  int         retVal         = 0;&lt;br /&gt;  ;&lt;br /&gt;  if(substr(_filePath, strlen(_filePath), 2) != "\\")&lt;br /&gt;      _filePath   +=  "\\";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  pathExits.returns(ExtTypes::DWord);&lt;br /&gt;  pathExits.arg(ExtTypes::String);&lt;br /&gt;&lt;br /&gt;  if (pathExits.call(_filePath) == 0)&lt;br /&gt;  {&lt;br /&gt;      retVal  = WinAPI::getLastError();&lt;br /&gt;      retVal  = retVal == 0 ? 1 : retVal;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return retVal;&lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36582435-116246646922262407?l=axadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axadev.blogspot.com/feeds/116246646922262407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36582435&amp;postID=116246646922262407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116246646922262407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116246646922262407'/><link rel='alternate' type='text/html' href='http://axadev.blogspot.com/2006/11/makesuredirectorypathexists.html' title='MakeSureDirectoryPathExists'/><author><name>Franz Aigner</name><uri>http://www.blogger.com/profile/15889150570096137540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://photos1.blogger.com/blogger/7864/4089/1600/franz.1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36582435.post-116237747158175625</id><published>2006-11-01T11:25:00.000+01:00</published><updated>2006-11-10T21:06:57.540+01:00</updated><title type='text'>First-Blog</title><content type='html'>In my programmer career I looked for and also found solutions to problems often times in the Internet.&lt;br /&gt;Therefore I think, it also for me at the time to perform a contribution for the Internet community.&lt;br /&gt;In this Blog I would like to publish ideas, solutions and also program code about Axapta/Dynamics AX programming.&lt;br /&gt;#####################################################&lt;br /&gt;In meiner Programmiererlaufbahn habe ich oftmalig im Internet Lösungen zu Problemen gesucht und auch gefunden.&lt;br /&gt;&lt;br /&gt;Daher denke ich, ist es auch für mich an der Zeit einen Beitrag für die Internetgemeinschaft zu leisten.&lt;br /&gt;&lt;br /&gt;In diesem Blog möchte ich Ideen, Lösungsansätze und auch Programmcode zum Thema Axapta/Dynamics AX Programmierung veröffentlichen.&lt;br /&gt;&lt;br /&gt;lg Franz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36582435-116237747158175625?l=axadev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://axadev.blogspot.com/feeds/116237747158175625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=36582435&amp;postID=116237747158175625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116237747158175625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36582435/posts/default/116237747158175625'/><link rel='alternate' type='text/html' href='http://axadev.blogspot.com/2006/11/first-blog.html' title='First-Blog'/><author><name>Franz Aigner</name><uri>http://www.blogger.com/profile/15889150570096137540</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://photos1.blogger.com/blogger/7864/4089/1600/franz.1.jpg'/></author><thr:total>0</thr:total></entry></feed>
