【问题标题】:Is there an eval() equivalent in apex/Salesforce?apex/Salesforce 中是否有 eval() 等效项?
【发布时间】:2013-07-31 14:35:00
【问题描述】:

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

【问题讨论】:

    标签: salesforce eval apex-code


    【解决方案1】:

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

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

    【讨论】:

    • 好主意。谢谢,我试试看。
    【解决方案2】:

    可以通过调用 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

    使用我的示例,Apex 将类似于:

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

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

    顺便说一句,Salesforce Stackexchange site 是询问 Salesforce 特定问题的好地方。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多