diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java index f6503478d..54d5f1605 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java @@ -28,6 +28,11 @@ public class ForCondition extends LoopCondition{ throw new NoForNodeException(errorInfo); } + //先去判断isAccess方法,如果isAccess方法都返回false,整个FOR表达式不执行 + if (!this.getForNode().isAccess(slotIndex)){ + return; + } + //执行forCount组件 forNode.setCurrChainId(this.getCurrChainId()); forNode.execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java index 3bd15e5b3..b336151cb 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java @@ -27,6 +27,11 @@ public class IfCondition extends Condition { @Override public void execute(Integer slotIndex) throws Exception { if (ListUtil.toList(NodeTypeEnum.IF, NodeTypeEnum.IF_SCRIPT).contains(getIfNode().getType())){ + //先去判断isAccess方法,如果isAccess方法都返回false,整个IF表达式不执行 + if (!this.getIfNode().isAccess(slotIndex)){ + return; + } + //先执行IF节点 this.getIfNode().setCurrChainId(this.getCurrChainId()); this.getIfNode().execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java index e40141496..40f569262 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java @@ -24,6 +24,11 @@ public class IteratorCondition extends LoopCondition{ throw new NoIteratorNodeException(errorInfo); } + //先去判断isAccess方法,如果isAccess方法都返回false,整个ITERATOR表达式不执行 + if (!this.getIteratorNode().isAccess(slotIndex)){ + return; + } + //执行Iterator组件 iteratorNode.setCurrChainId(this.getCurrChainId()); iteratorNode.execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java index 9e26261df..5a33928c5 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java @@ -36,6 +36,11 @@ public class SwitchCondition extends Condition{ @Override public void execute(Integer slotIndex) throws Exception { if (ListUtil.toList(NodeTypeEnum.SWITCH, NodeTypeEnum.SWITCH_SCRIPT).contains(this.getSwitchNode().getType())){ + //先去判断isAccess方法,如果isAccess方法都返回false,整个SWITCH表达式不执行 + if (!this.getSwitchNode().isAccess(slotIndex)){ + return; + } + //先执行switch节点 this.getSwitchNode().setCurrChainId(this.getCurrChainId()); this.getSwitchNode().execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java index 3e6773b55..6d6ba358f 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java @@ -28,6 +28,11 @@ public class WhileCondition extends LoopCondition{ throw new NoWhileNodeException(errorInfo); } + //先去判断isAccess方法,如果isAccess方法都返回false,整个WHILE表达式不执行 + if (!this.getWhileNode().isAccess(slotIndex)){ + return; + } + //获得要循环的可执行对象 Executable executableItem = this.getDoExecutor(); diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java index 97302498b..4af3289f1 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java @@ -84,4 +84,12 @@ public class IfELSpringbootTest extends BaseTest { Assert.assertEquals("x1==>x1==>x1==>x1==>d==>b==>a", response.getExecuteStepStrWithoutTime()); } + //IF节点中isAccess返回false,这个情况相当于IF整个表达式串没执行 + @Test + public void testIf8() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain8", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("c", response.getExecuteStepStrWithoutTime()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/cmp/X2Cmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/cmp/X2Cmp.java new file mode 100644 index 000000000..ebca577f9 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/cmp/X2Cmp.java @@ -0,0 +1,24 @@ +/** + *
Title: liteflow
+ *Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.ifelse.cmp; + +import com.yomahub.liteflow.core.NodeIfComponent; +import org.springframework.stereotype.Component; + +@Component("x2") +public class X2Cmp extends NodeIfComponent { + @Override + public boolean processIf() throws Exception { + return true; + } + + @Override + public boolean isAccess() { + return false; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml index b2a805b0c..a907ce080 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml @@ -38,4 +38,8 @@ .ELIF(x1.tag("false"), d) .ELSE(THEN(d, b, a)); + +