美文网首页
2021-04-08 Salesforce Apex Evalu

2021-04-08 Salesforce Apex Evalu

作者: 古月的小七 | 来源:发表于2021-04-08 14:22 被阅读0次

需求具体如下:在Custom Metadata中配置了不同规则的Expression,例如(TRUE AND (FALSE OR TRUE)) is TRUE,(FALSE AND ((TRUE OR FALSE) AND (TRUE OR FALSE)))。 因为规则是动态可配置的,所以我们需要知道在不同的配置下是否满足这个规则,如果满足则返回True,不满足则返回False。
具体代码的实现如下:

/***************************************************************************************************
* Class Name   : BooleanExpression
* Created Date : Jan 26, 2021
* Author       : He Liu
* Description  : Class to evaluate a boolean expression 
* Example      : (TRUE AND (FALSE OR TRUE)) is TRUE
****************************************************************************************************/
public class BooleanExpression {
    static Map<String, String> logicTypes = new Map<String, String>();
    static Map<String, Map<String, String>> expressionLogic = new Map<String, Map<String, String>>();
    
    /**
    * Evaluate a boolean expreassion 
    * 
    */
    public static Boolean eval(String expression) {        
        // If expression contains all TRUE or FALSE
        if(expression.containsNone('FALSE')) { return TRUE; }        
        if(expression.containsNone('TRUE')) { return FALSE; }

        fillLogic();
        System.debug('Boolean '+Boolean.valueOf(evaluateExpression(expression.toUpperCase())));
        return Boolean.valueOf(evaluateExpression(expression.toUpperCase()));
    }
    
    /**
    * Evaluate the expression
    * 
    */
    public static String evaluateExpression(String expression) {        
        for(String logicType : logicTypes.keySet()) {
            if(expression.contains(logicType)) {
                expression = simplifyExpression(expression, logicTypes.get(logicType));
            }
        }
        
        if(expression.contains('AND') || expression.contains('OR') || expression.contains('(')) {
            expression = evaluateExpression(expression);
        }
        
        return expression;
    }
    
    /**
     * Simplify the expression
     * 
     */
    public static string simplifyExpression(String expression, String LogicType){
        Map<String, String> Logic = new Map<String, String>(expressionLogic.get(LogicType));
        
        for(String key : Logic.keySet()) {
            expression = expression.replace(key, Logic.get(key));
        }
        
        return expression;
    } 
    
    /**
    * Fill AND and OR Logic
    * 
    */
    public static void fillLogic() {
        Map<String, String> ANDLogic = new Map<String, String>();
        Map<String, String> ORLogic = new Map<String, String>();
        Map<String, String> BRACELogic = new Map<String, String>();
        
        logicTypes.put('AND', 'AND');
        logicTypes.put('OR', 'OR');
        logicTypes.put('(', 'BRACES');
        
        // AND Logic
        ANDLogic.put('TRUE AND TRUE', 'TRUE');
        ANDLogic.put('TRUE AND FALSE', 'FALSE');
        ANDLogic.put('FALSE AND TRUE', 'FALSE');
        ANDLogic.put('FALSE AND FALSE', 'FALSE');
        expressionLogic.put('AND', ANDLogic);
        
        // OR Logic
        ORLogic.put('TRUE OR TRUE', 'TRUE');
        ORLogic.put('TRUE OR FALSE', 'TRUE');
        ORLogic.put('FALSE OR TRUE', 'TRUE');
        ORLogic.put('FALSE OR FALSE', 'FALSE');
        expressionLogic.put('OR', ORLogic);
        
        // Braces Logic
        BRACELogic.put('(TRUE)', 'TRUE');
        BRACELogic.put('(FALSE)', 'FALSE');
        expressionLogic.put('BRACES', BRACELogic);
    }
}

同样,我们也可以访问下面的链接去看原文的实现:https://vijayasankarn.wordpress.com/2018/07/05/salesforce-apex-evaluate-boolean-string-expression/

相关文章

  • 2021-04-08 Salesforce Apex Evalu

    需求具体如下:在Custom Metadata中配置了不同规则的Expression,例如(TRUE AND (F...

  • 一款Salesforce测试工具: Apex Test Kit

    这里给大家介绍一款Salesforce测试数据生成工具Apex Test Kit。 每个Salesforce开发者...

  • Apex 企业设计模式

    FFLIB 是一个免费的框架,对 Apex 进行了扩展。它的结构实现了 Salesforce 推荐的Apex 企业...

  • 从网络服务生成Apex类

    使用WSDL2Apex从网络服务生成Apex类 如果某个网络服务被定义在WSDL文件中,而Salesforce必须...

  • Apex简介

    Apex特点 Salesforce为开发者提供了Apex语言。它是一种语法上类似于Java的编程语言,有以下特点:...

  • Apex API 请求

    Salesforce与网络服务的通信 在Salesforce中可以利用Apex类与远程站点的网络服务进行通信。当远...

  • 收藏贴!Salesforce开发课程必看的10个Apex最佳实践

    Apex是一种强类型的,面向对象的编程语言,开发人员通过Apex表现业务逻辑来补充Salesforce平台所需的功...

  • Salesforce基础 - 认识Apex

    什么是Apex? Apex是一种强类型的面向对象程序设计语言,它允许开发者在 Salesforce 服务器上执行流...

  • Salesforce基础 - Apex变量

    变量 变量使用 java 风格的语法声明。例如: 和 Java 一样,多个变量可以在一个语句中声明和初始化,使用逗...

  • Salesforce基础 - Apex常量

    常量 常量是指在程序的整个运行过程中值保持不变的量。常量使用 final 关键字来定义。使用 final 关键字意...

网友评论

      本文标题:2021-04-08 Salesforce Apex Evalu

      本文链接:https://www.haomeiwen.com/subject/kqfvkltx.html