//In the Xpp Source Class add this methods :
//1 method => Add this Code
//1 method => Add this Code
Source findMethod(TableName _tableName, boolean _useReplacementKey = false)
{
DictTable dictTable = new DictTable(tableName2id(_tableName));
DictIndex dictIndex = new DictIndex(tableName2id(_tableName),
(_useReplacementKey && dictTable.replacementKey() != 0) ? dictTable.replacementKey() : dictTable.primaryIndex());
DictField dictField;
int fieldIndex;
if (dictIndex == null)
throw error(strFmt("Couldn't find primary index for table %1", _tableName));
// method signature returning the table
source += strFmt('public static %1 find(', _tableName);
// add the primary key fields as the parameters to the find method
for (fieldIndex=1; fieldIndex<=dictIndex.numberOfFields(); fieldIndex++)
{
dictField = new DictField(dictTable.id(), dictIndex.field(fieldIndex));
source += strFmt('%1 _%2, ', extendedTypeId2name(dictField.typeId()), dictField.name());
}
source += strFmt('boolean _update = false)\n');
indentLevel = 0;
this.beginBlock();
// Declare the table
source += this.indent() + strFmt('%1 %1;\n', _tableName);
source += '\n';
// Set update yes/no
source += this.indent() + strFmt('%1.selectForUpdate(_update);\n', _tableName);
// select firstonly
source += this.indent() + strFmt('select firstOnly %1 where', _tableName);
// add the primary key fields in the where clause
for (fieldIndex=1; fieldIndex<=dictIndex.numberOfFields(); fieldIndex++)
{
dictField = new DictField(dictTable.id(), dictIndex.field(fieldIndex));
source += '\n';
source += this.indent() + strFmt(' %1%2.%3 == _%3', ((fieldIndex>1) ? '&& ' : ''), _tableName, dictField.name());
}
source += ';\n';
source += '\n';
// return the buffer
source += this.indent() + strFmt('return %1;\n', _tableName);
this.endBlock();
return source;
}
//Now paste this method in Editor Script Class
public void template_method_find(Editor editor)
{
xppSource xppSource = new xppSource();
Source template;
str path = editor.path();
TreeNode treeNode = path ? TreeNode::findNode(path) : null;
TableName tableName;
#TreeNodeSysNodeType
if (treeNode)
{
treeNode = treeNode.AOTparent();
if (treeNode && treeNode.treeNodeType().id() == #NT_MEMBERFUNCLIST)
{
treeNode = treeNode.AOTparent();
if (treeNode && treeNode.treeNodeType().id() == #NT_DBTABLE)
{
tableName = treeNode.treeNodeName();
}
}
}
if (!tableName)
{
warning("Find method applies to tables only");
return;
}
template = xppSource.findMethod(tableName);
editor.insertLines(template);
}
//Now test this code for any table. It will create 1 Find Method on the basis of Recid.