在apex / Salesforce中是否有eval()等价物?

时间:2013-07-31 14:35:00

标签: salesforce eval apex-code

我已经调查了这个,似乎没有直接相关的功能可用,因为Apex是如此强类型,但我想知道是否有人找到了解决方法。我正在设计一个信用风险对象,我的客户希望能够在更新字段时插入诸如“150 + 3”而不是“153”的表达式,以帮助加快她的速度。不幸的是,我是salesforce的新手,因此我无法提出想法。这甚至可行吗?

3 个答案:

答案 0 :(得分:1)

您可以允许手动输入SOQL语句,然后使用动态SOQL来处理它们。但这需要比“150 + 3”多一点。

否则,您可以在JavaScript中执行此操作,并将值作为已计算的数字传递回Apex。

答案 1 :(得分:1)

可以通过在Tooling或Apex API上调用executeAnonymous API方法来模拟Apex中的Javascript eval()。

技巧是你需要在eval字符串体中传递任何所需的输入参数。如果需要响应,则需要一种机制来提取它。

有两种常见方法可以从executeAnonymous获取响应。

  1. 在执行结束时抛出故意的异常并包含响应。 Kevin在EVAL() in Apex. Secure Dynamic Code Evaluation on the Salesforce1 Platform中介绍了这种方法。
  2. 我使用了这种方法的一种变体,但是通过调试日志而不是故意的异常返回了响应。见Adding Eval() support to Apex
  3. 使用我的例子,A​​pex就像:

    integer sum = soapSforceCom200608Apex.evalInteger(
                    'integer result = 150 + 3; System.debug(LoggingLevel.Error, result);');
    

    您可能无法在成员初始化期间或构造函数中执行标注。

    顺便说一下,Salesforce Stackexchange site是向Salesforce提出具体问题的好地方。

答案 2 :(得分:0)

Script.apex可以帮助评估javascript表达式。看一下这个。 https://github.com/Click-to-Cloud/Script.apex。就像这一样简单。

整数结果=(整数)ScriptEngine.getInstance()。eval(' 1 + 2');