Thursday, December 8, 2011

By in group by is optional

public static void GroupBy(Args _args)
{
InventTable inventTable;
while select inventTable
group by itemGroupid
{
info(inventtTable.itemGroupId);
}
while select inventTable
group itemGroupId
{
info(inventTable.itemGroupId);
}

}

Here both will give same output. Really funny.

Saturday, May 7, 2011

Thursday, March 10, 2011

How to identify unused labels in application

We often creates labels in our development environment and we not use the labels.Following is a job to identify unused labels in application .

Here my label file is IFC

static void I4C_UnusedLabels(Args _args)
{
str 50 labelId;
int i;
int maxLabel = 2000;
xRefNames names;
XRefReferences ref;

str info = "LabelId#LabelStr\n"
;

while (i <= maxLabel) {
labelId = "@IFC" + int2str(i);
// The particular label file.
select recid from names
where names.Name == labelid
exists join ref
where names.RecId == ref.xRefNameRecId;

if (! names.RecId)
{
info += strfmt("%1#%2\n", labelId,
SysLabel::labelId2String(labelId));
}

i++;
}

}

Friday, August 6, 2010

How To Cache A object Globally in Ax

There are three way to cache objects.

A global cache is an instance of class - SysGlobalCache, which is nothing but a Map containing Maps with a Key. These Maps contain the actual value and a key.
In Ax, we have three Global Cache Classes

1.Infolog.globalCache()

2.Appl.globalCache()

3. ClassFactory.GlobalCache().

How to use:

static void GlobalCacheSetAndGet(Args _args)
{
SysGlobalCache globalCache;
class test;
;

globalCache = infolog.globalCache();

if (globalCache.isSet(classstr(test), 0))
{
test= globalCache.get(classstr(Test), 0);
return test;
}
else
{
test= new test();
globalCache.set(classstr(Test), 0, test);
return test;
}

}

Sunday, July 25, 2010

Setting max buffer size in Ax2009 for AIF

In Dynamics AX 2009 it can happen that a lengthy operation terminates with the following error message in the InfoLog:
Error executing code: Insufficient memory to run script.
A typical example that can result in this error message is when you are running the Reverse Engineering Tool of Dynamics AX 4.0 SP1. Another very common situation is when you are trying to process very large AIF messages with several thousand lines within AX or within an application that uses the Business Connector like the AX BizTalk Adapter.
With Dynamics AX 4.0 a new mechanism was introduced to limit the maximum amount of memory that can be allocated by variables (in X++ code) in a session. This maximum amount is set to 10 MB by default. For some operations like large AIF messages (that are stored in memory during processing) this is however not enough and so the operation is terminated when the maximum amount is reached.
The second part of the error message "Insufficient memory to run script." clearly indicates that this buffer was reached. It is possible to increase the buffer size in the windows registry by changing the following registery enteries


Key name: [HKEY_CURRENT_USER\Software\Microsoft\Dynamics\5.0\Configuration\(configuration name)] Value name: maxbuffersize Value type: REG_SZ Value: (Maximum amount of memory in MB or 0 for no limit)
For Dynamics AOS it is the following registry key Key name: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dynamics Server\5.0\(AOS instance)] Value name: maxbuffersize Value type: REG_SZ Value: (Maximum amount of memory in MB or 0 for no limit)
 This registry entry does, by default, not exist.
 It is recommended not to use value ‘0’ for ‘no limit’.
 After making changes to this registry value, ensure that the Dynamics service and/or client is restarted.