Make one class:
class Traverser
{
ExecutePermission perm;
}
private void doTraverse(T_TableFields _T_TableFields)
{
Query q;
QueryBuildDataSource qbds;
QueryRun qr;
Common common;
XppCompiler xppCompiler;
str code = @"%1";
boolean evalResult;
// Constrcut query
q = new Query();
qbds = SysQuery::findOrCreateDataSource(q,_T_TableFields._TableId);
SysQuery::findOrCreateRange(qbds,_T_TableFields._FieldId).value(this.relationalOperator(_T_TableFields.Operator)+_T_TableFields.Value);
// And run query
qr = new QueryRun(q);
while (qr.next())
{
common = qr.get(_T_TableFields._TableId);
if (_T_TableFields.Code)
{
xppCompiler = new XppCompiler();
code = strFmt(_T_TableFields.Code,common.(fieldNum(InventTable,ItemId)));
if (xppCompiler && xppCompiler.compile(code))
{
evalResult = xppCompiler.executeEx();
if (evalResult)
info(strFmt("Table: %1, field: %2, fieldvalue: %3 OK!",common.TableId,common.RecId,common.(_T_TableFields._FieldId)));
}
else
throw error(strFmt("Code in table T_TableFields can't compile. %1. Code:\n%2",xppCompiler.errorText(),code));
}
}
}
public void run()
{
T_TableFields t_tableFields;
perm = new ExecutePermission();
if (perm != null)
{
while select t_tableFields
{
this.doTraverse(T_TableFields);
}
}
CodeAccessPermission::revertAssert();
}
public static void main(Args _args)
{
Traverser traverser;
traverser = new traverser();
if (traverser)
{
traverser.run();
}
}
private str relationalOperator(str _op)
{
switch(_op)
{
case "EQ" : return "==";
case "NEQ" : return "!=";
case "GT" : return ">";
case "LT" : return "<";
}
return "==";
}
The table
T-TableFields
have the fields you mention where
_FieldId is integer and contains 2
_TableId is integer and contains 175
Code is memo-type
Operator is string and contains "NEQ"
Value is string and contains "10"
Code contains the code:
boolean evaluate()
{
InventTable inventTable = InventTable::find("%1");
If (InventTable.ItemType == ItemType::Item)
{
return true;
}
else
{
return false;
}
}
Or get the code here:
onedrive.live.com/redir;authkey=!AMe53BC6_9FE_KE&ithint=folder%2cxpo