public object resultFunction(cReportFormula formula)
{
String code = "";
object[] vResult = null;
m_objGlobals.setMode(eReportCompilerMode.C_RESULT);
m_ctrlName = formula.getControlName();
vResult = new object[formula.getFormulasInt().count()];
cReportFormulaInt fint = null;
for (int _i = 0; _i < formula.getFormulasInt().count(); _i++)
{
fint = formula.getFormulasInt().item(_i);
vResult[_i] = pResultFunctionInt(fint);
}
// we check if the code has scripting or is only
// calls to internal functions
//
code = formula.getTextC().Replace(C_KEYFUNCINT, "");
code = code.Replace(" ", "");
// if after removing calls to internal functions and spaces
// there is only a number we don't have scripting
//
if (G.isNumeric(code))
{
if (vResult.Length > 0)
{
formula.setLastResult(vResult[0]);
formula.setHaveToEval(false);
return formula.getLastResult();
}
// the function can be only a constant (it is used in Cairo navigation)
//
else
{
return code;
}
}
else
{
code = formula.getTextC();
var parameters = "";
for (int i = 0; i < vResult.Length; i++)
{
// if one argument is null it means we don't have a row for this formula
// so we don't need to compile the code
//
if (vResult[i] == null)
{
return null;
}
/* TODO: remove me
code = code.Replace(C_KEYFUNCINT + cReportGlobals.format(i + 1, "000"),
getNumericVal(vResult[i].ToString()));
* */
var parameter = "p__" + i + "__";
parameters += parameter + ",";
code = code.Replace(C_KEYFUNCINT + cReportGlobals.format(i + 1, "000"), parameter);
var paramValue = m_objGlobals.getVar(parameter);
if (paramValue == null) {
paramValue = m_objGlobals.addVar(parameter);
}
paramValue.setValue(vResult[i]);
}
if (parameters.Length > 0)
{
parameters = parameters.Substring(0, parameters.Length - 1);
code = insertParametersIntoFunction(code, parameters);
}
formula.setLastResult(pExecScriptCode(code, formula));
formula.setHaveToEval(false);
return formula.getLastResult();
}
}