Thursday, December 07, 2006

RunBuf (Evaluate), a wonderful function

"RunBuf" or in other development environment "evaluate" is a very nice function,
it helps me to save a lot of time for to develop a complex parameter table stucture

Call the function below with something like this
evaluateFormularWithCommon(SalesTable::find("252"), "SalesTable::find(_common.(fieldnum(SalesTable, SalesId))).SalesName")
you get the value of the field "Name" of the salesTable!

This looks like an stupid idea, but in some situation it could be very helpfully!
In our situation i have an common as table variable and an string which comes from an parameter table.
So the function returns the value of the formular-string in the Parameter-table. Very Nice!



static container evaluateFormularWithCommon(Common _common,
str _formular)
{
/*
franz aigner 20061127
returnvalue:
[Result (str), ReturnState (boolean)]
ReturnState: False --> Error, True --> OK

Instruction:
Sampleformula:
SalesTable::find(_common.(fieldnum(SalesTable, SalesId))).SalesName


in this sample, in the formula the reference of the source table must be the string '_common'
no semicolon at the end of the formular
the return value must be a string
*/
XPPCompiler comp = new XPPCompiler();
str formular;

str toStr(AnyType _value)
{
;
if(typeOf(_value)==Types::String || typeOf(_value)==Types::VarString)
{
return strFmt("%1", _value);
}
return strFmt("%1", _value);
}
;
formular = 'AnyType evaluateFormularWithCommon(Common _common){return '+_formular+";}";

if(comp.compile(formular))
return [tostr(runbuf(formular, _common)), True];
else
return ["", false];
}



Navison Axapta Help:
RunBuf

Anytype RunBuf(str job, ...)

Description
RunBuf executes the X++ job represented as text in job.
Job is a complete piece of X++ code and arguments can be specified by
appending them as arguments to RunBuf.
If the job returns a value, this value is the return value from RunBuf.
Otherwise RunBuf returns 0 (zero).

Example
str myjob = "int myfunc(int i){ return i+7;}";
print runbuf(myjob,5);
will print the number 12 when executed.


Info:
This idea comes from tabax X++calculator!!


4 comments:

Max Belugin said...

there is also an evalBuf function

Muhammad Shujaat Siddiqi said...

but i have studied somewhere that both of evalBuf() and runBuf() requires developer privileges.

is that so??

Franz Aigner said...

I do not know, but it could be! Because the string must be compiled at run-time. Try it?!

cialis said...

In principle, a good happen, support the views of the author