//New Customize Sys Develper Method in ax 2012
//Adding new method in Scripts method in ax Development window
Image :
//Class-> xppsource
New method -> Find (Ex)
public Source findMethod(TableName _tableName)
{
str method;
DictTable dictTable;
DictIndex dictIndex;
DictField dictField;
FieldName fieldName;
DictType dictType;
DictEnum dictEnum;
int fieldCount;
int i;
container fields1;
container fields2;
container fields3;
IdentifierName varName;
IdentifierName varType;
;
method = 'public static %1 find' + '(%2, boolean _forUpdate = false)%5' + '{%5' + ' %1 table;%5' + '%5' + ' if (%3)%5' +
' {%5' +' if (_forUpdate)%5' + ' table.selectForUpdate(_forUpdate);%5' + '%5' + ' select firstOnly table%5' + ' where %4;%5' +
' }%5' + ' return table;%5' + '}';
dictTable = new DictTable(tableName2id(_tableName));
dictIndex = dictTable.indexObject(
dictTable.replacementKey() ?
dictTable.replacementKey() :
dictTable.primaryIndex());
if (dictIndex)
{
fieldCount = dictIndex.numberOfFields();
for (i = 1; i <= fieldCount; i++)
{
dictField = new dictField(
dictTable.id(),
dictIndex.field(i));
fieldName = dictField.name();
varName = '_' + strLwr(subStr(fieldName,1,1)) +
subStr(fieldName,2,strLen(fieldName)-1);
if (dictField.typeId())
{
dictType = new DictType(dictField.typeId());
varType = dictType.name();
}
else if (dictField.enumId())
{
dictEnum = new DictEnum(dictField.enumId());
varType = dictEnum.name();
}
else
{
throw error(strfmt("Field '%1' type is not defined",fieldName));
}
fields1 += strFmt('%1 %2',varType,varName);
fields2 += varName;
fields3 += strFmt('table.%1 == %2',fieldName,varName);
}
}
source = strFmt(method,_tableName,con2Str(fields1,', '),con2Str(fields2, ' && '),con2Str(fields3, #newLine + strRep(' ', 14) + '&& '),#newLine);
return source;
}
// Class->EditorScrpts
public void template_method_find(Editor _editor)
{
TreeNode objNode;
xppSource xpp;
Source template;
objNode = EditorScripts::getApplObjectNode(_editor);
if (!objNode)
{
return;
}
_editor.gotoLine(1);
_editor.firstLine();
while (_editor.moreLines())
{
_editor.deleteLines(1);
_editor.nextLine();
}
xpp = new xppSource();
template = xpp.findMethod(objNode.AOTname());
_editor.insertLines(template);
}
//Class->EditorScripts->Method(isApplicableMethod)
case methodStr(EditorScripts, template_method_find):
return (_aotNode && _aotNode.treeNodeType().id() == #NT_DBTABLE);
//Final Output in Ax development Workspace
Image:
//Adding new method in Scripts method in ax Development window
Image :
//Class-> xppsource
New method -> Find (Ex)
public Source findMethod(TableName _tableName)
{
str method;
DictTable dictTable;
DictIndex dictIndex;
DictField dictField;
FieldName fieldName;
DictType dictType;
DictEnum dictEnum;
int fieldCount;
int i;
container fields1;
container fields2;
container fields3;
IdentifierName varName;
IdentifierName varType;
;
method = 'public static %1 find' + '(%2, boolean _forUpdate = false)%5' + '{%5' + ' %1 table;%5' + '%5' + ' if (%3)%5' +
' {%5' +' if (_forUpdate)%5' + ' table.selectForUpdate(_forUpdate);%5' + '%5' + ' select firstOnly table%5' + ' where %4;%5' +
' }%5' + ' return table;%5' + '}';
dictTable = new DictTable(tableName2id(_tableName));
dictIndex = dictTable.indexObject(
dictTable.replacementKey() ?
dictTable.replacementKey() :
dictTable.primaryIndex());
if (dictIndex)
{
fieldCount = dictIndex.numberOfFields();
for (i = 1; i <= fieldCount; i++)
{
dictField = new dictField(
dictTable.id(),
dictIndex.field(i));
fieldName = dictField.name();
varName = '_' + strLwr(subStr(fieldName,1,1)) +
subStr(fieldName,2,strLen(fieldName)-1);
if (dictField.typeId())
{
dictType = new DictType(dictField.typeId());
varType = dictType.name();
}
else if (dictField.enumId())
{
dictEnum = new DictEnum(dictField.enumId());
varType = dictEnum.name();
}
else
{
throw error(strfmt("Field '%1' type is not defined",fieldName));
}
fields1 += strFmt('%1 %2',varType,varName);
fields2 += varName;
fields3 += strFmt('table.%1 == %2',fieldName,varName);
}
}
source = strFmt(method,_tableName,con2Str(fields1,', '),con2Str(fields2, ' && '),con2Str(fields3, #newLine + strRep(' ', 14) + '&& '),#newLine);
return source;
}
// Class->EditorScrpts
public void template_method_find(Editor _editor)
{
TreeNode objNode;
xppSource xpp;
Source template;
objNode = EditorScripts::getApplObjectNode(_editor);
if (!objNode)
{
return;
}
_editor.gotoLine(1);
_editor.firstLine();
while (_editor.moreLines())
{
_editor.deleteLines(1);
_editor.nextLine();
}
xpp = new xppSource();
template = xpp.findMethod(objNode.AOTname());
_editor.insertLines(template);
}
//Class->EditorScripts->Method(isApplicableMethod)
case methodStr(EditorScripts, template_method_find):
return (_aotNode && _aotNode.treeNodeType().id() == #NT_DBTABLE);
//Final Output in Ax development Workspace
Image:
Enjoy...