我正在尝试使用自定义UI构建规则,并使用CodeDom为我的工作流模块执行。我不想使用WF提供的Rules接口。为了构建/执行规则,我创建了一个Condition和ThenAction / ElseActions。目前我能够成功执行一个条件。意味着假设订单实体具有 OrderID,Amount,NoOfItems,Discount和TotalAmount等属性。
能够建立以下条件:
if (this.Amount > 1000)
thisDiscount = 100;
建立左/右条件:
CodePropertyReferenceExpression technologyRef = new CodePropertyReferenceExpression(thisRef, " Amount");
CodePrimitiveExpression wfConstant = new CodePrimitiveExpression(1000);
// if ( this. Amount > 1000)
CodeBinaryOperatorExpression cond = new CodeBinaryOperatorExpression();
cond.Left = technologyRef;
cond.Operator = CodeBinaryOperatorType.GreaterThanOrEqual;
cond.Right = wfConstant;
Rule rule = new Rule("rule1");
rule.Condition = new RuleExpressionCondition(cond);
无法构建以下条件:
if (this.Amount > 1000 && NoOfItems > 5)
thisDiscount = 150;
有人可以帮助我为规则建立多个条件吗? 表示在单个IF语句中对多个属性进行验证。
答案 0 :(得分:1)
第一个条件的树看起来像这样:
<
/ \
Amount 1000
这正是您在代码中表达的方式:CodeBinaryOperatorExpression
一个<
,然后是每个孩子的表达式。对第二个表达式执行相同操作几乎相同,但树将更大:
-----&&-----
/ \
< >
/ \ / \
Amount 1000 NoOfItems 5
也就是说,您将有一个CodeBinaryOperatorExpression
代表&&
(CodeBinaryOperatorType.BooleanAnd
),其左子节点将是<
节点,其右子节点将是>
节点。